feat: started work on actors and party members

This commit is contained in:
Sara 2025-06-27 00:54:15 +02:00
parent 80a948686f
commit 049ac16541
15 changed files with 513 additions and 107 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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<PartyMemberData> data{ array[i] };
if (data.is_valid()) {
this->player_party.push_back(data);
}
}
}
Array GameState::get_player_party() const {
Array a{};
for (Ref<PartyMemberData> const &data : this->player_party) {
a.push_back(data);
}
return a;
}

View file

@ -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<Ref<PartyMemberData>> player_party{};
};
#endif // !GAME_STATE_H

View file

@ -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;
}

View file

@ -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

View file

@ -0,0 +1,27 @@
#include "player_actor.h"
#include "authority/player_input.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));
}
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;
}
}

View file

@ -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

View file

@ -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<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_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;
}

View file

@ -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<InputEvent> 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

View file

@ -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()));

View file

@ -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)

View file

@ -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")

View 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="Camera3D" parent="."]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 4.76837e-07, 1.8675, -2.90407)

View file

@ -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)
]
}