commit 5bac9ddd2ab4f58ba13ff6ecf8d88f62591d251e Author: Michael Campbell Date: Thu Jan 29 14:23:33 2026 -0500 prototype diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4709183 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/building.gd b/building.gd new file mode 100644 index 0000000..8436ac2 --- /dev/null +++ b/building.gd @@ -0,0 +1,15 @@ +class_name Building +extends CollisionObject3D + +func _ready() -> void: + scale.y = randf_range(.5, 1.25) + +func hit(_proj: PlayerProjectile) -> void: + print("boom!") + SignalBus.building_destroyed.emit(self) + collision_layer = 1 # World collision only + + %Mesh.hide() + %DestroyedMesh.show() + %GPUParticles3D.preprocess = randf() + diff --git a/building.gd.uid b/building.gd.uid new file mode 100644 index 0000000..9c9b237 --- /dev/null +++ b/building.gd.uid @@ -0,0 +1 @@ +uid://bnr37lfj76u7n diff --git a/building.tscn b/building.tscn new file mode 100644 index 0000000..f636480 --- /dev/null +++ b/building.tscn @@ -0,0 +1,125 @@ +[gd_scene format=3 uid="uid://cm86dxphvhbb"] + +[ext_resource type="Script" uid="uid://bnr37lfj76u7n" path="res://building.gd" id="1_5j34s"] + +[sub_resource type="BoxMesh" id="BoxMesh_rqn35"] +size = Vector3(3, 5, 3) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5j34s"] +size = Vector3(3, 5, 3) + +[sub_resource type="Gradient" id="Gradient_2yopf"] +offsets = PackedFloat32Array(0.06315789, 0.6421053, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.1, 0.1, 0.1, 1, 0.58, 0.58, 0.58, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_f1gjg"] +gradient = SubResource("Gradient_2yopf") + +[sub_resource type="Gradient" id="Gradient_qnfc1"] +offsets = PackedFloat32Array(0.69473684, 1) +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_0rysw"] +gradient = SubResource("Gradient_qnfc1") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ow2p3"] +emission_shape = 3 +emission_box_extents = Vector3(1.575, 0.185, 1.465) +direction = Vector3(0, 1, 0) +spread = 0.0 +initial_velocity_min = 3.0 +initial_velocity_max = 5.0 +gravity = Vector3(0, 0, 0) +scale_min = 0.19999999 +scale_max = 0.75 +color_ramp = SubResource("GradientTexture1D_0rysw") +color_initial_ramp = SubResource("GradientTexture1D_f1gjg") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2vvqs"] +transparency = 1 +vertex_color_use_as_albedo = true + +[sub_resource type="SphereMesh" id="SphereMesh_8evq1"] +material = SubResource("StandardMaterial3D_2vvqs") + +[sub_resource type="BoxMesh" id="BoxMesh_5j34s"] + +[node name="Building" type="StaticBody3D" unique_id=713127214] +collision_layer = 5 +collision_mask = 0 +script = ExtResource("1_5j34s") + +[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1919101154] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0) +mesh = SubResource("BoxMesh_rqn35") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1627500046] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0) +shape = SubResource("BoxShape3D_5j34s") + +[node name="DestroyedMesh" type="Node3D" parent="." unique_id=1889390235] +unique_name_in_owner = true +visible = false + +[node name="GPUParticles3D" type="GPUParticles3D" parent="DestroyedMesh" unique_id=405124106] +unique_name_in_owner = true +amount = 1 +lifetime = 0.5 +speed_scale = 0.5 +process_material = SubResource("ParticleProcessMaterial_ow2p3") +draw_pass_1 = SubResource("SphereMesh_8evq1") + +[node name="Cubez" type="Node3D" parent="DestroyedMesh" unique_id=84909385] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=936603106] +transform = Transform3D(-0.020582985, -0.013163342, -0.9997015, 0.53877074, -0.8424524, -2.0764832e-08, -0.84220093, -0.5386099, 0.02443221, 0, 0, 0) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1902773756] +transform = Transform3D(0.55269843, 0.35346538, -0.7547096, 0.53877074, -0.8424524, -2.0764832e-08, -0.6358069, -0.40661544, -0.65605897, 0, 0, 0) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=693829807] +transform = Transform3D(0.55269843, 0.35346538, -0.7547096, 0.53877074, -0.8424524, -2.0764832e-08, -0.6358069, -0.40661544, -0.65605897, -0.5652933, 0, -0.5979067) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D4" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1318120052] +transform = Transform3D(0.011722982, 0.9259946, -0.37735477, 0.35865596, 0.34837604, 0.86602545, 0.9333962, -0.14549291, -0.32802945, 0.41309977, 0, -0.7827141) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D5" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1106985548] +transform = Transform3D(0.011722982, 0.9259946, -0.37735477, 0.35865596, 0.34837604, 0.86602545, 0.9333962, -0.14549291, -0.32802945, 0.91316706, 0, -0.43484128) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D6" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1830889998] +transform = Transform3D(0.011722982, 0.9259946, -0.37735477, 0.35865596, 0.34837604, 0.86602545, 0.9333962, -0.14549291, -0.32802945, -0.90229505, 0, 0.19567871) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D7" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=223786894] +transform = Transform3D(-0.4571105, 0.47059897, -0.7547096, 0.717312, 0.69675213, -2.0764832e-08, 0.5258455, -0.5413622, -0.65605897, -1.4241041, 0, -0.9131663) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D8" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=220079864] +transform = Transform3D(0.55269843, 0.35346538, -0.7547096, 0.53877074, -0.8424524, -2.0764832e-08, -0.6358069, -0.40661544, -0.65605897, 0.5758959, 0, 0.086833715) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D9" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=235651157] +transform = Transform3D(0.55269843, 0.35346538, -0.7547096, 0.53877074, -0.8424524, -2.0764832e-08, -0.6358069, -0.40661544, -0.65605897, 0.94551057, 0, 0.86954826) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D10" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1163044184] +transform = Transform3D(-0.4571105, 0.47059897, -0.7547096, 0.717312, 0.69675213, -2.0764832e-08, 0.5258455, -0.5413622, -0.65605897, -0.26117355, 0, 0.8586771) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D11" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=804770500] +transform = Transform3D(0.55074334, -0.56699485, -0.61253464, 0.71731204, 0.6967521, 0, 0.42678478, -0.43937847, 0.7904438, -1.022146, 0, 1.0760975) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D12" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1102483093] +transform = Transform3D(0.55074334, -0.56699485, -0.61253464, 0.71731204, 0.6967521, 0, 0.42678478, -0.43937847, 0.7904438, 0.977854, 0, -0.9239025) +mesh = SubResource("BoxMesh_5j34s") + +[node name="MeshInstance3D13" type="MeshInstance3D" parent="DestroyedMesh/Cubez" unique_id=1341429344] +transform = Transform3D(-0.020582985, -0.013163342, -0.9997015, 0.53877074, -0.8424524, -2.0764832e-08, -0.84220093, -0.5386099, 0.02443221, -0.4571221, 0, -1.3370018) +mesh = SubResource("BoxMesh_5j34s") diff --git a/enemy_spawner.gd b/enemy_spawner.gd new file mode 100644 index 0000000..2155f07 --- /dev/null +++ b/enemy_spawner.gd @@ -0,0 +1,25 @@ +extends Path3D + +var clock := 0. + +func _get_spawn_pos() -> Vector3: + return curve.samplef(randf_range(0, curve.point_count)) + +func _spawn_police_car(p: Vector3) -> void: + var car: Node3D = preload("police_car.tscn").instantiate() + car.position = p + Vector3.UP * 0.1 + add_sibling(car) + +func _process(delta: float) -> void: + clock -= delta + if clock <= 0: + clock = 5. + var ps: Array[Vector3] + while ps.size() < 5: + var p := _get_spawn_pos() + if ps.any(func(_p): return _p.distance_to(p) < 3.): + break + ps.push_back(p) + + for p in ps: + _spawn_police_car(p) diff --git a/enemy_spawner.gd.uid b/enemy_spawner.gd.uid new file mode 100644 index 0000000..2959020 --- /dev/null +++ b/enemy_spawner.gd.uid @@ -0,0 +1 @@ +uid://hqa4e1vo1gq diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..1a10d58 --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..14c5053 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvlbutpkwnj27" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/images/.gdignore b/images/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/images/3d_textures.jpg b/images/3d_textures.jpg new file mode 100644 index 0000000..d03c8b4 Binary files /dev/null and b/images/3d_textures.jpg differ diff --git a/images/cube_samples.jpg b/images/cube_samples.jpg new file mode 100644 index 0000000..45dd2be Binary files /dev/null and b/images/cube_samples.jpg differ diff --git a/images/node_settings.jpg b/images/node_settings.jpg new file mode 100644 index 0000000..a450e9a Binary files /dev/null and b/images/node_settings.jpg differ diff --git a/images/teapot_post_shatter.jpg b/images/teapot_post_shatter.jpg new file mode 100644 index 0000000..8288f09 Binary files /dev/null and b/images/teapot_post_shatter.jpg differ diff --git a/images/teapot_pre_shatter.jpg b/images/teapot_pre_shatter.jpg new file mode 100644 index 0000000..77aaaa4 Binary files /dev/null and b/images/teapot_pre_shatter.jpg differ diff --git a/lifetime.gd b/lifetime.gd new file mode 100644 index 0000000..73be042 --- /dev/null +++ b/lifetime.gd @@ -0,0 +1,8 @@ +extends Node + +@export var duration := 10. + +func _process(delta: float) -> void: + duration -= delta + if duration <= 0: + get_parent().queue_free() diff --git a/lifetime.gd.uid b/lifetime.gd.uid new file mode 100644 index 0000000..c34c015 --- /dev/null +++ b/lifetime.gd.uid @@ -0,0 +1 @@ +uid://cw8yt6b6jo17n diff --git a/lifetime.tscn b/lifetime.tscn new file mode 100644 index 0000000..fac2294 --- /dev/null +++ b/lifetime.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://yri7p15m8l1u"] + +[ext_resource type="Script" uid="uid://cw8yt6b6jo17n" path="res://lifetime.gd" id="1_4m2ci"] + +[node name="Lifetime" type="Node" unique_id=631221358] +script = ExtResource("1_4m2ci") diff --git a/player.gd b/player.gd new file mode 100644 index 0000000..4e324a4 --- /dev/null +++ b/player.gd @@ -0,0 +1,89 @@ +class_name Player +extends CharacterBody3D + +const MOVE_SPEED := 5. + +static var instance: Player + +@export var shake_noise: FastNoiseLite +var shake_duration := 0. +@onready var camera_transform: Transform3D = %Camera3D.transform + +var damage_clock := 0. +var aim_angle: float +var health := 3: + set(v): + health = v + if is_node_ready(): + %HealthLabel.text = "Health: %d" % v + +func _init() -> void: + instance = self + +func _ready() -> void: + health = health + +func _process_movement() -> void: + var input = Input.get_vector("move_left", "move_right", "move_up", "move_down") + input.normalized() + velocity = Vector3(input.x, 0., input.y) * MOVE_SPEED + move_and_slide() + +func _process_aim() -> void: + var viewport_mouse_pos := get_viewport().get_mouse_position() + var r_origin: Vector3 = %Camera3D.project_ray_origin(viewport_mouse_pos) + var r_dir: Vector3 = %Camera3D.project_ray_normal(viewport_mouse_pos) + + # y = mx + b + # 0 = mx + b + # -b / m = x + + var t := -r_origin.y / r_dir.y + var world_mouse_pos = r_origin + r_dir * t + var to_mouse_pos = world_mouse_pos - global_position + + var angle = Vector2(to_mouse_pos.x, -to_mouse_pos.z).angle() + %Cannon.rotation.y = angle + aim_angle = angle + + %Reticle.position = to_mouse_pos + +func _process_shoot() -> void: + if Input.is_action_just_pressed("fire"): + var dir := Vector3.RIGHT.rotated(Vector3.UP, aim_angle) + var player_projectile: PlayerProjectile = preload("player_projectile.tscn").instantiate() + player_projectile.init(dir) + player_projectile.global_position = global_position + Vector3.UP * 0.5 + add_sibling(player_projectile) + +func _process_cam_shake(delta: float) -> void: + shake_duration -= delta + %Camera3D.transform = camera_transform + if shake_duration <= 0: + return + + var x := shake_noise.get_noise_1d(shake_duration * 10000) + var y := shake_noise.get_noise_1d(-shake_duration * 10000) + var v := \ + camera_transform.basis.x * x + \ + camera_transform.basis.y * y + + print("v = ", v) + %Camera3D.position += v * .5 + +func _process(delta: float) -> void: + _process_movement() + _process_aim() + _process_shoot() + _process_cam_shake(delta) + + damage_clock -= delta + +func damage() -> void: + if damage_clock <= 0.: + health -= 1 + damage_clock = 3 + shake_duration = .25 + + if health == 0: + get_tree().reload_current_scene() diff --git a/player.gd.uid b/player.gd.uid new file mode 100644 index 0000000..9f91d1a --- /dev/null +++ b/player.gd.uid @@ -0,0 +1 @@ +uid://dhin7ux2njfja diff --git a/player.tscn b/player.tscn new file mode 100644 index 0000000..d7fca90 --- /dev/null +++ b/player.tscn @@ -0,0 +1,65 @@ +[gd_scene format=3 uid="uid://cv5p3w87nk0wn"] + +[ext_resource type="Script" uid="uid://dhin7ux2njfja" path="res://player.gd" id="1_4flbx"] +[ext_resource type="Script" uid="uid://cjdxibg3pnans" path="res://score_label.gd" id="2_onrkg"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_onrkg"] + +[sub_resource type="BoxMesh" id="BoxMesh_onrkg"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_i3pqv"] + +[sub_resource type="BoxMesh" id="BoxMesh_hqtel"] +size = Vector3(2, 0.1, 0.1) + +[sub_resource type="SphereMesh" id="SphereMesh_4flbx"] + +[node name="Player" type="CharacterBody3D" unique_id=1904432250] +collision_layer = 2 +collision_mask = 13 +script = ExtResource("1_4flbx") +shake_noise = SubResource("FastNoiseLite_onrkg") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=204505475] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +mesh = SubResource("BoxMesh_onrkg") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=918462062] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +shape = SubResource("BoxShape3D_i3pqv") + +[node name="Camera3D" type="Camera3D" parent="." unique_id=253280781] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 0.53349644, 0.84580237, 0, -0.84580237, 0.53349644, 0, 20.150661, 11.874705) + +[node name="Cannon" type="Node3D" parent="." unique_id=985210791] +unique_name_in_owner = true + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Cannon" unique_id=1149215568] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.75, 0) +mesh = SubResource("BoxMesh_hqtel") + +[node name="Reticle" type="MeshInstance3D" parent="." unique_id=242722222] +unique_name_in_owner = true +visible = false +mesh = SubResource("SphereMesh_4flbx") + +[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1676328708] + +[node name="ScoreLabel" type="Label" parent="CanvasLayer" unique_id=1108751125] +offset_right = 40.0 +offset_bottom = 23.0 +theme_override_font_sizes/font_size = 48 +text = "Score: %s" +script = ExtResource("2_onrkg") + +[node name="HealthLabel" type="Label" parent="CanvasLayer" unique_id=1653322479] +unique_name_in_owner = true +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 67.0 +grow_horizontal = 2 +size_flags_horizontal = 10 +theme_override_font_sizes/font_size = 48 +text = "Health: 2" +horizontal_alignment = 2 diff --git a/player_projectile.gd b/player_projectile.gd new file mode 100644 index 0000000..7655a9d --- /dev/null +++ b/player_projectile.gd @@ -0,0 +1,23 @@ +class_name PlayerProjectile +extends Area3D + +const SPEED := 20. +var _initialized := false +var velocity: Vector3 + +func _ready() -> void: + body_entered.connect(func(body: Node3D): + if body.has_method("hit"): + body.hit(self) + queue_free() + ) + +func init(dir: Vector3) -> void: + _initialized = true + velocity = dir * SPEED + +func _physics_process(delta: float) -> void: + position += velocity * delta + +func _process(_delta: float) -> void: + assert(_initialized) diff --git a/player_projectile.gd.uid b/player_projectile.gd.uid new file mode 100644 index 0000000..52ec7e9 --- /dev/null +++ b/player_projectile.gd.uid @@ -0,0 +1 @@ +uid://c1owlhp4be7wi diff --git a/player_projectile.tscn b/player_projectile.tscn new file mode 100644 index 0000000..a59c26f --- /dev/null +++ b/player_projectile.tscn @@ -0,0 +1,24 @@ +[gd_scene format=3 uid="uid://beruy087nlwfu"] + +[ext_resource type="Script" uid="uid://c1owlhp4be7wi" path="res://player_projectile.gd" id="1_0gc0p"] +[ext_resource type="PackedScene" uid="uid://yri7p15m8l1u" path="res://lifetime.tscn" id="2_73r22"] + +[sub_resource type="SphereMesh" id="SphereMesh_wqvto"] +radius = 0.25 +height = 0.5 + +[sub_resource type="SphereShape3D" id="SphereShape3D_0gc0p"] +radius = 0.25 + +[node name="PlayerProjectile" type="Area3D" unique_id=966789634] +collision_layer = 0 +collision_mask = 12 +script = ExtResource("1_0gc0p") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=2116862847] +mesh = SubResource("SphereMesh_wqvto") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=908451103] +shape = SubResource("SphereShape3D_0gc0p") + +[node name="Lifetime" parent="." unique_id=631221358 instance=ExtResource("2_73r22")] diff --git a/police_car.gd b/police_car.gd new file mode 100644 index 0000000..4ad2e2a --- /dev/null +++ b/police_car.gd @@ -0,0 +1,25 @@ +class_name PoliceCar +extends CharacterBody3D + +@export var dot_curve: Curve + +func _physics_process(delta: float) -> void: + %NavAgent.target_position = Player.instance.global_position + + var dir := global_position.direction_to(%NavAgent.get_next_path_position()) + dir.y = 0 + var dot_power := dot_curve.sample(dir.dot(velocity.normalized())) + velocity += dir * 8. * delta * dot_power + velocity = velocity.limit_length(8.) + move_and_slide() + + rotation.y = Vector2(velocity.x, -velocity.z).angle() + +func hit(_proj: PlayerProjectile): + queue_free() + + +func _on_hurtbox_body_entered(body: Node3D) -> void: + if body is Player: + body.damage() + diff --git a/police_car.gd.uid b/police_car.gd.uid new file mode 100644 index 0000000..62ee3c7 --- /dev/null +++ b/police_car.gd.uid @@ -0,0 +1 @@ +uid://c6xr2j0g1ep7j diff --git a/police_car.tscn b/police_car.tscn new file mode 100644 index 0000000..8d4760b --- /dev/null +++ b/police_car.tscn @@ -0,0 +1,77 @@ +[gd_scene format=3 uid="uid://dusfu1hidkmsk"] + +[ext_resource type="Script" uid="uid://c6xr2j0g1ep7j" path="res://police_car.gd" id="1_spw8y"] + +[sub_resource type="Curve" id="Curve_spw8y"] +_limits = [1.0, 20.0, -1.0, 1.0] +_data = [Vector2(-1, 20), 0.0, 0.0, 0, 0, Vector2(0.20895529, 4.7216473), -18.980904, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="BoxMesh" id="BoxMesh_2kvnc"] +size = Vector3(1, 0.25, 0.5) + +[sub_resource type="BoxShape3D" id="BoxShape3D_spw8y"] +size = Vector3(1, 0.25, 0.5) + +[sub_resource type="BoxMesh" id="BoxMesh_spw8y"] +size = Vector3(0.1, 0.05, 0.2) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8364l"] +albedo_color = Color(1, 0.32, 0.32, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6u34r"] +albedo_color = Color(0.26, 0.45733315, 1, 1) + +[sub_resource type="CylinderMesh" id="CylinderMesh_e8ulu"] +top_radius = 0.1 +bottom_radius = 0.1 +height = 0.5 + +[sub_resource type="BoxShape3D" id="BoxShape3D_8364l"] +size = Vector3(1.7734375, 0.5839844, 1.1367188) + +[node name="PoliceCar" type="CharacterBody3D" unique_id=206023291] +collision_layer = 8 +collision_mask = 15 +script = ExtResource("1_spw8y") +dot_curve = SubResource("Curve_spw8y") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=423323850] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -0.122092836, 0.34972915, -0.0012522953) +mesh = SubResource("BoxMesh_2kvnc") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=637101729] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -0.122092836, 0.34972915, -0.0012522953) +shape = SubResource("BoxShape3D_spw8y") + +[node name="MeshInstance3D4" type="MeshInstance3D" parent="." unique_id=1230197866] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0.59585166, 0.65602696, 0.24429089) +mesh = SubResource("BoxMesh_spw8y") +surface_material_override/0 = SubResource("StandardMaterial3D_8364l") + +[node name="MeshInstance3D5" type="MeshInstance3D" parent="." unique_id=100028974] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0.60364604, 0.65602696, -0.23176795) +mesh = SubResource("BoxMesh_spw8y") +surface_material_override/0 = SubResource("StandardMaterial3D_6u34r") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=425081066] +transform = Transform3D(2, 0, 0, 0, -8.742278e-08, -2, 0, 2, -8.742278e-08, -0.8505253, -0.079150766, -0.0012522853) +mesh = SubResource("CylinderMesh_e8ulu") + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="." unique_id=1992142361] +transform = Transform3D(2, 0, 0, 0, -8.742278e-08, -2, 0, 2, -8.742278e-08, 0.62777025, -0.079150766, -0.0012522853) +mesh = SubResource("CylinderMesh_e8ulu") + +[node name="NavAgent" type="NavigationAgent3D" parent="." unique_id=774393024] +unique_name_in_owner = true + +[node name="Hurtbox" type="Area3D" parent="." unique_id=688205599] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Hurtbox" unique_id=192758567] +transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, -0.122092836, 0.34972915, -0.0012522953) +shape = SubResource("BoxShape3D_8364l") +debug_color = Color(0.9913104, 0, 0.27320355, 0.41960785) + +[connection signal="body_entered" from="Hurtbox" to="." method="_on_hurtbox_body_entered"] diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..faaf5c0 --- /dev/null +++ b/project.godot @@ -0,0 +1,63 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Road Rage Tank" +run/main_scene="uid://civwljgkv3m53" +config/features=PackedStringArray("4.6") +config/icon="res://icon.svg" + +[autoload] + +SignalBus="*uid://cj4jk5xvv2n3l" + +[editor_plugins] + +enabled=PackedStringArray("res://addons/voronoishatter/plugin.cfg") + +[global_group] + +navigation_mesh_source_group="" + +[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_up={ +"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_down={ +"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) +] +} +fire={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(124, 9),"global_position":Vector2(133, 57),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_1="World" +3d_physics/layer_2="Player" +3d_physics/layer_3="Building" +3d_physics/layer_4="Police" diff --git a/score_label.gd b/score_label.gd new file mode 100644 index 0000000..054d558 --- /dev/null +++ b/score_label.gd @@ -0,0 +1,12 @@ +extends Label + +var score := 0: + set(v): + score = v + text = "Score: %d" % v + +func _ready() -> void: + score = score + SignalBus.building_destroyed.connect(func(_building): + score += 10 + ) diff --git a/score_label.gd.uid b/score_label.gd.uid new file mode 100644 index 0000000..3c2e705 --- /dev/null +++ b/score_label.gd.uid @@ -0,0 +1 @@ +uid://cjdxibg3pnans diff --git a/signal_bus.gd b/signal_bus.gd new file mode 100644 index 0000000..1330227 --- /dev/null +++ b/signal_bus.gd @@ -0,0 +1,3 @@ +extends Node + +signal building_destroyed(building: Building) diff --git a/signal_bus.gd.uid b/signal_bus.gd.uid new file mode 100644 index 0000000..d86e2ef --- /dev/null +++ b/signal_bus.gd.uid @@ -0,0 +1 @@ +uid://cj4jk5xvv2n3l diff --git a/world.tscn b/world.tscn new file mode 100644 index 0000000..e29819f --- /dev/null +++ b/world.tscn @@ -0,0 +1,340 @@ +[gd_scene format=3 uid="uid://civwljgkv3m53"] + +[ext_resource type="PackedScene" uid="uid://cv5p3w87nk0wn" path="res://player.tscn" id="1_f3sb7"] +[ext_resource type="PackedScene" uid="uid://cm86dxphvhbb" path="res://building.tscn" id="2_fj7yv"] +[ext_resource type="Script" uid="uid://hqa4e1vo1gq" path="res://enemy_spawner.gd" id="4_aqk2v"] + +[sub_resource type="NavigationMesh" id="NavigationMesh_aqk2v"] +vertices = PackedVector3Array(-24, 0.4634713, -13, -19.25, 0.4634713, -13, -17.75, 0.4634713, -13.75, -24, 0.4634713, -36.5, -5, 0.4634713, -13.75, -4.75, 0.4634713, -36.5, -2.75, 0.4634713, -13.5, -2, 0.4634713, -12.75, 1.5, 0.4634713, -12.75, 2.25, 0.4634713, -13.5, 4.5, 0.4634713, -13.75, 4.25, 0.4634713, -36.5, 19, 0.4634713, -12.75, 19, 0.4634713, -10.75, 24, 0.4634713, -10.75, 18.25, 0.4634713, -13.5, 24, 0.4634713, -36.5, -19.75, 0.4634713, -6.5, -19.25, 0.4634713, -6.75, -19.25, 0.4634713, -8.5, -19.75, 0.4634713, -8.75, -19.75, 0.4634713, -9.5, -19.25, 0.4634713, -9.75, -19.25, 0.4634713, -11.5, -19.75, 0.4634713, -11.75, -24, 0.4634713, -4.25, -19.75, 0.4634713, -12.5, -19.25, 0.4634713, -4.5, 1.25, 0.4634713, -6.5, 1.75, 0.4634713, -6.75, 1.75, 0.4634713, -8.5, 1.25, 0.4634713, -8.75, 1.25, 0.4634713, -9.5, 1.75, 0.4634713, -9.75, 1.75, 0.4634713, -11.5, 1.25, 0.4634713, -11.75, -2, 0.4634713, -4.75, 1.75, 0.4634713, -5, 1.25, 0.4634713, -5.75, -17.25, 5.4634714, -11.5, -17.25, 5.4634714, -4.25, -4, 5.4634714, -4.25, -4, 5.4634714, -11.5, 3.75, 5.4634714, -11.5, 3.75, 5.4634714, -4.25, 17, 5.4634714, -4.25, 17, 5.4634714, -11.5, -17, 0.9634713, -11.25, -17, 0.9634713, -10.5, -16.25, 0.9634713, -10.5, -16.25, 1.2134713, -11.25, -14, 0.9634713, -11.25, -14, 0.9634713, -10.5, -13.25, 0.9634713, -10.5, -13.25, 1.2134713, -11.25, -11, 0.9634713, -11.25, -11, 0.9634713, -10.5, -10.25, 0.9634713, -10.5, -10.25, 1.2134713, -11.25, -8, 0.9634713, -11.25, -8, 0.9634713, -10.5, -7.25, 0.9634713, -10.5, -7.25, 1.2134713, -11.25, -5, 0.9634713, -11.25, -5, 0.9634713, -10.5, -4.25, 0.9634713, -10.5, -4.25, 1.2134713, -11.25, 4, 0.9634713, -11.25, 4, 0.9634713, -10.5, 4.75, 0.9634713, -10.5, 4.75, 1.2134713, -11.25, 7, 0.9634713, -11.25, 7, 0.9634713, -10.5, 7.75, 0.9634713, -10.5, 7.75, 1.2134713, -11.25, 10, 0.9634713, -11.25, 10, 0.9634713, -10.5, 10.75, 0.9634713, -10.5, 10.75, 1.2134713, -11.25, 13, 0.9634713, -11.25, 13, 0.9634713, -10.5, 13.75, 0.9634713, -10.5, 13.75, 1.2134713, -11.25, 16, 0.9634713, -11.25, 16, 0.9634713, -10.5, 16.75, 0.9634713, -10.5, 16.75, 1.2134713, -11.25, 19, 0.4634713, -5, 24, 0.4634713, -5, -17, 0.9634713, -8.25, -17, 0.9634713, -7.5, -16.25, 0.9634713, -7.5, -16.25, 1.2134713, -8.25, -14, 0.9634713, -8.25, -14, 0.9634713, -7.5, -13.25, 0.9634713, -7.5, -13.25, 1.2134713, -8.25, -11, 0.9634713, -8.25, -11, 0.9634713, -7.5, -10.25, 0.9634713, -7.5, -10.25, 1.2134713, -8.25, -8, 0.9634713, -8.25, -8, 0.9634713, -7.5, -7.25, 0.9634713, -7.5, -7.25, 1.2134713, -8.25, -5, 0.9634713, -8.25, -5, 0.9634713, -7.5, -4.25, 0.9634713, -7.5, -4.25, 1.2134713, -8.25, 4, 0.9634713, -8.25, 4, 0.9634713, -7.5, 4.75, 0.9634713, -7.5, 4.75, 1.2134713, -8.25, 7, 0.9634713, -8.25, 7, 0.9634713, -7.5, 7.75, 0.9634713, -7.5, 7.75, 1.2134713, -8.25, 10, 0.9634713, -8.25, 10, 0.9634713, -7.5, 10.75, 0.9634713, -7.5, 10.75, 1.2134713, -8.25, 13, 0.9634713, -8.25, 13, 0.9634713, -7.5, 13.75, 0.9634713, -7.5, 13.75, 1.2134713, -8.25, 16, 0.9634713, -8.25, 16, 0.9634713, -7.5, 16.75, 0.9634713, -7.5, 16.75, 1.2134713, -8.25, -17, 0.9634713, -5.25, -17, 0.9634713, -4.5, -16.25, 0.9634713, -4.5, -16.25, 1.2134713, -5.25, -14, 0.9634713, -5.25, -14, 0.9634713, -4.5, -13.25, 0.9634713, -4.5, -13.25, 1.2134713, -5.25, -11, 0.9634713, -5.25, -11, 0.9634713, -4.5, -10.25, 0.9634713, -4.5, -10.25, 1.2134713, -5.25, -8, 0.9634713, -5.25, -8, 0.9634713, -4.5, -7.25, 0.9634713, -4.5, -7.25, 1.2134713, -5.25, -5, 0.9634713, -5.25, -5, 0.9634713, -4.5, -4.25, 0.9634713, -4.5, -4.25, 1.2134713, -5.25, 4, 0.9634713, -5.25, 4, 0.9634713, -4.5, 4.75, 0.9634713, -4.5, 4.75, 1.2134713, -5.25, 7, 0.9634713, -5.25, 7, 0.9634713, -4.5, 7.75, 0.9634713, -4.5, 7.75, 1.2134713, -5.25, 10, 0.9634713, -5.25, 10, 0.9634713, -4.5, 10.75, 0.9634713, -4.5, 10.75, 1.2134713, -5.25, 13, 0.9634713, -5.25, 13, 0.9634713, -4.5, 13.75, 0.9634713, -4.5, 13.75, 1.2134713, -5.25, 16, 0.9634713, -5.25, 16, 0.9634713, -4.5, 16.75, 0.9634713, -4.5, 16.75, 1.2134713, -5.25, 18.25, 0.4634713, -2.25, 16.5, 0.4634713, -2.25, 16.5, 0.4634713, 1.25, 18.25, 0.4634713, 1.5, 19, 0.4634713, 2.25, 19, 0.4634713, 4.25, 24, 0.4634713, 4.25, 19, 0.4634713, -3, 2.25, 0.4634713, 1.5, 3, 0.4634713, 1.5, 3, 0.4634713, -2, -2.75, 0.4634713, -2.25, -4.5, 0.4634713, -2.25, -4.5, 0.4634713, 1.25, -2.75, 0.4634713, 1.5, 1.5, 0.4634713, 2.25, 1.75, 0.4634713, -3, -2, 0.4634713, -3, -2, 0.4634713, 2.25, -19.25, 0.4634713, 2, -18, 0.4634713, 1.5, -18, 0.4634713, -2, -19.25, 0.4634713, -3, -24, 0.4634713, 2, -19.75, 0.4634713, 8.5, -19.25, 0.4634713, 8.25, -19.25, 0.4634713, 6.5, -19.75, 0.4634713, 6.25, -19.75, 0.4634713, 5.5, -19.25, 0.4634713, 5.25, -19.25, 0.4634713, 3.5, -19.75, 0.4634713, 3.25, -24, 0.4634713, 10.75, -19.75, 0.4634713, 2.5, -19.25, 0.4634713, 10.5, 1.25, 0.4634713, 8.5, 1.75, 0.4634713, 8.25, 1.75, 0.4634713, 6.5, 1.25, 0.4634713, 6.25, 1.25, 0.4634713, 5.5, 1.75, 0.4634713, 5.25, 1.75, 0.4634713, 3.5, 1.25, 0.4634713, 3.25, -2, 0.4634713, 10.25, 1.75, 0.4634713, 10, 1.25, 0.4634713, 9.25, -17.25, 5.4634714, 3.5, -17.25, 5.4634714, 10.75, -4, 5.4634714, 10.75, -4, 5.4634714, 3.5, 3.75, 5.4634714, 3.5, 3.75, 5.4634714, 10.75, 17, 5.4634714, 10.75, 17, 5.4634714, 3.5, -17, 0.9634713, 3.75, -17, 0.9634713, 4.5, -16.25, 0.9634713, 4.5, -16.25, 1.2134713, 3.75, -14, 0.9634713, 3.75, -14, 0.9634713, 4.5, -13.25, 0.9634713, 4.5, -13.25, 1.2134713, 3.75, -11, 0.9634713, 3.75, -11, 0.9634713, 4.5, -10.25, 0.9634713, 4.5, -10.25, 1.2134713, 3.75, -8, 0.9634713, 3.75, -8, 0.9634713, 4.5, -7.25, 0.9634713, 4.5, -7.25, 1.2134713, 3.75, -5, 0.9634713, 3.75, -5, 0.9634713, 4.5, -4.25, 0.9634713, 4.5, -4.25, 1.2134713, 3.75, 4, 0.9634713, 3.75, 4, 0.9634713, 4.5, 4.75, 0.9634713, 4.5, 4.75, 1.2134713, 3.75, 7, 0.9634713, 3.75, 7, 0.9634713, 4.5, 7.75, 0.9634713, 4.5, 7.75, 1.2134713, 3.75, 10, 0.9634713, 3.75, 10, 0.9634713, 4.5, 10.75, 0.9634713, 4.5, 10.75, 1.2134713, 3.75, 13, 0.9634713, 3.75, 13, 0.9634713, 4.5, 13.75, 0.9634713, 4.5, 13.75, 1.2134713, 3.75, 16, 0.9634713, 3.75, 16, 0.9634713, 4.5, 16.75, 0.9634713, 4.5, 16.75, 1.2134713, 3.75, 19, 0.4634713, 10, 24, 0.4634713, 10, -17, 0.9634713, 6.75, -17, 0.9634713, 7.5, -16.25, 0.9634713, 7.5, -16.25, 1.2134713, 6.75, -14, 0.9634713, 6.75, -14, 0.9634713, 7.5, -13.25, 0.9634713, 7.5, -13.25, 1.2134713, 6.75, -11, 0.9634713, 6.75, -11, 0.9634713, 7.5, -10.25, 0.9634713, 7.5, -10.25, 1.2134713, 6.75, -8, 0.9634713, 6.75, -8, 0.9634713, 7.5, -7.25, 0.9634713, 7.5, -7.25, 1.2134713, 6.75, -5, 0.9634713, 6.75, -5, 0.9634713, 7.5, -4.25, 0.9634713, 7.5, -4.25, 1.2134713, 6.75, 4, 0.9634713, 6.75, 4, 0.9634713, 7.5, 4.75, 0.9634713, 7.5, 4.75, 1.2134713, 6.75, 7, 0.9634713, 6.75, 7, 0.9634713, 7.5, 7.75, 0.9634713, 7.5, 7.75, 1.2134713, 6.75, 10, 0.9634713, 6.75, 10, 0.9634713, 7.5, 10.75, 0.9634713, 7.5, 10.75, 1.2134713, 6.75, 13, 0.9634713, 6.75, 13, 0.9634713, 7.5, 13.75, 0.9634713, 7.5, 13.75, 1.2134713, 6.75, 16, 0.9634713, 6.75, 16, 0.9634713, 7.5, 16.75, 0.9634713, 7.5, 16.75, 1.2134713, 6.75, -17, 0.9634713, 9.75, -17, 0.9634713, 10.5, -16.25, 0.9634713, 10.5, -16.25, 1.2134713, 9.75, -14, 0.9634713, 9.75, -14, 0.9634713, 10.5, -13.25, 0.9634713, 10.5, -13.25, 1.2134713, 9.75, -11, 0.9634713, 9.75, -11, 0.9634713, 10.5, -10.25, 0.9634713, 10.5, -10.25, 1.2134713, 9.75, -8, 0.9634713, 9.75, -8, 0.9634713, 10.5, -7.25, 0.9634713, 10.5, -7.25, 1.2134713, 9.75, -5, 0.9634713, 9.75, -5, 0.9634713, 10.5, -4.25, 0.9634713, 10.5, -4.25, 1.2134713, 9.75, 4, 0.9634713, 9.75, 4, 0.9634713, 10.5, 4.75, 0.9634713, 10.5, 4.75, 1.2134713, 9.75, 7, 0.9634713, 9.75, 7, 0.9634713, 10.5, 7.75, 0.9634713, 10.5, 7.75, 1.2134713, 9.75, 10, 0.9634713, 9.75, 10, 0.9634713, 10.5, 10.75, 0.9634713, 10.5, 10.75, 1.2134713, 9.75, 13, 0.9634713, 9.75, 13, 0.9634713, 10.5, 13.75, 0.9634713, 10.5, 13.75, 1.2134713, 9.75, 16, 0.9634713, 9.75, 16, 0.9634713, 10.5, 16.75, 0.9634713, 10.5, 16.75, 1.2134713, 9.75, 18.25, 0.4634713, 12.75, 16.5, 0.4634713, 12.75, 16.5, 0.4634713, 16.25, 18.25, 0.4634713, 16.5, 19, 0.4634713, 17.25, 19, 0.4634713, 19.25, 24, 0.4634713, 19.25, 19, 0.4634713, 12, 2.25, 0.4634713, 16.5, 3, 0.4634713, 16.5, 3, 0.4634713, 13, -2.75, 0.4634713, 12.75, -4.5, 0.4634713, 12.75, -4.5, 0.4634713, 16.25, -2.75, 0.4634713, 16.5, 1.5, 0.4634713, 17.25, 1.75, 0.4634713, 12, -2, 0.4634713, 12, -2, 0.4634713, 17.25, -19.25, 0.4634713, 17, -18, 0.4634713, 16.5, -18, 0.4634713, 13, -19.25, 0.4634713, 12, -24, 0.4634713, 17, -19.75, 0.4634713, 23.5, -19.25, 0.4634713, 23.25, -19.25, 0.4634713, 21.5, -19.75, 0.4634713, 21.25, -19.75, 0.4634713, 20.5, -19.25, 0.4634713, 20.25, -19.25, 0.4634713, 18.5, -19.75, 0.4634713, 18.25, -24, 0.4634713, 25.75, -19.75, 0.4634713, 17.5, -19.25, 0.4634713, 25.5, 1.25, 0.4634713, 23.5, 1.75, 0.4634713, 23.25, 1.75, 0.4634713, 21.5, 1.25, 0.4634713, 21.25, 1.25, 0.4634713, 20.5, 1.75, 0.4634713, 20.25, 1.75, 0.4634713, 18.5, 1.25, 0.4634713, 18.25, -2, 0.4634713, 25.25, 1.75, 0.4634713, 25, 1.25, 0.4634713, 24.25, -17.25, 5.4634714, 18.5, -17.25, 5.4634714, 25.75, -4, 5.4634714, 25.75, -4, 5.4634714, 18.5, 3.75, 5.4634714, 18.5, 3.75, 5.4634714, 25.75, 17, 5.4634714, 25.75, 17, 5.4634714, 18.5, -17, 0.9634713, 18.75, -17, 0.9634713, 19.5, -16.25, 0.9634713, 19.5, -16.25, 1.2134713, 18.75, -14, 0.9634713, 18.75, -14, 0.9634713, 19.5, -13.25, 0.9634713, 19.5, -13.25, 1.2134713, 18.75, -11, 0.9634713, 18.75, -11, 0.9634713, 19.5, -10.25, 0.9634713, 19.5, -10.25, 1.2134713, 18.75, -8, 0.9634713, 18.75, -8, 0.9634713, 19.5, -7.25, 0.9634713, 19.5, -7.25, 1.2134713, 18.75, -5, 0.9634713, 18.75, -5, 0.9634713, 19.5, -4.25, 0.9634713, 19.5, -4.25, 1.2134713, 18.75, 4, 0.9634713, 18.75, 4, 0.9634713, 19.5, 4.75, 0.9634713, 19.5, 4.75, 1.2134713, 18.75, 7, 0.9634713, 18.75, 7, 0.9634713, 19.5, 7.75, 0.9634713, 19.5, 7.75, 1.2134713, 18.75, 10, 0.9634713, 18.75, 10, 0.9634713, 19.5, 10.75, 0.9634713, 19.5, 10.75, 1.2134713, 18.75, 13, 0.9634713, 18.75, 13, 0.9634713, 19.5, 13.75, 0.9634713, 19.5, 13.75, 1.2134713, 18.75, 16, 0.9634713, 18.75, 16, 0.9634713, 19.5, 16.75, 0.9634713, 19.5, 16.75, 1.2134713, 18.75, 19, 0.4634713, 25, 24, 0.4634713, 25, -17, 0.9634713, 21.75, -17, 0.9634713, 22.5, -16.25, 0.9634713, 22.5, -16.25, 1.2134713, 21.75, -14, 0.9634713, 21.75, -14, 0.9634713, 22.5, -13.25, 0.9634713, 22.5, -13.25, 1.2134713, 21.75, -11, 0.9634713, 21.75, -11, 0.9634713, 22.5, -10.25, 0.9634713, 22.5, -10.25, 1.2134713, 21.75, -8, 0.9634713, 21.75, -8, 0.9634713, 22.5, -7.25, 0.9634713, 22.5, -7.25, 1.2134713, 21.75, -5, 0.9634713, 21.75, -5, 0.9634713, 22.5, -4.25, 0.9634713, 22.5, -4.25, 1.2134713, 21.75, 4, 0.9634713, 21.75, 4, 0.9634713, 22.5, 4.75, 0.9634713, 22.5, 4.75, 1.2134713, 21.75, 7, 0.9634713, 21.75, 7, 0.9634713, 22.5, 7.75, 0.9634713, 22.5, 7.75, 1.2134713, 21.75, 10, 0.9634713, 21.75, 10, 0.9634713, 22.5, 10.75, 0.9634713, 22.5, 10.75, 1.2134713, 21.75, 13, 0.9634713, 21.75, 13, 0.9634713, 22.5, 13.75, 0.9634713, 22.5, 13.75, 1.2134713, 21.75, 16, 0.9634713, 21.75, 16, 0.9634713, 22.5, 16.75, 0.9634713, 22.5, 16.75, 1.2134713, 21.75, -17, 0.9634713, 24.75, -17, 0.9634713, 25.5, -16.25, 0.9634713, 25.5, -16.25, 1.2134713, 24.75, -14, 0.9634713, 24.75, -14, 0.9634713, 25.5, -13.25, 0.9634713, 25.5, -13.25, 1.2134713, 24.75, -11, 0.9634713, 24.75, -11, 0.9634713, 25.5, -10.25, 0.9634713, 25.5, -10.25, 1.2134713, 24.75, -8, 0.9634713, 24.75, -8, 0.9634713, 25.5, -7.25, 0.9634713, 25.5, -7.25, 1.2134713, 24.75, -5, 0.9634713, 24.75, -5, 0.9634713, 25.5, -4.25, 0.9634713, 25.5, -4.25, 1.2134713, 24.75, 4, 0.9634713, 24.75, 4, 0.9634713, 25.5, 4.75, 0.9634713, 25.5, 4.75, 1.2134713, 24.75, 7, 0.9634713, 24.75, 7, 0.9634713, 25.5, 7.75, 0.9634713, 25.5, 7.75, 1.2134713, 24.75, 10, 0.9634713, 24.75, 10, 0.9634713, 25.5, 10.75, 0.9634713, 25.5, 10.75, 1.2134713, 24.75, 13, 0.9634713, 24.75, 13, 0.9634713, 25.5, 13.75, 0.9634713, 25.5, 13.75, 1.2134713, 24.75, 16, 0.9634713, 24.75, 16, 0.9634713, 25.5, 16.75, 0.9634713, 25.5, 16.75, 1.2134713, 24.75, 19, 0.4634713, 27, 18.25, 0.4634713, 27.75, 15.25, 0.4634713, 36.5, 24, 0.4634713, 36.5, 15.25, 0.4634713, 28, 1.75, 0.4634713, 27, -2, 0.4634713, 27, 3, 0.4634713, 28, -2.75, 0.4634713, 27.75, -4.25, 0.4634713, 27.75, -4, 0.4634713, 36.5, 3, 0.4634713, 36.5, -19.25, 0.4634713, 27, -18, 0.4634713, 28, -24, 0.4634713, 36.5, -18, 0.4634713, 36.5) +polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(4, 2, 5), PackedInt32Array(5, 2, 3), PackedInt32Array(7, 6, 8), PackedInt32Array(8, 6, 9), PackedInt32Array(6, 4, 9), PackedInt32Array(9, 4, 10), PackedInt32Array(10, 4, 5), PackedInt32Array(10, 5, 11), PackedInt32Array(14, 13, 12), PackedInt32Array(12, 15, 14), PackedInt32Array(14, 15, 16), PackedInt32Array(10, 11, 15), PackedInt32Array(15, 11, 16), PackedInt32Array(18, 17, 19), PackedInt32Array(19, 17, 20), PackedInt32Array(22, 21, 23), PackedInt32Array(23, 21, 24), PackedInt32Array(24, 21, 0), PackedInt32Array(0, 21, 20), PackedInt32Array(17, 25, 20), PackedInt32Array(20, 25, 0), PackedInt32Array(0, 1, 26), PackedInt32Array(0, 26, 24), PackedInt32Array(17, 27, 25), PackedInt32Array(29, 28, 30), PackedInt32Array(30, 28, 31), PackedInt32Array(33, 32, 34), PackedInt32Array(34, 32, 35), PackedInt32Array(35, 32, 7), PackedInt32Array(28, 36, 31), PackedInt32Array(31, 36, 7), PackedInt32Array(7, 32, 31), PackedInt32Array(38, 37, 36), PackedInt32Array(7, 8, 35), PackedInt32Array(28, 38, 36), PackedInt32Array(42, 41, 39), PackedInt32Array(39, 41, 40), PackedInt32Array(46, 45, 43), PackedInt32Array(43, 45, 44), PackedInt32Array(50, 49, 47), PackedInt32Array(47, 49, 48), PackedInt32Array(54, 53, 51), PackedInt32Array(51, 53, 52), PackedInt32Array(58, 57, 55), PackedInt32Array(55, 57, 56), PackedInt32Array(62, 61, 59), PackedInt32Array(59, 61, 60), PackedInt32Array(66, 65, 63), PackedInt32Array(63, 65, 64), PackedInt32Array(70, 69, 67), PackedInt32Array(67, 69, 68), PackedInt32Array(74, 73, 71), PackedInt32Array(71, 73, 72), PackedInt32Array(78, 77, 75), PackedInt32Array(75, 77, 76), PackedInt32Array(82, 81, 79), PackedInt32Array(79, 81, 80), PackedInt32Array(86, 85, 83), PackedInt32Array(83, 85, 84), PackedInt32Array(13, 14, 87), PackedInt32Array(87, 14, 88), PackedInt32Array(92, 91, 89), PackedInt32Array(89, 91, 90), PackedInt32Array(96, 95, 93), PackedInt32Array(93, 95, 94), PackedInt32Array(100, 99, 97), PackedInt32Array(97, 99, 98), PackedInt32Array(104, 103, 101), PackedInt32Array(101, 103, 102), PackedInt32Array(108, 107, 105), PackedInt32Array(105, 107, 106), PackedInt32Array(112, 111, 109), PackedInt32Array(109, 111, 110), PackedInt32Array(116, 115, 113), PackedInt32Array(113, 115, 114), PackedInt32Array(120, 119, 117), PackedInt32Array(117, 119, 118), PackedInt32Array(124, 123, 121), PackedInt32Array(121, 123, 122), PackedInt32Array(128, 127, 125), PackedInt32Array(125, 127, 126), PackedInt32Array(132, 131, 129), PackedInt32Array(129, 131, 130), PackedInt32Array(136, 135, 133), PackedInt32Array(133, 135, 134), PackedInt32Array(140, 139, 137), PackedInt32Array(137, 139, 138), PackedInt32Array(144, 143, 141), PackedInt32Array(141, 143, 142), PackedInt32Array(148, 147, 145), PackedInt32Array(145, 147, 146), PackedInt32Array(152, 151, 149), PackedInt32Array(149, 151, 150), PackedInt32Array(156, 155, 153), PackedInt32Array(153, 155, 154), PackedInt32Array(160, 159, 157), PackedInt32Array(157, 159, 158), PackedInt32Array(164, 163, 161), PackedInt32Array(161, 163, 162), PackedInt32Array(168, 167, 165), PackedInt32Array(165, 167, 166), PackedInt32Array(170, 169, 171), PackedInt32Array(171, 169, 172), PackedInt32Array(175, 174, 173), PackedInt32Array(169, 176, 172), PackedInt32Array(172, 176, 173), PackedInt32Array(173, 176, 88), PackedInt32Array(173, 88, 175), PackedInt32Array(176, 87, 88), PackedInt32Array(179, 178, 177), PackedInt32Array(181, 180, 182), PackedInt32Array(182, 180, 183), PackedInt32Array(179, 177, 184), PackedInt32Array(186, 36, 185), PackedInt32Array(185, 36, 37), PackedInt32Array(186, 185, 180), PackedInt32Array(180, 185, 179), PackedInt32Array(180, 179, 183), PackedInt32Array(183, 179, 184), PackedInt32Array(184, 187, 183), PackedInt32Array(189, 188, 190), PackedInt32Array(190, 188, 191), PackedInt32Array(191, 188, 192), PackedInt32Array(191, 192, 25), PackedInt32Array(25, 27, 191), PackedInt32Array(181, 182, 190), PackedInt32Array(190, 182, 189), PackedInt32Array(170, 171, 179), PackedInt32Array(179, 171, 178), PackedInt32Array(194, 193, 195), PackedInt32Array(195, 193, 196), PackedInt32Array(198, 197, 199), PackedInt32Array(199, 197, 200), PackedInt32Array(200, 197, 192), PackedInt32Array(192, 197, 196), PackedInt32Array(193, 201, 196), PackedInt32Array(196, 201, 192), PackedInt32Array(192, 188, 202), PackedInt32Array(192, 202, 200), PackedInt32Array(193, 203, 201), PackedInt32Array(205, 204, 206), PackedInt32Array(206, 204, 207), PackedInt32Array(209, 208, 210), PackedInt32Array(210, 208, 211), PackedInt32Array(211, 208, 187), PackedInt32Array(204, 212, 207), PackedInt32Array(207, 212, 187), PackedInt32Array(187, 208, 207), PackedInt32Array(214, 213, 212), PackedInt32Array(187, 184, 211), PackedInt32Array(204, 214, 212), PackedInt32Array(218, 217, 215), PackedInt32Array(215, 217, 216), PackedInt32Array(222, 221, 219), PackedInt32Array(219, 221, 220), PackedInt32Array(226, 225, 223), PackedInt32Array(223, 225, 224), PackedInt32Array(230, 229, 227), PackedInt32Array(227, 229, 228), PackedInt32Array(234, 233, 231), PackedInt32Array(231, 233, 232), PackedInt32Array(238, 237, 235), PackedInt32Array(235, 237, 236), PackedInt32Array(242, 241, 239), PackedInt32Array(239, 241, 240), PackedInt32Array(246, 245, 243), PackedInt32Array(243, 245, 244), PackedInt32Array(250, 249, 247), PackedInt32Array(247, 249, 248), PackedInt32Array(254, 253, 251), PackedInt32Array(251, 253, 252), PackedInt32Array(258, 257, 255), PackedInt32Array(255, 257, 256), PackedInt32Array(262, 261, 259), PackedInt32Array(259, 261, 260), PackedInt32Array(174, 175, 263), PackedInt32Array(263, 175, 264), PackedInt32Array(268, 267, 265), PackedInt32Array(265, 267, 266), PackedInt32Array(272, 271, 269), PackedInt32Array(269, 271, 270), PackedInt32Array(276, 275, 273), PackedInt32Array(273, 275, 274), PackedInt32Array(280, 279, 277), PackedInt32Array(277, 279, 278), PackedInt32Array(284, 283, 281), PackedInt32Array(281, 283, 282), PackedInt32Array(288, 287, 285), PackedInt32Array(285, 287, 286), PackedInt32Array(292, 291, 289), PackedInt32Array(289, 291, 290), PackedInt32Array(296, 295, 293), PackedInt32Array(293, 295, 294), PackedInt32Array(300, 299, 297), PackedInt32Array(297, 299, 298), PackedInt32Array(304, 303, 301), PackedInt32Array(301, 303, 302), PackedInt32Array(308, 307, 305), PackedInt32Array(305, 307, 306), PackedInt32Array(312, 311, 309), PackedInt32Array(309, 311, 310), PackedInt32Array(316, 315, 313), PackedInt32Array(313, 315, 314), PackedInt32Array(320, 319, 317), PackedInt32Array(317, 319, 318), PackedInt32Array(324, 323, 321), PackedInt32Array(321, 323, 322), PackedInt32Array(328, 327, 325), PackedInt32Array(325, 327, 326), PackedInt32Array(332, 331, 329), PackedInt32Array(329, 331, 330), PackedInt32Array(336, 335, 333), PackedInt32Array(333, 335, 334), PackedInt32Array(340, 339, 337), PackedInt32Array(337, 339, 338), PackedInt32Array(344, 343, 341), PackedInt32Array(341, 343, 342), PackedInt32Array(346, 345, 347), PackedInt32Array(347, 345, 348), PackedInt32Array(351, 350, 349), PackedInt32Array(345, 352, 348), PackedInt32Array(348, 352, 349), PackedInt32Array(349, 352, 264), PackedInt32Array(349, 264, 351), PackedInt32Array(352, 263, 264), PackedInt32Array(355, 354, 353), PackedInt32Array(357, 356, 358), PackedInt32Array(358, 356, 359), PackedInt32Array(355, 353, 360), PackedInt32Array(362, 212, 361), PackedInt32Array(361, 212, 213), PackedInt32Array(362, 361, 356), PackedInt32Array(356, 361, 355), PackedInt32Array(356, 355, 359), PackedInt32Array(359, 355, 360), PackedInt32Array(360, 363, 359), PackedInt32Array(365, 364, 366), PackedInt32Array(366, 364, 367), PackedInt32Array(367, 364, 368), PackedInt32Array(367, 368, 201), PackedInt32Array(201, 203, 367), PackedInt32Array(357, 358, 366), PackedInt32Array(366, 358, 365), PackedInt32Array(346, 347, 355), PackedInt32Array(355, 347, 354), PackedInt32Array(370, 369, 371), PackedInt32Array(371, 369, 372), PackedInt32Array(374, 373, 375), PackedInt32Array(375, 373, 376), PackedInt32Array(376, 373, 368), PackedInt32Array(368, 373, 372), PackedInt32Array(369, 377, 372), PackedInt32Array(372, 377, 368), PackedInt32Array(368, 364, 378), PackedInt32Array(368, 378, 376), PackedInt32Array(369, 379, 377), PackedInt32Array(381, 380, 382), PackedInt32Array(382, 380, 383), PackedInt32Array(385, 384, 386), PackedInt32Array(386, 384, 387), PackedInt32Array(387, 384, 363), PackedInt32Array(380, 388, 383), PackedInt32Array(383, 388, 363), PackedInt32Array(363, 384, 383), PackedInt32Array(390, 389, 388), PackedInt32Array(363, 360, 387), PackedInt32Array(380, 390, 388), PackedInt32Array(394, 393, 391), PackedInt32Array(391, 393, 392), PackedInt32Array(398, 397, 395), PackedInt32Array(395, 397, 396), PackedInt32Array(402, 401, 399), PackedInt32Array(399, 401, 400), PackedInt32Array(406, 405, 403), PackedInt32Array(403, 405, 404), PackedInt32Array(410, 409, 407), PackedInt32Array(407, 409, 408), PackedInt32Array(414, 413, 411), PackedInt32Array(411, 413, 412), PackedInt32Array(418, 417, 415), PackedInt32Array(415, 417, 416), PackedInt32Array(422, 421, 419), PackedInt32Array(419, 421, 420), PackedInt32Array(426, 425, 423), PackedInt32Array(423, 425, 424), PackedInt32Array(430, 429, 427), PackedInt32Array(427, 429, 428), PackedInt32Array(434, 433, 431), PackedInt32Array(431, 433, 432), PackedInt32Array(438, 437, 435), PackedInt32Array(435, 437, 436), PackedInt32Array(350, 351, 439), PackedInt32Array(439, 351, 440), PackedInt32Array(444, 443, 441), PackedInt32Array(441, 443, 442), PackedInt32Array(448, 447, 445), PackedInt32Array(445, 447, 446), PackedInt32Array(452, 451, 449), PackedInt32Array(449, 451, 450), PackedInt32Array(456, 455, 453), PackedInt32Array(453, 455, 454), PackedInt32Array(460, 459, 457), PackedInt32Array(457, 459, 458), PackedInt32Array(464, 463, 461), PackedInt32Array(461, 463, 462), PackedInt32Array(468, 467, 465), PackedInt32Array(465, 467, 466), PackedInt32Array(472, 471, 469), PackedInt32Array(469, 471, 470), PackedInt32Array(476, 475, 473), PackedInt32Array(473, 475, 474), PackedInt32Array(480, 479, 477), PackedInt32Array(477, 479, 478), PackedInt32Array(484, 483, 481), PackedInt32Array(481, 483, 482), PackedInt32Array(488, 487, 485), PackedInt32Array(485, 487, 486), PackedInt32Array(492, 491, 489), PackedInt32Array(489, 491, 490), PackedInt32Array(496, 495, 493), PackedInt32Array(493, 495, 494), PackedInt32Array(500, 499, 497), PackedInt32Array(497, 499, 498), PackedInt32Array(504, 503, 501), PackedInt32Array(501, 503, 502), PackedInt32Array(508, 507, 505), PackedInt32Array(505, 507, 506), PackedInt32Array(512, 511, 509), PackedInt32Array(509, 511, 510), PackedInt32Array(516, 515, 513), PackedInt32Array(513, 515, 514), PackedInt32Array(520, 519, 517), PackedInt32Array(517, 519, 518), PackedInt32Array(521, 439, 440), PackedInt32Array(521, 440, 522), PackedInt32Array(522, 440, 524), PackedInt32Array(522, 524, 523), PackedInt32Array(523, 525, 522), PackedInt32Array(527, 388, 526), PackedInt32Array(526, 388, 389), PackedInt32Array(529, 528, 530), PackedInt32Array(530, 528, 531), PackedInt32Array(531, 528, 532), PackedInt32Array(527, 526, 529), PackedInt32Array(529, 526, 528), PackedInt32Array(377, 379, 533), PackedInt32Array(533, 534, 377), PackedInt32Array(377, 534, 536), PackedInt32Array(377, 536, 535), PackedInt32Array(534, 530, 536), PackedInt32Array(536, 530, 531), PackedInt32Array(525, 523, 528), PackedInt32Array(528, 523, 532)] +geometry_collision_mask = 4294901761 +geometry_source_geometry_mode = 1 +agent_radius = 1.0 + +[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_fj7yv"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_tlwt5"] +size = Vector2(50, 75) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aqk2v"] +albedo_color = Color(0, 0.54, 0, 1) + +[sub_resource type="Curve3D" id="Curve3D_036b0"] +_data = { +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, -21.356016, 0, -25.45786, 0, 0, 0, 0, 0, 0, 23.121233, 0, -25.106264, 0, 0, 0, 0, 0, 0, 21.714838, 0, 33.96233, 0, 0, 0, 0, 0, 0, -21.70761, 0, 34.13813, 0, 0, 0, 0, 0, 0, -21.356016, 0, -22.996672), +"tilts": PackedFloat32Array(0, 0, 0, 0, 0) +} +point_count = 5 + +[node name="World" type="Node3D" unique_id=1756877658] + +[node name="NavigationRegion3D" type="NavigationRegion3D" parent="." unique_id=514937994] +navigation_mesh = SubResource("NavigationMesh_aqk2v") + +[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=1910035523 groups=["navigation_mesh_source_group"]] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=29884041] +visible = false +shape = SubResource("WorldBoundaryShape3D_fj7yv") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D" unique_id=143649136] +mesh = SubResource("PlaneMesh_tlwt5") +surface_material_override/0 = SubResource("StandardMaterial3D_aqk2v") + +[node name="Player" parent="." unique_id=1904432250 instance=ExtResource("1_f3sb7")] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=570825208] +transform = Transform3D(-0.0140324235, 0.60681456, -0.79471964, -0.7547328, 0.5149172, 0.40649557, 0.65588236, 0.60550505, 0.45075715, 0, 0, 0) +shadow_enabled = true + +[node name="Block" type="Node3D" parent="." unique_id=2039876952 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -12) + +[node name="Building" parent="Block" unique_id=1251798536 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block" unique_id=908309290 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block" unique_id=1587755618 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block" unique_id=1169051497 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block" unique_id=1333226928 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block" unique_id=1747250756 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block" unique_id=1849236870 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block" unique_id=1282653622 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block" unique_id=925975508 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block" unique_id=454371589 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block" unique_id=849616991 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block" unique_id=1916798161 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block" unique_id=1386723069 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block" unique_id=403050739 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block" unique_id=1000895170 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="Block2" type="Node3D" parent="." unique_id=418371154 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -12) + +[node name="Building" parent="Block2" unique_id=713127214 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block2" unique_id=1885002606 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block2" unique_id=1895646166 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block2" unique_id=1983228601 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block2" unique_id=524074512 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block2" unique_id=1635124830 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block2" unique_id=654597789 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block2" unique_id=2100089339 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block2" unique_id=964482464 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block2" unique_id=545809520 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block2" unique_id=2081911407 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block2" unique_id=409386394 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block2" unique_id=553848869 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block2" unique_id=397270686 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block2" unique_id=756651153 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="Block3" type="Node3D" parent="." unique_id=327746024 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 3) + +[node name="Building" parent="Block3" unique_id=1092541151 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block3" unique_id=1213949410 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block3" unique_id=523351726 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block3" unique_id=1933644691 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block3" unique_id=960729027 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block3" unique_id=22515381 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block3" unique_id=1860127336 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block3" unique_id=859451122 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block3" unique_id=1745723910 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block3" unique_id=589670604 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block3" unique_id=848278930 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block3" unique_id=1613325213 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block3" unique_id=266129625 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block3" unique_id=386994171 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block3" unique_id=2143661642 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="Block4" type="Node3D" parent="." unique_id=884598173 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, 3) + +[node name="Building" parent="Block4" unique_id=1351637206 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block4" unique_id=1813601504 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block4" unique_id=1699201208 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block4" unique_id=641847905 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block4" unique_id=515433628 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block4" unique_id=1183158990 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block4" unique_id=1559364021 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block4" unique_id=401989865 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block4" unique_id=48916675 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block4" unique_id=1809564697 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block4" unique_id=173940290 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block4" unique_id=2079797338 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block4" unique_id=566541351 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block4" unique_id=1400156686 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block4" unique_id=301034197 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="Block5" type="Node3D" parent="." unique_id=836938080 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 18) + +[node name="Building" parent="Block5" unique_id=886079929 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block5" unique_id=1218605486 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block5" unique_id=339360562 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block5" unique_id=1239861021 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block5" unique_id=1276022415 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block5" unique_id=2130784870 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block5" unique_id=162706280 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block5" unique_id=125729892 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block5" unique_id=1613812479 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block5" unique_id=98605379 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block5" unique_id=871792818 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block5" unique_id=1540053198 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block5" unique_id=666231375 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block5" unique_id=1896171151 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block5" unique_id=689303111 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="Block6" type="Node3D" parent="." unique_id=419025369 groups=["navigation_mesh_source_group"]] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, 18) + +[node name="Building" parent="Block6" unique_id=910712112 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 7.131507) + +[node name="Building2" parent="Block6" unique_id=671209758 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 7.131507) + +[node name="Building3" parent="Block6" unique_id=251877111 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 7.131507) + +[node name="Building4" parent="Block6" unique_id=1901787245 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 7.131507) + +[node name="Building5" parent="Block6" unique_id=940003417 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 7.131507) + +[node name="Building6" parent="Block6" unique_id=1167940097 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 4.131507) + +[node name="Building7" parent="Block6" unique_id=1686524971 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 4.131507) + +[node name="Building8" parent="Block6" unique_id=631129663 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 4.131507) + +[node name="Building9" parent="Block6" unique_id=1818825060 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 4.131507) + +[node name="Building10" parent="Block6" unique_id=294395091 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 4.131507) + +[node name="Building11" parent="Block6" unique_id=1938219486 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.296503, 0, 1.1315079) + +[node name="Building12" parent="Block6" unique_id=318712455 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.296503, 0, 1.1315079) + +[node name="Building13" parent="Block6" unique_id=633618821 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.296503, 0, 1.1315079) + +[node name="Building14" parent="Block6" unique_id=1531504061 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.296503, 0, 1.1315079) + +[node name="Building15" parent="Block6" unique_id=448788120 instance=ExtResource("2_fj7yv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2965031, 0, 1.1315079) + +[node name="EnemySpawner" type="Path3D" parent="." unique_id=1620392916] +curve = SubResource("Curve3D_036b0") +script = ExtResource("4_aqk2v")