Compare commits
8 commits
developmen
...
archive/v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f7e07797c8 | ||
|
|
062633c742 | ||
|
|
049ac16541 | ||
|
|
80a948686f | ||
|
|
8d07ee03fa | ||
|
|
1828ebbe21 | ||
|
|
f6e6cf9e55 | ||
|
|
37b3a63ae6 |
8
.gitignore
vendored
8
.gitignore
vendored
|
|
@ -5,16 +5,16 @@
|
||||||
# When configure fails, SCons outputs these
|
# When configure fails, SCons outputs these
|
||||||
config.log
|
config.log
|
||||||
.sconf_temp
|
.sconf_temp
|
||||||
|
.config
|
||||||
|
|
||||||
# build artifacts
|
# build artefacts
|
||||||
|
.cache/
|
||||||
*.o
|
*.o
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
|
|
||||||
engine/.github
|
engine/.github
|
||||||
project/.godot
|
project/.godot
|
||||||
build/authority.pck
|
build/authority.pck
|
||||||
build/authority.x86_64
|
build/authority.x86_64
|
||||||
build/authority.exe
|
build/authority.exe
|
||||||
build.zip
|
build.zip
|
||||||
|
|
||||||
# general-purpose cache folder (used by e.g clangd)
|
|
||||||
.cache
|
|
||||||
|
|
|
||||||
183
design/monarchist_camp.svg
Normal file
183
design/monarchist_camp.svg
Normal file
|
|
@ -0,0 +1,183 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="297mm"
|
||||||
|
height="210mm"
|
||||||
|
viewBox="0 0 297 210"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
sodipodi:docname="monarchist_camp.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#999999"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="1.640567"
|
||||||
|
inkscape:cx="483.67425"
|
||||||
|
inkscape:cy="468.43562"
|
||||||
|
inkscape:window-width="2540"
|
||||||
|
inkscape:window-height="1367"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
style="display:inline">
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:none;stroke-width:2"
|
||||||
|
id="path1"
|
||||||
|
r="26.849329"
|
||||||
|
cy="-22.617027"
|
||||||
|
cx="144.71928"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path3"
|
||||||
|
cx="197.15057"
|
||||||
|
cy="12.570523"
|
||||||
|
r="59.961803"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path4"
|
||||||
|
cx="170.88332"
|
||||||
|
cy="42.191242"
|
||||||
|
r="20.471628"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path5"
|
||||||
|
cx="157.94936"
|
||||||
|
cy="3.7319982"
|
||||||
|
r="19.529419"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path6"
|
||||||
|
cx="223.90398"
|
||||||
|
cy="-0.37947115"
|
||||||
|
r="30.321995"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<ellipse
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path7"
|
||||||
|
cx="174.47501"
|
||||||
|
cy="77.630127"
|
||||||
|
rx="6.205318"
|
||||||
|
ry="59.151665"
|
||||||
|
transform="rotate(11.27939)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path8"
|
||||||
|
cx="193.49632"
|
||||||
|
cy="-33.014153"
|
||||||
|
r="13.619201"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="path9"
|
||||||
|
cx="224.58922"
|
||||||
|
cy="46.388348"
|
||||||
|
r="16.617136"
|
||||||
|
transform="rotate(30.90333)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 144.06991,169.24883 -7.19465,31.03241"
|
||||||
|
id="path10" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ff3a00;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 166.80343,51.882914 5.05932,-22.12813"
|
||||||
|
id="path11" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="Layer 2">
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="rect11"
|
||||||
|
width="17.086163"
|
||||||
|
height="26.649414"
|
||||||
|
x="202.4292"
|
||||||
|
y="92.027176"
|
||||||
|
transform="rotate(4.15663)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="rect11-3"
|
||||||
|
width="16.747086"
|
||||||
|
height="23.300817"
|
||||||
|
x="211.42197"
|
||||||
|
y="-116.61307"
|
||||||
|
transform="rotate(67.03562)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="rect11-3-1"
|
||||||
|
width="16.747086"
|
||||||
|
height="23.300817"
|
||||||
|
x="153.35806"
|
||||||
|
y="52.250866"
|
||||||
|
transform="rotate(25.13231)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="rect11-3-1-3"
|
||||||
|
width="16.747086"
|
||||||
|
height="23.300817"
|
||||||
|
x="139.8774"
|
||||||
|
y="30.531561"
|
||||||
|
transform="rotate(16.66083)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
id="rect11-3-1-3-6"
|
||||||
|
width="13.885768"
|
||||||
|
height="15.52168"
|
||||||
|
x="-177.2769"
|
||||||
|
y="-109.64846"
|
||||||
|
transform="rotate(170.10507)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 168.51515,87.048444 49.7405,-10.74439 -11.59163,-23.78924 -34.05085,-6.36336 z"
|
||||||
|
id="path12"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 167.90348,92.072994 -6.81162,32.060266 3.42606,9.03285 50.86591,9.20609 4.78459,-60.134606 z"
|
||||||
|
id="path13"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 161.76062,139.13159 -9.82191,20.20953 4.20318,13.74019 19.43214,4.89741 29.11417,-13.30994 8.46487,-16.33574 z"
|
||||||
|
id="path14"
|
||||||
|
sodipodi:nodetypes="ccccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 131.20919,159.8118 8.99249,-4.41574 7.79771,-39.28515 -43.81905,-9.86931 -3.00506,27.21896 17.64521,22.70473 z"
|
||||||
|
id="path15"
|
||||||
|
sodipodi:nodetypes="ccccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="m 107.52909,93.556844 c 0.58795,0.35194 40.17069,12.855976 40.17069,12.855976 l 11.52783,-43.543596 -33.50469,-1.2183 z"
|
||||||
|
id="path16"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||||
|
d="M -10.027839,166.80916 -0.34598048,166.54137 7.8424327,122.34249 25.872585,93.782258 34.797274,63.284639 65.815884,30.44139 108.46648,12.423235 l 8.387,-18.0823962 -127.760166,0.1592669 z"
|
||||||
|
id="path17"
|
||||||
|
sodipodi:nodetypes="cccccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6 KiB |
2
engine
2
engine
|
|
@ -1 +1 @@
|
||||||
Subproject commit 3b48b0110e04e84db54788ccda4f8f5f7fa1fcf4
|
Subproject commit e531f3eb7b13a9adaaf5b15ac9b3aebc4c2030cd
|
||||||
3
justfile
3
justfile
|
|
@ -37,8 +37,9 @@ release-windows: build
|
||||||
initialize-template projectname:
|
initialize-template projectname:
|
||||||
# Initializing Template {{projectname}}
|
# Initializing Template {{projectname}}
|
||||||
sed -i -e "s/PROJECT/{{projectname}}/g" ./modules/PROJECT/register_types.h ./modules/PROJECT/register_types.cpp ./project/project.godot ./project/export_presets.cfg .gitignore
|
sed -i -e "s/PROJECT/{{projectname}}/g" ./modules/PROJECT/register_types.h ./modules/PROJECT/register_types.cpp ./project/project.godot ./project/export_presets.cfg .gitignore
|
||||||
sed -i -e "s/authority/{{projectname}}/" ./justfile
|
sed "s/change_me/{{projectname}}/" ./justfile
|
||||||
mv ./modules/PROJECT ./modules/{{projectname}}
|
mv ./modules/PROJECT ./modules/{{projectname}}
|
||||||
|
# Done Initializing, you will still have to update BUILD_NAME in your justfile
|
||||||
|
|
||||||
format:
|
format:
|
||||||
# Formatting Custom Modules
|
# Formatting Custom Modules
|
||||||
|
|
|
||||||
BIN
modules/authority/__pycache__/config.cpython-313.pyc
Normal file
BIN
modules/authority/__pycache__/config.cpython-313.pyc
Normal file
Binary file not shown.
81
modules/authority/actor_body.cpp
Normal file
81
modules/authority/actor_body.cpp
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#include "actor_body.h"
|
||||||
|
#include "core/config/engine.h"
|
||||||
|
#include "core/object/object.h"
|
||||||
|
#include "macros.h"
|
||||||
|
|
||||||
|
void ActorBody::_bind_methods() {
|
||||||
|
BIND_HPROPERTY(Variant::FLOAT, movement_speed, PROPERTY_HINT_RANGE, "0.0,20.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::physics_process(double delta) {
|
||||||
|
if (this->teleport_on_process) {
|
||||||
|
set_global_position(this->teleport_target);
|
||||||
|
this->teleport_on_process = false;
|
||||||
|
force_update_transform();
|
||||||
|
}
|
||||||
|
set_velocity(get_movement_direction() * this->movement_speed);
|
||||||
|
move_and_slide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::_notification(int what) {
|
||||||
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (what) {
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
case NOTIFICATION_READY:
|
||||||
|
set_physics_process(true);
|
||||||
|
set_as_top_level(true);
|
||||||
|
case NOTIFICATION_PHYSICS_PROCESS:
|
||||||
|
physics_process(get_physics_process_delta_time());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::set_movement_direction(Vector3 direction) {
|
||||||
|
this->mode = Direction;
|
||||||
|
this->movement_vector = Vector3(direction.x, 0.f, direction.z).normalized();
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 ActorBody::get_movement_direction() const {
|
||||||
|
switch (this->mode) {
|
||||||
|
case Position: {
|
||||||
|
Vector3 const direction_3d{ get_global_position().direction_to(get_movement_target()) };
|
||||||
|
return Vector3{ direction_3d.x, 0.f, direction_3d.z };
|
||||||
|
} break;
|
||||||
|
case Direction:
|
||||||
|
return this->movement_vector;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::set_movement_target(Vector3 location) {
|
||||||
|
this->mode = Position;
|
||||||
|
this->movement_vector = { location.x, 0.f, location.z };
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 ActorBody::get_movement_target() const {
|
||||||
|
switch (this->mode) {
|
||||||
|
case Position:
|
||||||
|
return this->movement_vector;
|
||||||
|
case Direction:
|
||||||
|
return get_global_position() + this->movement_vector;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::teleport(Vector3 target) {
|
||||||
|
this->teleport_target = target;
|
||||||
|
this->teleport_on_process = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActorBody::set_movement_speed(float speed) {
|
||||||
|
this->movement_speed = speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ActorBody::get_movement_speed() const {
|
||||||
|
return this->movement_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActorBody::MovementMode ActorBody::get_movement_mode() const {
|
||||||
|
return this->mode;
|
||||||
|
}
|
||||||
37
modules/authority/actor_body.h
Normal file
37
modules/authority/actor_body.h
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef ACTOR_BODY_H
|
||||||
|
#define ACTOR_BODY_H
|
||||||
|
|
||||||
|
#include "scene/3d/physics/character_body_3d.h"
|
||||||
|
|
||||||
|
class ActorBody : public CharacterBody3D {
|
||||||
|
GDCLASS(ActorBody, CharacterBody3D);
|
||||||
|
static void _bind_methods();
|
||||||
|
void physics_process(double delta);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// support both directional and positional movement modes
|
||||||
|
enum MovementMode {
|
||||||
|
Direction,
|
||||||
|
Position
|
||||||
|
};
|
||||||
|
void _notification(int what);
|
||||||
|
|
||||||
|
void set_movement_direction(Vector3 direction);
|
||||||
|
Vector3 get_movement_direction() const;
|
||||||
|
void set_movement_target(Vector3 location);
|
||||||
|
Vector3 get_movement_target() const;
|
||||||
|
void teleport(Vector3 target);
|
||||||
|
|
||||||
|
void set_movement_speed(float speed);
|
||||||
|
float get_movement_speed() const;
|
||||||
|
MovementMode get_movement_mode() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
float movement_speed{ 3.f };
|
||||||
|
Vector3 movement_vector{ 0.f, 0.f, 0.f };
|
||||||
|
MovementMode mode{ Direction };
|
||||||
|
bool teleport_on_process{ false };
|
||||||
|
Vector3 teleport_target{};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //! ACTOR_BODY_H
|
||||||
18
modules/authority/game_state.cpp
Normal file
18
modules/authority/game_state.cpp
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#include "game_state.h"
|
||||||
|
#include "macros.h"
|
||||||
|
|
||||||
|
GameState *GameState::singleton_instance{ nullptr };
|
||||||
|
|
||||||
|
void GameState::_bind_methods() {}
|
||||||
|
|
||||||
|
GameState::GameState() {
|
||||||
|
self_type::singleton_instance = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameState::~GameState() {
|
||||||
|
self_type::singleton_instance = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameState *GameState::get_singleton() {
|
||||||
|
return self_type::singleton_instance;
|
||||||
|
}
|
||||||
19
modules/authority/game_state.h
Normal file
19
modules/authority/game_state.h
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef GAME_STATE_H
|
||||||
|
#define GAME_STATE_H
|
||||||
|
|
||||||
|
#include "core/object/class_db.h"
|
||||||
|
#include "core/object/object.h"
|
||||||
|
#include "core/templates/vector.h"
|
||||||
|
|
||||||
|
class GameState : public Object {
|
||||||
|
GDCLASS(GameState, Object);
|
||||||
|
static void _bind_methods();
|
||||||
|
static GameState *singleton_instance;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GameState();
|
||||||
|
virtual ~GameState();
|
||||||
|
static GameState *get_singleton();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !GAME_STATE_H
|
||||||
42
modules/authority/player_actor.cpp
Normal file
42
modules/authority/player_actor.cpp
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
#include "player_actor.h"
|
||||||
|
#include "authority/game_state.h"
|
||||||
|
#include "authority/player_input.h"
|
||||||
|
#include "scene/main/viewport.h"
|
||||||
|
|
||||||
|
void PlayerActor::_bind_methods() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerActor::ready() {
|
||||||
|
PlayerInput *input{ cast_to<PlayerInput>(get_node(NodePath("%PlayerInput"))) };
|
||||||
|
input->connect(PlayerInput::signal_movement, callable_mp(this, &self_type::input_move));
|
||||||
|
set_process(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerActor::process(double delta) {
|
||||||
|
Basis const basis{ this->get_viewport()->get_camera_3d()->get_global_basis() };
|
||||||
|
Vector3 x{ basis.get_column(0) };
|
||||||
|
x = Vector3{ x.x, 0.f, x.z }.normalized();
|
||||||
|
Vector3 z{ basis.get_column(2) };
|
||||||
|
z = Vector3{ z.x, 0.f, z.z }.normalized();
|
||||||
|
set_movement_direction(x * this->move_input.x + z * this->move_input.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerActor::input_move(Vector2 movement) {
|
||||||
|
this->move_input = movement;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerActor::_notification(int what) {
|
||||||
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (what) {
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
case NOTIFICATION_READY:
|
||||||
|
ready();
|
||||||
|
return;
|
||||||
|
case NOTIFICATION_PROCESS:
|
||||||
|
process(get_process_delta_time());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
20
modules/authority/player_actor.h
Normal file
20
modules/authority/player_actor.h
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef PLAYER_ACTOR_H
|
||||||
|
#define PLAYER_ACTOR_H
|
||||||
|
|
||||||
|
#include "actor_body.h"
|
||||||
|
|
||||||
|
class PlayerActor : public ActorBody {
|
||||||
|
GDCLASS(PlayerActor, ActorBody);
|
||||||
|
static void _bind_methods();
|
||||||
|
void ready();
|
||||||
|
void process(double delta);
|
||||||
|
void input_move(Vector2 movement);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void _notification(int what);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Vector2 move_input{ 0.f, 0.f };
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !PLAYER_ACTOR_H
|
||||||
146
modules/authority/player_input.cpp
Normal file
146
modules/authority/player_input.cpp
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
#include "player_input.h"
|
||||||
|
|
||||||
|
#include "core/input/input_event.h"
|
||||||
|
#include "macros.h"
|
||||||
|
|
||||||
|
String const PlayerInput::signal_movement{ "movement" };
|
||||||
|
String const PlayerInput::signal_look{ "look" };
|
||||||
|
String const PlayerInput::signal_mouselook{ "mouselook" };
|
||||||
|
|
||||||
|
void PlayerInput::_bind_methods() {
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_move_left);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_move_right);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_move_forward);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_move_back);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_look_left);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_look_right);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_look_up);
|
||||||
|
BIND_PROPERTY(Variant::STRING, action_look_down);
|
||||||
|
ADD_SIGNAL(MethodInfo(self_type::signal_movement, PropertyInfo(Variant::VECTOR2, "movement_directions")));
|
||||||
|
ADD_SIGNAL(MethodInfo(self_type::signal_look, PropertyInfo(Variant::VECTOR2, "look_delta")));
|
||||||
|
ADD_SIGNAL(MethodInfo(self_type::signal_mouselook, PropertyInfo(Variant::VECTOR2, "mouse_delta")));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::_notification(int what) {
|
||||||
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (what) {
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
case NOTIFICATION_READY:
|
||||||
|
set_process_unhandled_input(true);
|
||||||
|
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::unhandled_input(Ref<InputEvent> const &event) {
|
||||||
|
Input *input{ Input::get_singleton() };
|
||||||
|
|
||||||
|
bool is_movement_action{ event->is_action(self_type::action_move_left) };
|
||||||
|
is_movement_action |= event->is_action(self_type::action_move_right);
|
||||||
|
is_movement_action |= event->is_action(self_type::action_move_forward);
|
||||||
|
is_movement_action |= event->is_action(self_type::action_move_back);
|
||||||
|
if (is_movement_action) {
|
||||||
|
float const h_axis{ input->get_axis(self_type::action_move_left, self_type::action_move_right) };
|
||||||
|
float const v_axis{ input->get_axis(self_type::action_move_forward, self_type::action_move_back) };
|
||||||
|
emit_signal(self_type::signal_movement, Vector2{ h_axis, v_axis });
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_look_action{ event->is_action(self_type::action_look_left) };
|
||||||
|
is_look_action |= event->is_action(self_type::action_look_right);
|
||||||
|
is_look_action |= event->is_action(self_type::action_look_up);
|
||||||
|
is_look_action |= event->is_action(self_type::action_look_down);
|
||||||
|
if (is_look_action) {
|
||||||
|
float const h_axis{ input->get_axis(self_type::action_look_right, self_type::action_look_left) };
|
||||||
|
float const v_axis{ input->get_axis(self_type::action_look_down, self_type::action_look_up) };
|
||||||
|
emit_signal(self_type::signal_look, Vector2{ h_axis, v_axis } * this->look_speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<InputEventMouseMotion> mouse_motion_action{ event };
|
||||||
|
if (mouse_motion_action.is_valid()) {
|
||||||
|
Vector2 const velocity{ mouse_motion_action->get_relative() };
|
||||||
|
emit_signal(self_type::signal_mouselook, velocity * this->mouselook_speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_mouselook_speed(Vector2 speed) {
|
||||||
|
this->mouselook_speed = speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 PlayerInput::get_mouselook_speed() const {
|
||||||
|
return this->mouselook_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_look_speed(Vector2 speed) {
|
||||||
|
this->look_speed = speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 PlayerInput::get_look_speed() const {
|
||||||
|
return this->look_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_move_left(String action) {
|
||||||
|
this->action_move_left = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_move_left() const {
|
||||||
|
return this->action_move_left;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_move_right(String action) {
|
||||||
|
this->action_move_right = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_move_right() const {
|
||||||
|
return this->action_move_right;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_move_forward(String action) {
|
||||||
|
this->action_move_forward = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_move_forward() const {
|
||||||
|
return this->action_move_forward;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_move_back(String action) {
|
||||||
|
this->action_move_back = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_move_back() const {
|
||||||
|
return this->action_move_back;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_look_left(String action) {
|
||||||
|
this->action_look_left = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_look_left() const {
|
||||||
|
return this->action_look_left;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_look_right(String action) {
|
||||||
|
this->action_look_right = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_look_right() const {
|
||||||
|
return this->action_look_right;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_look_up(String action) {
|
||||||
|
this->action_look_up = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_look_up() const {
|
||||||
|
return this->action_look_up;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerInput::set_action_look_down(String action) {
|
||||||
|
this->action_look_down = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
String PlayerInput::get_action_look_down() const {
|
||||||
|
return this->action_look_down;
|
||||||
|
}
|
||||||
58
modules/authority/player_input.h
Normal file
58
modules/authority/player_input.h
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
#ifndef PLAYER_INPUT_H
|
||||||
|
#define PLAYER_INPUT_H
|
||||||
|
|
||||||
|
#include "core/input/input_event.h"
|
||||||
|
#include "scene/main/node.h"
|
||||||
|
|
||||||
|
class PlayerInput : public Node {
|
||||||
|
GDCLASS(PlayerInput, Node);
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
void _notification(int what);
|
||||||
|
virtual void unhandled_input(Ref<InputEvent> const &event) override;
|
||||||
|
|
||||||
|
void set_mouselook_speed(Vector2 speed);
|
||||||
|
Vector2 get_mouselook_speed() const;
|
||||||
|
void set_look_speed(Vector2 speed);
|
||||||
|
Vector2 get_look_speed() const;
|
||||||
|
|
||||||
|
void set_action_move_left(String action);
|
||||||
|
String get_action_move_left() const;
|
||||||
|
void set_action_move_right(String action);
|
||||||
|
String get_action_move_right() const;
|
||||||
|
void set_action_move_forward(String action);
|
||||||
|
String get_action_move_forward() const;
|
||||||
|
void set_action_move_back(String action);
|
||||||
|
String get_action_move_back() const;
|
||||||
|
|
||||||
|
void set_action_look_left(String action);
|
||||||
|
String get_action_look_left() const;
|
||||||
|
void set_action_look_right(String action);
|
||||||
|
String get_action_look_right() const;
|
||||||
|
void set_action_look_up(String action);
|
||||||
|
String get_action_look_up() const;
|
||||||
|
void set_action_look_down(String action);
|
||||||
|
String get_action_look_down() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static String const signal_movement;
|
||||||
|
static String const signal_look;
|
||||||
|
static String const signal_mouselook;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Vector2 mouselook_speed{ 0.001f, 0.001f };
|
||||||
|
Vector2 look_speed{ 1.75f, 1.75f };
|
||||||
|
|
||||||
|
String action_move_left{ "move_left" };
|
||||||
|
String action_move_right{ "move_right" };
|
||||||
|
String action_move_forward{ "move_forward" };
|
||||||
|
String action_move_back{ "move_back" };
|
||||||
|
|
||||||
|
String action_look_left{ "look_left" };
|
||||||
|
String action_look_right{ "look_right" };
|
||||||
|
String action_look_up{ "look_up" };
|
||||||
|
String action_look_down{ "look_down" };
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !PLAYER_INPUT_H
|
||||||
|
|
@ -1,15 +1,34 @@
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
|
#include "authority/actor_body.h"
|
||||||
|
#include "authority/game_state.h"
|
||||||
|
#include "authority/player_actor.h"
|
||||||
|
#include "authority/player_input.h"
|
||||||
|
#include "authority/third_person_camera.h"
|
||||||
|
#include "core/config/engine.h"
|
||||||
#include "core/object/class_db.h"
|
#include "core/object/class_db.h"
|
||||||
|
|
||||||
|
GameState *game_state{ nullptr };
|
||||||
|
|
||||||
void initialize_authority_module(ModuleInitializationLevel p_level) {
|
void initialize_authority_module(ModuleInitializationLevel p_level) {
|
||||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
GDREGISTER_CLASS(GameState);
|
||||||
|
GDREGISTER_CLASS(ActorBody);
|
||||||
|
GDREGISTER_CLASS(PlayerActor);
|
||||||
|
GDREGISTER_CLASS(PlayerInput);
|
||||||
|
GDREGISTER_CLASS(ThirdPersonCamera);
|
||||||
|
|
||||||
|
game_state = memnew(GameState);
|
||||||
|
Engine::get_singleton()->add_singleton(Engine::Singleton("GameState", GameState::get_singleton()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void uninitialize_authority_module(ModuleInitializationLevel p_level) {
|
void uninitialize_authority_module(ModuleInitializationLevel p_level) {
|
||||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (game_state) {
|
||||||
|
memdelete(game_state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
54
modules/authority/third_person_camera.cpp
Normal file
54
modules/authority/third_person_camera.cpp
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#include "third_person_camera.h"
|
||||||
|
#include "player_input.h"
|
||||||
|
|
||||||
|
void ThirdPersonCamera::_bind_methods() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::ready() {
|
||||||
|
set_process(true);
|
||||||
|
if (PlayerInput * player_input{ cast_to<PlayerInput>(get_node(NodePath("%PlayerInput"))) }) {
|
||||||
|
player_input->connect(PlayerInput::signal_look, callable_mp(this, &self_type::on_look_input));
|
||||||
|
player_input->connect(PlayerInput::signal_mouselook, callable_mp(this, &self_type::on_mouselook_input));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::process(double delta) {
|
||||||
|
this->look_rotation += look_rotation_motion * delta;
|
||||||
|
this->look_rotation.y = CLAMP(this->look_rotation.y, -Math_PI / 2.5, Math_PI / 2.5);
|
||||||
|
Vector3 pivot{ get_parent_node_3d()->get_global_position() };
|
||||||
|
pivot.y += this->height;
|
||||||
|
Vector3 offset{ 0.f, 0.f, this->distance };
|
||||||
|
offset.rotate({ 1.f, 0.f, 0.f }, this->look_rotation.y);
|
||||||
|
offset.rotate({ 0.f, 1.f, 0.f }, this->look_rotation.x);
|
||||||
|
look_at_from_position(pivot + offset, pivot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::on_look_input(Vector2 input) {
|
||||||
|
this->look_rotation_motion = input;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::on_mouselook_input(Vector2 input) {
|
||||||
|
this->look_rotation -= input;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::_notification(int what) {
|
||||||
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (what) {
|
||||||
|
case NOTIFICATION_READY:
|
||||||
|
ready();
|
||||||
|
break;
|
||||||
|
case NOTIFICATION_PROCESS:
|
||||||
|
process(get_process_delta_time());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThirdPersonCamera::set_base_rotation_speed(Vector2 value) {
|
||||||
|
this->base_rotation_speed = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 ThirdPersonCamera::get_base_rotation_speed() const {
|
||||||
|
return this->base_rotation_speed;
|
||||||
|
}
|
||||||
29
modules/authority/third_person_camera.h
Normal file
29
modules/authority/third_person_camera.h
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef THIRD_PERSON_CAMERA_H
|
||||||
|
#define THIRD_PERSON_CAMERA_H
|
||||||
|
|
||||||
|
#include "scene/3d/camera_3d.h"
|
||||||
|
|
||||||
|
class ThirdPersonCamera : public Camera3D {
|
||||||
|
GDCLASS(ThirdPersonCamera, Camera3D);
|
||||||
|
static void _bind_methods();
|
||||||
|
void ready();
|
||||||
|
void process(double delta);
|
||||||
|
void on_look_input(Vector2 input);
|
||||||
|
void on_mouselook_input(Vector2 input);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void _notification(int what);
|
||||||
|
|
||||||
|
void set_base_rotation_speed(Vector2 value);
|
||||||
|
Vector2 get_base_rotation_speed() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Vector2 look_rotation_motion{ 0.f, 0.f };
|
||||||
|
Vector2 look_rotation{ 0.f, 0.f };
|
||||||
|
|
||||||
|
Vector2 base_rotation_speed{ 0.1f, 0.1f };
|
||||||
|
float distance{ 3.f };
|
||||||
|
float height{ 2.2f };
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !THIRD_PERSON_CAMERA_H
|
||||||
13
project/level_props/tent.tscn
Normal file
13
project/level_props/tent.tscn
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://dkgep77ogr1tv"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://cupy5mpdsngcl" path="res://materials/grids/tent.tres" id="1_yfc7x"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_dudpm"]
|
||||||
|
size = Vector3(3, 1.3, 2)
|
||||||
|
|
||||||
|
[node name="Tent" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.658981, 0)
|
||||||
|
material_override = ExtResource("1_yfc7x")
|
||||||
|
mesh = SubResource("BoxMesh_dudpm")
|
||||||
39
project/locales/city.tscn
Normal file
39
project/locales/city.tscn
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
[gd_scene load_steps=6 format=3 uid="uid://bqaoxvqgrbi3v"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://cbuk8uxxuj7j5" path="res://materials/grids/grass.tres" id="1_etye1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cykd1a23ria6k" path="res://objects/characters/player_actor.tscn" id="3_vuk2b"]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_sb1vi"]
|
||||||
|
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||||
|
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_vuk2b"]
|
||||||
|
sky_material = SubResource("ProceduralSkyMaterial_sb1vi")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_wwygw"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_vuk2b")
|
||||||
|
tonemap_mode = 2
|
||||||
|
glow_enabled = true
|
||||||
|
|
||||||
|
[node name="City" type="Node"]
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_wwygw")
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
|
||||||
|
shadow_enabled = true
|
||||||
|
|
||||||
|
[node name="CampEntrance" type="Node3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.2797, -0.00393486, -42.0831)
|
||||||
|
|
||||||
|
[node name="PlayerActor" parent="." instance=ExtResource("3_vuk2b")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0171704, -0.00572681, 0.28793)
|
||||||
|
|
||||||
|
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505729, 0)
|
||||||
|
use_collision = true
|
||||||
|
size = Vector3(100, 1, 100)
|
||||||
|
material = ExtResource("1_etye1")
|
||||||
7
project/materials/grids/bricks.tres
Normal file
7
project/materials/grids/bricks.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://ke4yek3xtin5"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cd4cchmulwnc5" path="res://textures/grids/bricks.png" id="1_ustix"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_ustix")
|
||||||
|
uv1_triplanar = true
|
||||||
7
project/materials/grids/grass.tres
Normal file
7
project/materials/grids/grass.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cbuk8uxxuj7j5"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://f8djywm2jlah" path="res://textures/grids/grass.png" id="1_lqti4"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_lqti4")
|
||||||
|
uv1_triplanar = true
|
||||||
7
project/materials/grids/mud.tres
Normal file
7
project/materials/grids/mud.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://blcccgo88gl7c"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://br64q04tpxmli" path="res://textures/grids/mud.png" id="1_kexk5"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_kexk5")
|
||||||
|
uv1_triplanar = true
|
||||||
7
project/materials/grids/tent.tres
Normal file
7
project/materials/grids/tent.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cupy5mpdsngcl"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bh68a5vqm5h7l" path="res://textures/grids/tent.png" id="1_ifivq"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
albedo_texture = ExtResource("1_ifivq")
|
||||||
|
uv1_triplanar = true
|
||||||
21
project/objects/characters/player_actor.tscn
Normal file
21
project/objects/characters/player_actor.tscn
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://cykd1a23ria6k"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_7py3r"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_66ixd"]
|
||||||
|
|
||||||
|
[node name="PlayerActor" type="PlayerActor"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
shape = SubResource("CapsuleShape3D_7py3r")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_66ixd")
|
||||||
|
|
||||||
|
[node name="PlayerInput" type="PlayerInput" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="Camera3D" type="ThirdPersonCamera" parent="."]
|
||||||
|
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 4.76837e-07, 1.8675, -2.90407)
|
||||||
|
|
@ -11,5 +11,57 @@ config_version=5
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="authority"
|
config/name="authority"
|
||||||
|
run/main_scene="uid://bqaoxvqgrbi3v"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
window/vsync/vsync_mode=2
|
||||||
|
|
||||||
|
[input]
|
||||||
|
|
||||||
|
move_left={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_right={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_forward={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_back={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_left={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_right={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":2,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_up={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_down={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
|
||||||
BIN
project/textures/grids/bricks.png
Normal file
BIN
project/textures/grids/bricks.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
35
project/textures/grids/bricks.png.import
Normal file
35
project/textures/grids/bricks.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cd4cchmulwnc5"
|
||||||
|
path.s3tc="res://.godot/imported/bricks.png-217e783fed9aafaab4854f1be96e4aed.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://textures/grids/bricks.png"
|
||||||
|
dest_files=["res://.godot/imported/bricks.png-217e783fed9aafaab4854f1be96e4aed.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
project/textures/grids/grass.png
Normal file
BIN
project/textures/grids/grass.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
35
project/textures/grids/grass.png.import
Normal file
35
project/textures/grids/grass.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://f8djywm2jlah"
|
||||||
|
path.s3tc="res://.godot/imported/grass.png-94a6319b2d9ea30e834183f2653f3455.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://textures/grids/grass.png"
|
||||||
|
dest_files=["res://.godot/imported/grass.png-94a6319b2d9ea30e834183f2653f3455.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
project/textures/grids/mud.png
Normal file
BIN
project/textures/grids/mud.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
35
project/textures/grids/mud.png.import
Normal file
35
project/textures/grids/mud.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://br64q04tpxmli"
|
||||||
|
path.s3tc="res://.godot/imported/mud.png-f0a13a766854ada7e9976a2898dea1c2.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://textures/grids/mud.png"
|
||||||
|
dest_files=["res://.godot/imported/mud.png-f0a13a766854ada7e9976a2898dea1c2.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
project/textures/grids/rock.png
Normal file
BIN
project/textures/grids/rock.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
34
project/textures/grids/rock.png.import
Normal file
34
project/textures/grids/rock.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cawkm8y8ejdjs"
|
||||||
|
path="res://.godot/imported/rock.png-674cefcf962a6d115a3102bd49c5ab77.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://textures/grids/rock.png"
|
||||||
|
dest_files=["res://.godot/imported/rock.png-674cefcf962a6d115a3102bd49c5ab77.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
BIN
project/textures/grids/tent.png
Normal file
BIN
project/textures/grids/tent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
35
project/textures/grids/tent.png.import
Normal file
35
project/textures/grids/tent.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bh68a5vqm5h7l"
|
||||||
|
path.s3tc="res://.godot/imported/tent.png-683c31f751d990e004be3a99db100a94.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://textures/grids/tent.png"
|
||||||
|
dest_files=["res://.godot/imported/tent.png-683c31f751d990e004be3a99db100a94.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
Loading…
Reference in a new issue