From 049ac16541f807f1fdf8e7555cba7bfc510fcc49 Mon Sep 17 00:00:00 2001 From: Sara Date: Fri, 27 Jun 2025 00:54:15 +0200 Subject: [PATCH] feat: started work on actors and party members --- modules/authority/actor_body.cpp | 68 ++++++ modules/authority/actor_body.h | 34 +++ modules/authority/game_state.cpp | 22 ++ modules/authority/game_state.h | 6 +- modules/authority/party_member_data.cpp | 36 +++ modules/authority/party_member_data.h | 26 +++ modules/authority/player_actor.cpp | 27 +++ modules/authority/player_actor.h | 16 ++ modules/authority/player_input.cpp | 72 ++++++ modules/authority/player_input.h | 33 +++ modules/authority/register_types.cpp | 10 +- project/locales/city.tscn | 224 ++++++++++--------- project/maps/map.tscn | 2 +- project/objects/characters/player_actor.tscn | 21 ++ project/project.godot | 23 ++ 15 files changed, 513 insertions(+), 107 deletions(-) create mode 100644 modules/authority/actor_body.cpp create mode 100644 modules/authority/actor_body.h create mode 100644 modules/authority/party_member_data.cpp create mode 100644 modules/authority/party_member_data.h create mode 100644 modules/authority/player_actor.cpp create mode 100644 modules/authority/player_actor.h create mode 100644 modules/authority/player_input.cpp create mode 100644 modules/authority/player_input.h create mode 100644 project/objects/characters/player_actor.tscn diff --git a/modules/authority/actor_body.cpp b/modules/authority/actor_body.cpp new file mode 100644 index 00000000..e2937295 --- /dev/null +++ b/modules/authority/actor_body.cpp @@ -0,0 +1,68 @@ +#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::_notification(int what) { + if (Engine::get_singleton()->is_editor_hint()) { + return; + } + switch (what) { + default: + return; + case NOTIFICATION_PHYSICS_PROCESS: + physics_process(get_physics_process_delta_time()); + return; + } +} + +void ActorBody::physics_process(double delta) { + set_velocity(get_movement_direction() * this->movement_speed); + move_and_slide(); +} + +void ActorBody::set_movement_direction(Vector3 direction) { + this->mode = Direction; + this->movement_vector = { direction.x, 0.f, direction.y }; +} + +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.y }; +} + +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::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; +} diff --git a/modules/authority/actor_body.h b/modules/authority/actor_body.h new file mode 100644 index 00000000..5fb20086 --- /dev/null +++ b/modules/authority/actor_body.h @@ -0,0 +1,34 @@ +#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 set_movement_speed(float speed); + float get_movement_speed() const; + MovementMode get_movement_mode() const; + +private: + float movement_speed{ 1.f }; + Vector3 movement_vector{ 0.f, 0.f, 0.f }; + MovementMode mode{ Direction }; +}; + +#endif //! ACTOR_BODY_H diff --git a/modules/authority/game_state.cpp b/modules/authority/game_state.cpp index 026b13eb..e3a2e0f1 100644 --- a/modules/authority/game_state.cpp +++ b/modules/authority/game_state.cpp @@ -6,6 +6,10 @@ GameState *GameState::singleton_instance{ nullptr }; void GameState::_bind_methods() { BIND_PROPERTY(Variant::STRING, locale_uid); BIND_PROPERTY(Variant::STRING, locale_entrance_path); + { + String const party_member_data_hint{ vformat("%s/%s:PartyMemberData", Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE) }; + BIND_HPROPERTY(Variant::ARRAY, player_party, PROPERTY_HINT_ARRAY_TYPE, party_member_data_hint); + } } GameState::GameState() { @@ -35,3 +39,21 @@ void GameState::set_locale_entrance_path(String const &value) { String GameState::get_locale_entrance_path() const { return this->locale_uid; } + +void GameState::set_player_party(Array array) { + this->player_party.clear(); + for (int i{ 0 }; i < array.size(); ++i) { + Ref data{ array[i] }; + if (data.is_valid()) { + this->player_party.push_back(data); + } + } +} + +Array GameState::get_player_party() const { + Array a{}; + for (Ref const &data : this->player_party) { + a.push_back(data); + } + return a; +} diff --git a/modules/authority/game_state.h b/modules/authority/game_state.h index a818357d..b3f0a7af 100644 --- a/modules/authority/game_state.h +++ b/modules/authority/game_state.h @@ -1,8 +1,9 @@ #ifndef GAME_STATE_H #define GAME_STATE_H -#include "core/object/class_db.h" +#include "authority/party_member_data.h" #include "core/object/object.h" +#include "core/templates/vector.h" class GameState : public Object { GDCLASS(GameState, Object); @@ -17,10 +18,13 @@ public: String get_locale_uid() const; void set_locale_entrance_path(String const &value); String get_locale_entrance_path() const; + void set_player_party(Array array); + Array get_player_party() const; private: String locale_uid{ "" }; String locale_entrance_path{ "" }; + Vector> player_party{}; }; #endif // !GAME_STATE_H diff --git a/modules/authority/party_member_data.cpp b/modules/authority/party_member_data.cpp new file mode 100644 index 00000000..46d95c8f --- /dev/null +++ b/modules/authority/party_member_data.cpp @@ -0,0 +1,36 @@ +#include "party_member_data.h" +#include "macros.h" + +void PartyMemberData::_bind_methods() { + BIND_PROPERTY(Variant::STRING, first_name); + BIND_PROPERTY(Variant::INT, player_trust); + BIND_PROPERTY(Variant::INT, player_fear); +} + +int PartyMemberData::get_player_authority() const { + return this->player_fear + this->player_trust; +} + +void PartyMemberData::set_first_name(String name) { + this->first_name = name; +} + +String PartyMemberData::get_first_name() const { + return this->first_name; +} + +void PartyMemberData::set_player_trust(int value) { + this->player_trust = value; +} + +int PartyMemberData::get_player_trust() const { + return this->player_trust; +} + +void PartyMemberData::set_player_fear(int value) { + this->player_fear = value; +} + +int PartyMemberData::get_player_fear() const { + return this->player_fear; +} diff --git a/modules/authority/party_member_data.h b/modules/authority/party_member_data.h new file mode 100644 index 00000000..91c9a5c1 --- /dev/null +++ b/modules/authority/party_member_data.h @@ -0,0 +1,26 @@ +#ifndef PARTY_MEMBER_DATA_H +#define PARTY_MEMBER_DATA_H + +#include "core/io/resource.h" + +class PartyMemberData : public Resource { + GDCLASS(PartyMemberData, Resource); + static void _bind_methods(); + +public: + int get_player_authority() const; + + void set_first_name(String name); + String get_first_name() const; + void set_player_trust(int value); + int get_player_trust() const; + void set_player_fear(int value); + int get_player_fear() const; + +private: + String first_name{ "Firstname" }; + int player_trust{ 1 }; + int player_fear{ 1 }; +}; + +#endif // !PARTY_MEMBER_DATA_H diff --git a/modules/authority/player_actor.cpp b/modules/authority/player_actor.cpp new file mode 100644 index 00000000..5bc08134 --- /dev/null +++ b/modules/authority/player_actor.cpp @@ -0,0 +1,27 @@ +#include "player_actor.h" +#include "authority/player_input.h" + +void PlayerActor::_bind_methods() { +} + +void PlayerActor::ready() { + PlayerInput *input{ cast_to(get_node(NodePath("%PlayerInput"))) }; + input->connect(PlayerInput::signal_movement, callable_mp(this, &self_type::input_move)); +} + +void PlayerActor::input_move(Vector2 movement) { + set_movement_direction({ movement.x, 0.f, movement.y }); +} + +void PlayerActor::_notification(int what) { + if (Engine::get_singleton()->is_editor_hint()) { + return; + } + switch (what) { + default: + return; + case NOTIFICATION_READY: + ready(); + return; + } +} diff --git a/modules/authority/player_actor.h b/modules/authority/player_actor.h new file mode 100644 index 00000000..af7bd862 --- /dev/null +++ b/modules/authority/player_actor.h @@ -0,0 +1,16 @@ +#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 input_move(Vector2 movement); + +public: + void _notification(int what); +}; + +#endif // !PLAYER_ACTOR_H diff --git a/modules/authority/player_input.cpp b/modules/authority/player_input.cpp new file mode 100644 index 00000000..4228c55d --- /dev/null +++ b/modules/authority/player_input.cpp @@ -0,0 +1,72 @@ +#include "player_input.h" + +#include "core/input/input_event.h" +#include "macros.h" + +String const PlayerInput::signal_movement{ "movement" }; + +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); + ADD_SIGNAL(MethodInfo(self_type::signal_movement, PropertyInfo(Variant::VECTOR2, "movement_directions"))); +} + +void PlayerInput::_notification(int what) { + if (Engine::get_singleton()->is_editor_hint()) { + return; + } + switch (what) { + default: + return; + case NOTIFICATION_READY: + this->set_process_unhandled_input(true); + return; + } +} + +void PlayerInput::unhandled_input(Ref 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_right, self_type::action_move_left) }; + float const v_axis{ input->get_axis(self_type::action_move_back, self_type::action_move_forward) }; + this->emit_signal(self_type::signal_movement, Vector2{ h_axis, v_axis }); + } +} + +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; +} diff --git a/modules/authority/player_input.h b/modules/authority/player_input.h new file mode 100644 index 00000000..7dba0ec4 --- /dev/null +++ b/modules/authority/player_input.h @@ -0,0 +1,33 @@ +#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 const &event) override; + 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; + +public: + static String const signal_movement; + +private: + String action_move_left{ "move_left" }; + String action_move_right{ "move_right" }; + String action_move_forward{ "move_forward" }; + String action_move_back{ "move_back" }; +}; + +#endif // !PLAYER_INPUT_H diff --git a/modules/authority/register_types.cpp b/modules/authority/register_types.cpp index 4d0c421a..0d44b7d7 100644 --- a/modules/authority/register_types.cpp +++ b/modules/authority/register_types.cpp @@ -1,7 +1,11 @@ #include "register_types.h" +#include "authority/actor_body.h" #include "authority/game_state.h" #include "authority/locale_marker.h" +#include "authority/party_member_data.h" +#include "authority/player_actor.h" +#include "authority/player_input.h" #include "core/config/engine.h" #include "core/object/class_db.h" @@ -12,7 +16,11 @@ void initialize_authority_module(ModuleInitializationLevel p_level) { return; } GDREGISTER_CLASS(GameState); - GDREGISTER_CLASS(LocaleMarker); + GDREGISTER_RUNTIME_CLASS(LocaleMarker); + GDREGISTER_RUNTIME_CLASS(PartyMemberData); + GDREGISTER_CLASS(ActorBody); + GDREGISTER_CLASS(PlayerActor); + GDREGISTER_CLASS(PlayerInput); game_state = memnew(GameState); Engine::get_singleton()->add_singleton(Engine::Singleton("GameState", GameState::get_singleton())); diff --git a/project/locales/city.tscn b/project/locales/city.tscn index 2e304ffc..45461d8d 100644 --- a/project/locales/city.tscn +++ b/project/locales/city.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=6 format=3 uid="uid://bqaoxvqgrbi3v"] +[gd_scene load_steps=7 format=3 uid="uid://bqaoxvqgrbi3v"] [ext_resource type="Material" uid="uid://cbuk8uxxuj7j5" path="res://materials/grids/grass.tres" id="1_etye1"] [ext_resource type="Material" uid="uid://ke4yek3xtin5" path="res://materials/grids/bricks.tres" id="1_sb1vi"] +[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) @@ -16,559 +17,574 @@ sky = SubResource("Sky_vuk2b") tonemap_mode = 2 glow_enabled = true -[node name="City" type="Node3D"] +[node name="City" type="Node"] -[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +[node name="PartySelectionUI" type="CanvasLayer" parent="."] + +[node name="VBoxContainer" type="VBoxContainer" parent="PartySelectionUI"] +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = -298.0 +offset_top = -211.0 +offset_bottom = 211.0 +grow_horizontal = 0 +grow_vertical = 2 + +[node name="Level" type="Node3D" parent="."] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="Level"] 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) +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Level"] +transform = Transform3D(-0.866024, -0.433016, 0.250001, 0, 0.499998, 0.866026, -0.500003, 0.749999, -0.43301, 0, 0, 0) shadow_enabled = true -[node name="CSGWorld" type="CSGCombiner3D" parent="."] +[node name="CSGWorld" type="CSGCombiner3D" parent="Level"] use_collision = true -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.7726, 1.24028, -3.26613) size = Vector3(29.3063, 2.53036, 32.2042) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] operation = 2 size = Vector3(28.3818, 4.94897, 31.2627) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.3707, 0, 8.21931) operation = 2 size = Vector3(5.48248, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D10" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D10" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.996095, -0.0882858, 0, 0.0882858, 0.996095, 0, 0, 0, 1, -4.27235, 1.64007, -16.0551) operation = 2 size = Vector3(17.209, 2.77515, 1.67773) material = ExtResource("1_sb1vi") -[node name="CSGBox3D11" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D11" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(-0.662908, 0.748701, 0, -0.748701, -0.662908, 0, 0, 0, 1, 1.99536, 0.140041, -16.0551) operation = 2 size = Vector3(3.51099, 4.26892, 1.67773) material = ExtResource("1_sb1vi") -[node name="CSGBox3D12" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D12" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.0515306, -0.596407, 0.801026, -0.589269, -0.665739, -0.45777, 0.806292, -0.448431, -0.38575, 13.6247, 0.402275, -15.0203) operation = 2 size = Vector3(4.65393, 4.26892, 4.29919) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(1, 0, 0, 0, 0.990234, 0.139415, 0, -0.139415, 0.990234, -15.0347, 1.84148, -10.1624) operation = 2 size = Vector3(5.48248, 4.94897, 15.628) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.996356, 0.0852952, 0, -0.0852952, 0.996356, 0, 0, 0, 1, -6.08641, 2.3849, 15.0748) operation = 2 size = Vector3(18.0761, 4.49255, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D13" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D13" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.940934, 0.33859, 0, -0.33859, 0.940934, 0, 0, 0, 1, 10.9771, 1.22338, 15.0748) operation = 2 size = Vector3(5.48767, 4.49255, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.998184, -0.0602297, 0, 0.0602297, 0.998184, 0, 0, 0, 1, -11.169, 1.83497, 16.5285) operation = 2 size = Vector3(7.92215, 4.49255, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld/CSGBox3D2"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D2"] transform = Transform3D(0.938076, -0.346428, 0, 0.346428, 0.938076, 0, 0, 0, 1, -8.1568, 0.67643, 16.5285) operation = 2 size = Vector3(4.54713, 4.49255, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 17.3635, 1.24027, -22.297) size = Vector3(29.3063, 2.53036, 32.2042) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] operation = 2 size = Vector3(28.3818, 4.94897, 31.2627) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.3707, 0, 8.21931) operation = 2 size = Vector3(5.48248, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.67738, 1.90735e-06, -15.8587) operation = 2 size = Vector3(11.8087, 4.94897, 1.39062) material = ExtResource("1_sb1vi") -[node name="CSGBox3D10" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D10" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(0.983341, 0.181772, 0, -0.181772, 0.983341, 0, 0, 0, 1, 5.71055, 0.339279, 15.5698) operation = 2 size = Vector3(9.78, 4.23425, 1.39062) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -14.4351, 1.90735e-06, -3.8005) operation = 2 size = Vector3(11.8087, 4.94897, 1.39062) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(0.835299, 0.549796, 0, -0.549796, 0.835299, 0, 0, 0, 1, -2.58652, 1.00152, -15.8587) operation = 2 size = Vector3(2.53568, 4.46423, 1.39062) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld/CSGBox3D9"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D9"] transform = Transform3D(0.835299, 0.549796, -9.2008e-09, -0.491933, 0.747388, 0.446557, 0.245515, -0.373009, 0.894755, -14.5944, -0.54182, -15.1699) operation = 2 size = Vector3(3, 4.46423, 2.88232) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(0.94881, 0, 0.315848, 0, 1, 0, -0.315848, 0, 0.94881, -7.66859, 1.24028, 32.2569) size = Vector3(22.6908, 2.53036, 26.0577) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] operation = 2 size = Vector3(21.699, 4.94897, 24.7637) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.81546, 0, 1.44135) operation = 2 size = Vector3(5.48248, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D12" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D12" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(0.966641, 0.256107, 0.00379327, -0.221096, 0.841791, -0.492448, -0.129312, 0.475181, 0.870333, 10.1198, 1.29747, 12.165) operation = 2 size = Vector3(5.48248, 4.94897, 5.69867) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(0.861603, -0.507583, 0, 0.507583, 0.861603, 0, 0, 0, 1, 1.68174, 0.365051, 12.4396) operation = 2 size = Vector3(5.18265, 4.66061, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(0.956661, -0.291203, 0, 0.291203, 0.956661, 0, 8.9407e-08, -7.45058e-09, 1, -5.16157, 2.49941, 12.5804) operation = 2 size = Vector3(8.79707, 4.04699, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D11" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D11" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(-1.49012e-07, 6.70552e-08, -1, 0.291203, 0.956661, 0, 0.956661, -0.291203, -5.96046e-08, -10.3324, 0.55706, 9.10962) operation = 2 size = Vector3(8.30031, 5.37523, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(0.942027, 0.335534, 0, -0.335534, 0.942028, 0, 2.38419e-07, 7.45058e-08, 1, 1.96285, 0.912893, -11.3267) operation = 2 size = Vector3(20.6193, 10.1297, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(2.98023e-07, -2.98023e-08, 1, 0.477634, 0.878559, 0, -0.878558, 0.477634, 0, -11.4397, 0.843881, -2.17569) operation = 2 size = Vector3(9.11396, 5.37523, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D10" type="CSGBox3D" parent="CSGWorld/CSGBox3D4"] +[node name="CSGBox3D10" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D4"] transform = Transform3D(1.19209e-07, -4.47035e-08, 1, 0.22165, 0.975126, 0, -0.975125, 0.22165, 0, -11.4397, -1.17258, -1.42908) operation = 2 size = Vector3(9.26142, 5.37523, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(-0.980662, 0, -0.195706, 0, 1, 0, 0.195706, 0, -0.980662, 16.4482, 1.24028, 10.8159) size = Vector3(22.6908, 2.53036, 26.0577) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] operation = 2 size = Vector3(21.699, 4.94897, 24.7637) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.81546, 0, 1.44135) operation = 2 size = Vector3(5.48248, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D11" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D11" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(1, 0, -7.45058e-08, 0, 1, 0, 7.45058e-08, 0, 1, 9.81546, 1.02972, -11.1309) operation = 2 size = Vector3(5.48248, 2.88953, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D12" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D12" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(0.968409, -0.249366, -7.45058e-08, 0.249366, 0.968409, 0, 7.21521e-08, -1.85792e-08, 1, 7.47525, 1.68203, -11.1309) operation = 2 size = Vector3(5.48248, 2.88953, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(1, 0, -7.45058e-08, 0, 1, 0, 7.45058e-08, 0, 1, -7.5132, 2.28486, -10.4518) operation = 2 size = Vector3(8.62306, 4.94897, 5.58841) material = ExtResource("1_sb1vi") -[node name="CSGBox3D10" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D10" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(0.920047, -0.391807, -7.45058e-08, 0.391807, 0.920047, 0, 7.45058e-08, -2.98023e-08, 1, -6.59657, 0.52667, -12.3894) operation = 2 size = Vector3(7.21283, 3.23804, 1.71315) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(1, 0, -7.45058e-08, 0, 1, 0, 7.45058e-08, 0, 1, -1.74361, 1.34271, 10.7097) operation = 2 size = Vector3(19.7208, 2.26355, 5.36632) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(0.90949, -0.415725, -7.45058e-08, 0.415725, 0.90949, 0, 5.96046e-08, -2.98023e-08, 1, 6.5508, 1.03969, 12.4855) operation = 2 size = Vector3(3.29733, 2.26355, 1.9962) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld/CSGBox3D7"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D7"] transform = Transform3D(0.872811, 0.488058, -7.45058e-08, -0.488058, 0.872811, 0, 5.96046e-08, 4.47035e-08, 1, 3.25758, 0.0104947, 12.4855) operation = 2 size = Vector3(3.29733, 3.41986, 1.9962) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.4648, 1.24028, -35.2034) size = Vector3(22.6908, 2.53036, 26.0577) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] operation = 2 size = Vector3(21.699, 4.94897, 24.7637) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.81546, 0, 1.44135) operation = 2 size = Vector3(5.48248, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] transform = Transform3D(0.922282, -0.386518, 0, 0.386518, 0.922282, 0, 0, 0, 1, -1.86533, 0.1865, 12.965) operation = 2 size = Vector3(7.06031, 5.05847, 2.48825) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] transform = Transform3D(-4.03142e-08, 1.68952e-08, 1, 0.386518, 0.922282, 0, -0.922282, 0.386518, -4.37114e-08, -10.9717, 0.1865, -0.139679) operation = 2 size = Vector3(7.06031, 5.05847, 2.48825) material = ExtResource("1_sb1vi") -[node name="CSGBox3D9" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D9" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] transform = Transform3D(-0.999949, 0.0101053, -8.74228e-08, 0.0101053, 0.999949, 0, 8.74183e-08, -8.83436e-10, -1, 1.46112, -0.431518, -12.5492) operation = 2 size = Vector3(10.2582, 5.05847, 2.48825) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGWorld/CSGBox3D5"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGWorld/CSGBox3D5"] transform = Transform3D(1, 0, 0, 0, 0.856465, 0.516204, 0, -0.516204, 0.856465, 11.0115, 0, -6.14323) operation = 2 size = Vector3(3.41214, 4.94897, 4.52136) material = ExtResource("1_sb1vi") -[node name="CSGBox3D" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0259626, -3.00393, -0.963224) size = Vector3(86.0781, 6, 106.223) material = ExtResource("1_etye1") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.295873, -0.0920334, -20.6882) size = Vector3(5.66602, 0.212601, 66.5905) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(0.951525, 0, 0.307573, 0, 1, 0, -0.307573, 0, 0.951525, 6.34913, -0.0920353, 30.9568) size = Vector3(5.66602, 0.212601, 40.6149) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGWorld"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGWorld"] transform = Transform3D(0.979392, 0, 0.201967, 0, 1, 0, -0.201967, 0, 0.979392, 2.65383, -0.0920353, 13.0373) size = Vector3(5.66602, 0.212601, 22.0021) material = ExtResource("1_sb1vi") -[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."] +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Level"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.7127, -3.8147e-06, -4.44497) use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.943035, 2.69934, 0.370387) size = Vector3(13.2101, 6.39868, 18.7856) material = ExtResource("1_sb1vi") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.779079, 3.9671, 0.421809) operation = 2 size = Vector3(12.1248, 7.93005, 17.5173) material = ExtResource("1_sb1vi") -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05528, 5.6087, 1.09461) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(1, 0, 0, 0, 0.993972, -0.10963, 0, 0.10963, 0.993972, -6.20065, 6.81794, -1.62846) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -2.90541, 6.09294, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -0.501738, 6.60845, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(-4.11049e-08, 0.924792, 0.380473, 1.48684e-08, 0.380473, -0.924792, -1, -3.23565e-08, -2.93895e-08, 1.50422, 4.57072, -8.66012) operation = 2 size = Vector3(2.34985, 3.30096, 3.98828) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGCombiner3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.47246, 0.911386, 4.88385) operation = 2 size = Vector3(1.52942, 1.75981, 1.18262) material = ExtResource("1_sb1vi") -[node name="CSGCombiner3D5" type="CSGCombiner3D" parent="."] +[node name="CSGCombiner3D5" type="CSGCombiner3D" parent="Level"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.3902, -3.8147e-06, -34.9045) use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.943035, 2.69934, 0.370387) size = Vector3(13.2101, 6.39868, 18.7856) material = ExtResource("1_sb1vi") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.779079, 3.9671, 0.421809) operation = 2 size = Vector3(12.1248, 7.93005, 17.5173) material = ExtResource("1_sb1vi") -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05528, 5.6087, 1.09461) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(1, 0, 0, 0, 0.993972, -0.10963, 0, 0.10963, 0.993972, -6.20065, 6.81794, -1.62846) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -2.90541, 6.09294, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -0.501738, 6.60845, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(-4.11049e-08, 0.924792, 0.380473, 1.48684e-08, 0.380473, -0.924792, -1, -3.23565e-08, -2.93895e-08, 1.44811, 4.70709, -8.66012) operation = 2 size = Vector3(2.34985, 3.30096, 4.2832) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D5"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGCombiner3D5"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.47246, 0.911386, 4.88385) operation = 2 size = Vector3(1.52942, 1.75981, 1.18262) material = ExtResource("1_sb1vi") -[node name="CSGCombiner3D2" type="CSGCombiner3D" parent="."] +[node name="CSGCombiner3D2" type="CSGCombiner3D" parent="Level"] transform = Transform3D(0.947261, 0, 0.320464, 0, 1, 0, -0.320464, 0, 0.947261, -9.09123, 0, 34.072) use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.943035, 2.69934, 0.370387) size = Vector3(13.2101, 6.39868, 18.7856) material = ExtResource("1_sb1vi") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.779079, 3.9671, 0.421809) operation = 2 size = Vector3(12.1248, 7.93005, 17.5173) material = ExtResource("1_sb1vi") -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05528, 5.6087, 1.09461) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(1, 0, 0, 0, 0.993972, -0.10963, 0, 0.10963, 0.993972, -6.20065, 6.81794, -1.62846) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -2.90541, 6.09294, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -0.501738, 6.60845, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(-2.98023e-08, 0.924792, 0.380473, 1.48684e-08, 0.380473, -0.924792, -1, -2.98023e-08, -6.70552e-08, 1.43882, 4.72967, -8.66012) operation = 2 size = Vector3(2.34985, 3.30096, 4.33203) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D2"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGCombiner3D2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.47246, 0.911386, 4.88385) operation = 2 size = Vector3(1.52942, 1.75981, 1.18262) material = ExtResource("1_sb1vi") -[node name="CSGCombiner3D3" type="CSGCombiner3D" parent="."] +[node name="CSGCombiner3D3" type="CSGCombiner3D" parent="Level"] transform = Transform3D(-0.979862, 0, -0.199676, 0, 1, 0, 0.199676, 0, -0.979862, 18.4676, 0, 11.5749) use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.943035, 2.69934, 0.370387) size = Vector3(13.2101, 6.39868, 18.7856) material = ExtResource("1_sb1vi") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.779079, 3.9671, 0.421809) operation = 2 size = Vector3(12.1248, 7.93005, 17.5173) material = ExtResource("1_sb1vi") -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05528, 5.6087, 1.09461) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(1, 0, 0, 0, 0.993972, -0.10963, 0, 0.10963, 0.993972, -6.20065, 6.81794, -1.62846) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -2.90541, 6.09294, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -0.501738, 6.60845, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(-4.11049e-08, 0.924792, 0.380473, 1.48684e-08, 0.380473, -0.924792, -1, -3.23565e-08, -2.93895e-08, 1.55623, 4.44428, -8.66012) operation = 2 size = Vector3(2.34985, 3.30096, 3.71484) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D3"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGCombiner3D3"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.47246, 0.911386, 4.88385) operation = 2 size = Vector3(1.52942, 1.75981, 1.18262) material = ExtResource("1_sb1vi") -[node name="CSGCombiner3D4" type="CSGCombiner3D" parent="."] +[node name="CSGCombiner3D4" type="CSGCombiner3D" parent="Level"] transform = Transform3D(-0.970654, 0, 0.240482, 0, 1, 0, -0.240482, 0, -0.970654, 19.1359, 0, -21.0191) use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.943035, 2.69934, 0.370387) size = Vector3(13.2101, 6.39868, 18.7856) material = ExtResource("1_sb1vi") -[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D3" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.779079, 3.9671, 0.421809) operation = 2 size = Vector3(12.1248, 7.93005, 17.5173) material = ExtResource("1_sb1vi") -[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D2" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.05528, 5.6087, 1.09461) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D5" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(1, 0, 0, 0, 0.993972, -0.10963, 0, 0.10963, 0.993972, -6.20065, 6.81794, -1.62846) operation = 2 size = Vector3(6.36378, 4.64685, 18.8601) material = ExtResource("1_sb1vi") -[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D6" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -2.90541, 6.09294, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D7" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(-4.11049e-08, 0.441193, 0.897412, 1.48684e-08, 0.897412, -0.441193, -1, -4.79209e-09, -4.34479e-08, -0.501738, 6.60845, 9.63982) operation = 2 size = Vector3(2.34985, 3.30096, 4) material = ExtResource("1_sb1vi") -[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D8" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(-4.11049e-08, 0.924792, 0.380473, 1.48684e-08, 0.380473, -0.924792, -1, -3.23565e-08, -2.93895e-08, 1.55623, 4.44428, -8.66012) operation = 2 size = Vector3(2.34985, 3.30096, 3.71484) material = ExtResource("1_sb1vi") -[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D4"] +[node name="CSGBox3D4" type="CSGBox3D" parent="Level/CSGCombiner3D4"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.47246, 0.911386, 4.88385) operation = 2 size = Vector3(1.52942, 1.75981, 1.18262) material = ExtResource("1_sb1vi") -[node name="Camera3D" type="Camera3D" parent="."] -transform = Transform3D(-0.882496, -0.0801336, 0.463442, -1.11759e-08, 0.985378, 0.170381, -0.470319, 0.150361, -0.869593, 13.939, 2.24424, -48.4686) -fov = 50.625 +[node name="PlayerActor" parent="." instance=ExtResource("3_vuk2b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.6368, -0.00393009, -46.4616) diff --git a/project/maps/map.tscn b/project/maps/map.tscn index 1b3b8ddb..3b75753e 100644 --- a/project/maps/map.tscn +++ b/project/maps/map.tscn @@ -50,9 +50,9 @@ material_override = SubResource("StandardMaterial3D_oejri") mesh = SubResource("QuadMesh_oejri") [node name="LocaleMarker" type="LocaleMarker" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.8126, -1.90735e-06, -10.5129) locale_scene = "uid://bqaoxvqgrbi3v" entrance_path = "%CampEntrance" +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.8126, -1.90735e-06, -10.5129) [node name="MeshInstance3D" type="MeshInstance3D" parent="LocaleMarker"] material_override = SubResource("StandardMaterial3D_urvl1") diff --git a/project/objects/characters/player_actor.tscn b/project/objects/characters/player_actor.tscn new file mode 100644 index 00000000..568b74a6 --- /dev/null +++ b/project/objects/characters/player_actor.tscn @@ -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="Camera3D" parent="."] +transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 4.76837e-07, 1.8675, -2.90407) diff --git a/project/project.godot b/project/project.godot index e0cf7709..f9818ecd 100644 --- a/project/project.godot +++ b/project/project.godot @@ -14,3 +14,26 @@ config/name="authority" run/main_scene="uid://mn086drdvyym" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" + +[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) +] +} +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) +] +} +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) +] +} +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) +] +}