conforms file names to consistant standard
10
scenes/8_direction_sprite.tscn
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_scene format=3 uid="uid://ri8r03wqy80t"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://by8jxwui7chwl" path="res://scripts/eight_direction_sprite.gd" id="1_ipfb5"]
|
||||
[ext_resource type="Texture2D" uid="uid://bf3gkg7f2oyg7" path="res://assets/textureatlases/player.tres" id="2_kkoy2"]
|
||||
|
||||
[node name="EightDirectionSprite" type="Sprite3D" unique_id=836308967]
|
||||
billboard = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("2_kkoy2")
|
||||
script = ExtResource("1_ipfb5")
|
||||
12
scenes/boom_box/mat_boom_box_speaker.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://b7bnfiwxvih3a"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://shaders/wiggly_model.gdshader" id="1_xk86o"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtdp1y7dvcook" path="res://scenes/boom_box/tex_boom_box_speaker.png" id="2_8bqku"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_xk86o")
|
||||
shader_parameter/albedo = ExtResource("2_8bqku")
|
||||
shader_parameter/jitter_z_coordinate = true
|
||||
shader_parameter/jitter_depth_independent = true
|
||||
shader_parameter/alpha_scissor = 1.0
|
||||
BIN
scenes/boom_box/mdl_boom_box.glb
Normal file
59
scenes/boom_box/mdl_boom_box.glb.import
Normal file
@@ -0,0 +1,59 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://ca1y03riauk7v"
|
||||
path="res://.godot/imported/mdl_boom_box.glb-2bdf94ac121d2badd92b33bbe527a91a.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/boom_box/mdl_boom_box.glb"
|
||||
dest_files=["res://.godot/imported/mdl_boom_box.glb-2bdf94ac121d2badd92b33bbe527a91a.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=false
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"@MATERIAL:1": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://cjvmf0bl70x6q"
|
||||
},
|
||||
"Material.001": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://scenes/boom_box/mat_boom_box_speaker.tres",
|
||||
"use_external/path": "uid://b7bnfiwxvih3a"
|
||||
},
|
||||
"Material.002": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://materials/metal_2/metal2.tres",
|
||||
"use_external/path": "uid://cjvmf0bl70x6q"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=0
|
||||
75
scenes/boom_box/scn_boom_box.tscn
Normal file
@@ -0,0 +1,75 @@
|
||||
[gd_scene format=3 uid="uid://1b2ikdanl66b"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bivtfdl3p1brv" path="res://scenes/boom_box/scr_boom_box.gd" id="1_qft15"]
|
||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://scripts/interact_button.gd" id="4_eavi1"]
|
||||
[ext_resource type="PackedScene" uid="uid://ca1y03riauk7v" path="res://scenes/boom_box/mdl_boom_box.glb" id="5_8jpsw"]
|
||||
[ext_resource type="AudioStream" uid="uid://dknygn5eyuhxt" path="res://audio/aud_shot.wav" id="5_m033a"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0ebt5"]
|
||||
size = Vector3(3.00441, 0.9920776, 1.2781768)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ikdwj"]
|
||||
size = Vector3(0.8920957, 1.1780555, 0.653507)
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_73g2w"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("5_m033a")
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_21y4o"]
|
||||
size = Vector3(3.1602442, 1.6259993, 1.007927)
|
||||
|
||||
[node name="CardPrinter" type="StaticBody3D" unique_id=459800869 node_paths=PackedStringArray("button", "button_collider")]
|
||||
script = ExtResource("1_qft15")
|
||||
button = NodePath("StaticBody3D")
|
||||
button_collider = NodePath("StaticBody3D/CollisionShape3D2")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=30960146]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0007226467, 0.47737724, 0.562555)
|
||||
shape = SubResource("BoxShape3D_0ebt5")
|
||||
|
||||
[node name="boombox" parent="." unique_id=1990632876 instance=ExtResource("5_8jpsw")]
|
||||
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.03968942, 1.5274034, 0.27377868)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=427437411]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.847404, 0.610684)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("4_eavi1")
|
||||
press_cost = 1
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" unique_id=914833676]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.11519222, 0.80499697, 0.5172301)
|
||||
shape = SubResource("BoxShape3D_ikdwj")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="StaticBody3D" unique_id=2125771228]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.578748, -0.587001)
|
||||
stream = SubResource("AudioStreamRandomizer_73g2w")
|
||||
volume_db = -6.5
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="." unique_id=1739651585]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.83318865, 0.5436785)
|
||||
size = Vector3(3.01, 0.275, 1.3083398)
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="." unique_id=1331903082]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2236495, 0.46450287, 0.9188268)
|
||||
size = Vector3(0.355, 1, 0.37)
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="." unique_id=792536346]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2526929, 0.46450287, 0.9501231)
|
||||
size = Vector3(0.355, 1, 0.37)
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="." unique_id=924404615]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2410457, 0.46450287, 0.15670347)
|
||||
size = Vector3(0.355, 1, 0.37)
|
||||
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="." unique_id=1351624555]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2410758, 0.46450287, 0.1566062)
|
||||
size = Vector3(0.355, 1, 0.37)
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="." unique_id=1288587195]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0032413006, 1.7864776, 0.59116006)
|
||||
shape = SubResource("BoxShape3D_21y4o")
|
||||
|
||||
[connection signal="button_interacted" from="StaticBody3D" to="." method="_on_static_body_3d_button_interacted"]
|
||||
78
scenes/boom_box/scr_boom_box.gd
Normal file
@@ -0,0 +1,78 @@
|
||||
class_name BoomBox extends StaticBody3D
|
||||
|
||||
@export var button: InteractButton
|
||||
@export var button_collider: CollisionShape3D
|
||||
@export var cassette_selection_menu: PackedScene
|
||||
|
||||
var cassettes_generated: int = 0
|
||||
var reply_player: Hero
|
||||
var spawned_cassettes: Array[CassetteItem] = []
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
button.hover_text = tr("PROMPT_RADIO_INTERACT")
|
||||
|
||||
|
||||
func generate_rarity() -> int:
|
||||
var weight_total: int = 0
|
||||
for rarity: String in Data.Rarity:
|
||||
weight_total += Data.rarity_weights[rarity]
|
||||
|
||||
var generated_rarity: int = NoiseRandom.randi_in_range(4 * cassettes_generated, 0, weight_total)
|
||||
cassettes_generated += 1
|
||||
var decided_rarity: int = 0
|
||||
|
||||
for rarity: String in Data.Rarity:
|
||||
weight_total -= Data.rarity_weights[rarity]
|
||||
if generated_rarity >= weight_total:
|
||||
decided_rarity = Data.Rarity[rarity]
|
||||
break
|
||||
return decided_rarity
|
||||
|
||||
|
||||
func find_cassettes(role: Cassette.Role, rarity: Data.Rarity, allowed_cassettes: Array[Cassette]) -> void:
|
||||
var decided_rarity: int = rarity
|
||||
if rarity == null:
|
||||
decided_rarity = generate_rarity()
|
||||
var cassette_choices: Array[Cassette] = allowed_cassettes
|
||||
if !cassette_choices:
|
||||
cassette_choices = Cassette.get_role_cassettes(role)
|
||||
var cassettes: Array[Cassette] = []
|
||||
var valid_cassettes_found: bool = false
|
||||
var testing_rarity: int = decided_rarity
|
||||
while !valid_cassettes_found:
|
||||
for cassette: Cassette in cassette_choices:
|
||||
if cassette.rarity == testing_rarity:
|
||||
cassettes.append(cassette)
|
||||
if cassettes.size() != 0:
|
||||
valid_cassettes_found = true
|
||||
testing_rarity -= 1
|
||||
if testing_rarity < 0:
|
||||
testing_rarity = 4
|
||||
if testing_rarity == decided_rarity:
|
||||
print("This character doesn't have any cassettes!")
|
||||
return
|
||||
var menu: ChooseCassetteScreen = cassette_selection_menu.instantiate() as ChooseCassetteScreen
|
||||
menu.add_cassettes(cassettes)
|
||||
menu.cassette_chosen.connect(output_cassette)
|
||||
reply_player.pause()
|
||||
reply_player.hud.add_child(menu)
|
||||
|
||||
|
||||
func output_cassette(cassette: Cassette) -> void:
|
||||
reply_player.add_cassette(cassette)
|
||||
reply_player.unpause()
|
||||
reply_player = null
|
||||
button_collider.disabled = false
|
||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||
|
||||
|
||||
func _on_static_body_3d_button_interacted(_value: int, reply: Hero) -> void:
|
||||
reply_player = reply
|
||||
if reply.blank_cassettes >= 1:
|
||||
reply.blank_cassettes -= 1
|
||||
else:
|
||||
return
|
||||
button_collider.disabled = true
|
||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||
find_cassettes(reply.hero_class.role, reply.game_manager.level_config.waves[reply.game_manager.wave - 1].station, reply.game_manager.level_config.allowed_cassettes)
|
||||
1
scenes/boom_box/scr_boom_box.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bivtfdl3p1brv
|
||||
BIN
scenes/boom_box/tex_boom_box_speaker.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
44
scenes/boom_box/tex_boom_box_speaker.png.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dtdp1y7dvcook"
|
||||
path.s3tc="res://.godot/imported/tex_boom_box_speaker.png-f3b3d36032c5939cbe8904e586d3ecdf.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "77c6adf66e10f09a997e096353d67627"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/boom_box/tex_boom_box_speaker.png"
|
||||
dest_files=["res://.godot/imported/tex_boom_box_speaker.png-f3b3d36032c5939cbe8904e586d3ecdf.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
12
scenes/cassette/mat_cassette.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://d224ea5fdnmh2"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://shaders/wiggly_model.gdshader" id="1_6ajq0"]
|
||||
[ext_resource type="Texture2D" uid="uid://epo8me1kxpba" path="res://scenes/cassette/tex_cassette.png" id="2_iy75q"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_6ajq0")
|
||||
shader_parameter/albedo = ExtResource("2_iy75q")
|
||||
shader_parameter/jitter_z_coordinate = true
|
||||
shader_parameter/jitter_depth_independent = true
|
||||
shader_parameter/alpha_scissor = 1.0
|
||||
BIN
scenes/cassette/mdl_cassette.glb
Normal file
50
scenes/cassette/mdl_cassette.glb.import
Normal file
@@ -0,0 +1,50 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://4g0vatb73duj"
|
||||
path="res://.godot/imported/mdl_cassette.glb-92c5f6cb7147385b2e14bac5fcca5406.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/cassette/mdl_cassette.glb"
|
||||
dest_files=["res://.godot/imported/mdl_cassette.glb-92c5f6cb7147385b2e14bac5fcca5406.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=false
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material.003": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://scenes/cassette/mat_cassette.tres",
|
||||
"use_external/path": "uid://d224ea5fdnmh2"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=0
|
||||
BIN
scenes/cassette/tex_cassette.png
Normal file
|
After Width: | Height: | Size: 862 B |
43
scenes/cassette/tex_cassette.png.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://epo8me1kxpba"
|
||||
path="res://.godot/imported/tex_cassette.png-19ab887283ce92f9cda196aaaecb8aae.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "bbbee444b208acfd0d954ff8a9c61cf4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/cassette/tex_cassette.png"
|
||||
dest_files=["res://.godot/imported/tex_cassette.png-19ab887283ce92f9cda196aaaecb8aae.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=true
|
||||
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=0
|
||||
12
scenes/coin/mat_coin.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://5mnnhn5p1tll"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://shaders/wiggly_model.gdshader" id="1_0pmap"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctjkfe23t6crn" path="res://scenes/coin/tex_coin.png" id="2_vafos"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_0pmap")
|
||||
shader_parameter/albedo = ExtResource("2_vafos")
|
||||
shader_parameter/jitter_z_coordinate = true
|
||||
shader_parameter/jitter_depth_independent = true
|
||||
shader_parameter/alpha_scissor = 1.0
|
||||
BIN
scenes/coin/mdl_coin.glb
Normal file
50
scenes/coin/mdl_coin.glb.import
Normal file
@@ -0,0 +1,50 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bg4pmewlvshu8"
|
||||
path="res://.godot/imported/mdl_coin.glb-a659bcb0c00a308fec043d3bb641e196.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/coin/mdl_coin.glb"
|
||||
dest_files=["res://.godot/imported/mdl_coin.glb-a659bcb0c00a308fec043d3bb641e196.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"coin": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://scenes/coin/mat_coin.tres",
|
||||
"use_external/path": "uid://5mnnhn5p1tll"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=0
|
||||
BIN
scenes/coin/tex_coin.png
Normal file
|
After Width: | Height: | Size: 406 B |
41
scenes/coin/tex_coin.png.import
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ctjkfe23t6crn"
|
||||
path.s3tc="res://.godot/imported/tex_coin.png-8f4b34f8d35b059e051adf8b81e960fe.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/coin/tex_coin.png"
|
||||
dest_files=["res://.godot/imported/tex_coin.png-8f4b34f8d35b059e051adf8b81e960fe.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
25
scenes/corpse.tscn
Normal file
@@ -0,0 +1,25 @@
|
||||
[gd_scene format=3 uid="uid://canrxnpxcugc2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://mm665gsfr23a" path="res://scripts/corpse.gd" id="1_hdqtp"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdnhe2mi5c5ln" path="res://assets/textures/dead_eye_dog.png" id="2_6ext7"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_shai7"]
|
||||
radius = 0.200919
|
||||
|
||||
[node name="Node3D" type="RigidBody3D" unique_id=1257239968]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
collision_layer = 0
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_hdqtp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=471167725]
|
||||
shape = SubResource("SphereShape3D_shai7")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="." unique_id=326004407]
|
||||
pixel_size = 0.04
|
||||
billboard = 1
|
||||
texture_filter = 0
|
||||
texture = ExtResource("2_6ext7")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
14
scenes/enemy_spawner.tscn
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_scene format=3 uid="uid://d2yv447trxkwt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dkuxg6ek5us4f" path="res://scripts/enemy_spawner.gd" id="1_23wuv"]
|
||||
[ext_resource type="PackedScene" uid="uid://b0nady5xm88bo" path="res://worlds/green_planet/Enemies/land_enemy.tscn" id="2_muaoj"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjo2q6vca5qlv" path="res://worlds/green_planet/Enemies/air_enemy.tscn" id="3_nh55v"]
|
||||
|
||||
[node name="Node3D" type="Node3D" unique_id=813986609]
|
||||
script = ExtResource("1_23wuv")
|
||||
land_enemy_scene = ExtResource("2_muaoj")
|
||||
air_enemy_scene = ExtResource("3_nh55v")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1142541514]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
visible = false
|
||||
BIN
scenes/flow_field/cube.glb
Normal file
42
scenes/flow_field/cube.glb.import
Normal file
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bkokjrjns7l6j"
|
||||
path="res://.godot/imported/cube.glb-f68a1666bcfbfeb32cf66159f04b5623.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/flow_field/cube.glb"
|
||||
dest_files=["res://.godot/imported/cube.glb-f68a1666bcfbfeb32cf66159f04b5623.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
11
scenes/flow_field/cube2.tscn
Normal file
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://ravcalfsha76"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bkokjrjns7l6j" path="res://scenes/flow_field/cube.glb" id="1_7p7qy"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_35c3u"]
|
||||
resource_local_to_scene = true
|
||||
|
||||
[node name="cube" unique_id=163499116 instance=ExtResource("1_7p7qy")]
|
||||
|
||||
[node name="Cube" parent="." index="0" unique_id=583197030]
|
||||
material_override = SubResource("StandardMaterial3D_35c3u")
|
||||
118
scenes/flow_field/flow_field.gd
Normal file
@@ -0,0 +1,118 @@
|
||||
class_name FlowField
|
||||
extends Node3D
|
||||
|
||||
signal path_updated()
|
||||
|
||||
@export var start_points: Array[Node3D]
|
||||
@export var goal_points: Array[Node3D]
|
||||
|
||||
var start_nodes: Array[FlowNodeData]
|
||||
var goal_nodes: Array[FlowNodeData]
|
||||
var magic_node: FlowNodeData
|
||||
var data: FlowFieldData :
|
||||
get():
|
||||
return data
|
||||
set(value):
|
||||
data = value
|
||||
for node: FlowNodeData in data.nodes:
|
||||
if node.type == FlowNodeData.NodeType.START:
|
||||
start_nodes.append(node)
|
||||
if node.type == FlowNodeData.NodeType.GOAL:
|
||||
goal_nodes.append(node)
|
||||
|
||||
|
||||
func get_closest_point(pos: Vector3, traversable_required: bool = false, buildable_required: bool = false) -> FlowNodeData:
|
||||
var closest_point: FlowNodeData = null
|
||||
var closest_dist: float = 100000.0
|
||||
for node: FlowNodeData in data.nodes:
|
||||
if node.position.distance_to(pos) < closest_dist:
|
||||
if !traversable_required or node.traversable:
|
||||
if !buildable_required or node.buildable:
|
||||
closest_dist = node.position.distance_to(pos)
|
||||
closest_point = node
|
||||
return closest_point
|
||||
|
||||
|
||||
func test_traversability() -> bool:
|
||||
for node: FlowNodeData in start_nodes:
|
||||
while node.best_path != null:
|
||||
if node.best_path.traversable:
|
||||
node = node.best_path
|
||||
else:
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
func iterate_search(search_frontier: Array[FlowNodeData], reached: Array[FlowNodeData]) -> void:
|
||||
var current: FlowNodeData = search_frontier.pop_front()
|
||||
for node: FlowNodeData in current.connected_nodes:
|
||||
if !reached.has(node):
|
||||
reached.append(node)
|
||||
if node.traversable:
|
||||
search_frontier.append(node)
|
||||
node.best_path = current
|
||||
|
||||
|
||||
func calculate() -> void:
|
||||
var reached: Array[FlowNodeData] = []
|
||||
var search_frontier: Array[FlowNodeData] = []
|
||||
for node: FlowNodeData in goal_nodes:
|
||||
node.best_path = null
|
||||
reached.append(node)
|
||||
search_frontier.append(node)
|
||||
while search_frontier.size() > 0:
|
||||
iterate_search(search_frontier, reached)
|
||||
|
||||
|
||||
func traversable_after_blocking_point(point: FlowNodeData) -> bool:
|
||||
magic_node = null
|
||||
var reached: Array[FlowNodeData] = [point]
|
||||
var search_frontier: Array[FlowNodeData] = []
|
||||
for node: FlowNodeData in point.connected_nodes:
|
||||
if node.best_path == point and node.traversable:
|
||||
reached.append(node)
|
||||
search_frontier.append(node)
|
||||
if search_frontier.size() == 0: # if no neighbors rely on this node, then we're all good
|
||||
return true
|
||||
while search_frontier.size() > 0:
|
||||
var current: FlowNodeData = search_frontier.pop_front()
|
||||
for node: FlowNodeData in current.connected_nodes:
|
||||
if !reached.has(node):
|
||||
if node.traversable and node.best_path != node and !reached.has(node.best_path):
|
||||
#if we havent already seen the node this neighbor goes to,
|
||||
#then all our searched nodes could swap to go this direction
|
||||
#and the path would still be traversable
|
||||
magic_node = node
|
||||
return true
|
||||
reached.append(node)
|
||||
if node.traversable:
|
||||
search_frontier.append(node)
|
||||
return false
|
||||
|
||||
|
||||
func toggle_goal(nodes_to_toggle: Array[FlowNodeData]) -> void:
|
||||
for node: FlowNodeData in nodes_to_toggle:
|
||||
if goal_nodes.has(node):
|
||||
goal_nodes.erase(node)
|
||||
else:
|
||||
goal_nodes.append(node)
|
||||
|
||||
|
||||
func toggle_start(nodes_to_toggle: Array[FlowNodeData]) -> void:
|
||||
for node: FlowNodeData in nodes_to_toggle:
|
||||
if start_nodes.has(node):
|
||||
start_nodes.erase(node)
|
||||
else:
|
||||
start_nodes.append(node)
|
||||
|
||||
|
||||
func toggle_traversable(node: FlowNodeData) -> bool:
|
||||
node.traversable = !node.traversable
|
||||
calculate()
|
||||
#TODO: technically the path only changed if the new path IS traversable
|
||||
path_updated.emit()
|
||||
return test_traversability()
|
||||
|
||||
|
||||
func toggle_buildable(node: FlowNodeData) -> void:
|
||||
node.buildable = !node.buildable
|
||||
1
scenes/flow_field/flow_field.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://r4nmfr8jfcjx
|
||||
12
scenes/flow_field/flow_field.tscn
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_scene format=3 uid="uid://b7dwsqfmdqr8"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://scenes/flow_field/flow_field.gd" id="1_l46ob"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://scenes/flow_field/flow_node.tscn" id="2_d6vkn"]
|
||||
[ext_resource type="PackedScene" uid="uid://cccowrgelgswj" path="res://scenes/flow_field/flow_field_tool.tscn" id="3_apokv"]
|
||||
|
||||
[node name="FlowField" type="Node3D" unique_id=1081112083]
|
||||
script = ExtResource("1_l46ob")
|
||||
flow_node_scene = ExtResource("2_d6vkn")
|
||||
|
||||
[node name="FlowFieldTool" parent="." unique_id=156436804 node_paths=PackedStringArray("flow_field") instance=ExtResource("3_apokv")]
|
||||
flow_field = NodePath("..")
|
||||
27
scenes/flow_field/flow_field_data.gd
Normal file
@@ -0,0 +1,27 @@
|
||||
class_name FlowFieldData
|
||||
extends RefCounted
|
||||
|
||||
var nodes: Array[FlowNodeData]
|
||||
var grids: int = 0
|
||||
|
||||
|
||||
func to_dict() -> Dictionary:
|
||||
var dict: Dictionary = {}
|
||||
for node: FlowNodeData in nodes:
|
||||
dict[node.node_id] = node.to_dict()
|
||||
dict["grids"] = grids
|
||||
return dict
|
||||
|
||||
|
||||
static func from_dict(dict: Dictionary) -> FlowFieldData:
|
||||
var flow: FlowFieldData = FlowFieldData.new()
|
||||
var unpopulated: Dictionary[FlowNodeData, Dictionary] = {}
|
||||
for key: String in dict.keys():
|
||||
if key.is_valid_int():
|
||||
var data: FlowNodeData = FlowNodeData.from_dict(dict[key])
|
||||
flow.nodes.append(data)
|
||||
unpopulated[data] = dict[key]
|
||||
for key: FlowNodeData in unpopulated.keys():
|
||||
key.populate_connections(unpopulated[key], flow.nodes)
|
||||
flow.grids = dict["grids"]
|
||||
return flow
|
||||
1
scenes/flow_field/flow_field_data.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ds7m1p5666qby
|
||||
65
scenes/flow_field/flow_field_editor.gd
Normal file
@@ -0,0 +1,65 @@
|
||||
class_name FlowFieldEditor
|
||||
extends Node
|
||||
|
||||
@export var flow_field: FlowField
|
||||
|
||||
|
||||
func create_grid(x_size: int, y_size: int, gap: float) -> Array[FlowNodeData]:
|
||||
flow_field.data.grids += 1
|
||||
var grid_id: int = flow_field.data.grids
|
||||
var grid: Array[Array] = []
|
||||
var created_nodes: Array[FlowNodeData] = []
|
||||
|
||||
for x: int in x_size:
|
||||
var row: Array[FlowNodeData] = []
|
||||
for y: int in y_size:
|
||||
var point_position: Vector3 = Vector3((x - floori(x_size / 2.0)) * gap, 0, (y - floori(y_size / 2.0)) * gap)
|
||||
var created_node: FlowNodeData = create_node(point_position, grid_id, x, y)
|
||||
created_nodes.append(created_node)
|
||||
row.append(created_node)
|
||||
grid.append(row)
|
||||
|
||||
for x: int in grid.size():
|
||||
for y: int in grid[x].size():
|
||||
if y > 0:
|
||||
connect_nodes(grid[x][y], grid[x][y - 1])
|
||||
if x > 0:
|
||||
connect_nodes(grid[x][y], grid[x - 1][y])
|
||||
if y < grid[x].size() - 1:
|
||||
connect_nodes(grid[x][y], grid[x][y + 1])
|
||||
if x < grid.size() - 1:
|
||||
connect_nodes(grid[x][y], grid[x + 1][y])
|
||||
return created_nodes
|
||||
|
||||
|
||||
func create_node(pos: Vector3 = Vector3.ZERO, grid_id: int = -1, grid_x: int = 0, grid_y: int = 0) -> FlowNodeData:
|
||||
var node: FlowNodeData = FlowNodeData.new()
|
||||
node.node_id = flow_field.data.nodes.size()
|
||||
node.grid_id = grid_id
|
||||
node.grid_x = grid_x
|
||||
node.grid_y = grid_y
|
||||
node.position = pos
|
||||
flow_field.data.nodes.append(node)
|
||||
return node
|
||||
|
||||
|
||||
func delete_node(node: FlowNodeData) -> void:
|
||||
for neighbor: FlowNodeData in node.connections:
|
||||
disconnect_nodes(node, neighbor)
|
||||
flow_field.data.nodes.erase(node)
|
||||
|
||||
|
||||
func connect_nodes(a: FlowNodeData, b: FlowNodeData) -> void:
|
||||
if a != b:
|
||||
if a.connected_nodes.has(b):
|
||||
a.connected_nodes.append(b)
|
||||
if b.connected_nodes.has(a):
|
||||
b.add_connection(a)
|
||||
|
||||
|
||||
func disconnect_nodes(a: FlowNodeData, b: FlowNodeData) -> void:
|
||||
if a != b:
|
||||
if a.connected_nodes.has(b):
|
||||
a.connected_nodes.erase(b)
|
||||
if b.connected_nodes.has(a):
|
||||
b.connected_nodes.erase(a)
|
||||
1
scenes/flow_field/flow_field_editor.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://d348pxbcsomw4
|
||||
55
scenes/flow_field/flow_field_tester.gd
Normal file
@@ -0,0 +1,55 @@
|
||||
class_name FlowFieldTester extends Control
|
||||
|
||||
var flow_field: FlowField
|
||||
var flow_field_tool: FlowFieldEditor
|
||||
var node_boxes: Array[ColorRect]
|
||||
var offset: Vector2
|
||||
var hovered: ColorRect
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
flow_field = FlowField.new()
|
||||
var flow_field_data: FlowFieldData = FlowFieldData.new()
|
||||
flow_field.data_file = flow_field_data
|
||||
flow_field_tool = FlowFieldEditor.new()
|
||||
add_child(flow_field)
|
||||
add_child(flow_field_tool)
|
||||
flow_field_tool.flow_field = flow_field
|
||||
flow_field_tool.create_grid(10, 10, 1)
|
||||
var furthest_negative_vector: Vector2 = Vector2.ZERO
|
||||
for node: FlowNodeData in flow_field.data.nodes:
|
||||
var box: ColorRect = ColorRect.new()
|
||||
box.position = Vector2(node.position.x * 15.0, node.position.z * 15.0)
|
||||
if node.position.x * 15.0 < furthest_negative_vector.x:
|
||||
furthest_negative_vector.x = node.position.x * 15.0
|
||||
if node.position.z * 15.0 < furthest_negative_vector.y:
|
||||
furthest_negative_vector.y = node.position.z * 15.0
|
||||
box.size = Vector2(10.0, 10.0)
|
||||
box.mouse_entered.connect(box_hovered.bind(box))
|
||||
node_boxes.append(box)
|
||||
$CanvasLayer.add_child(box)
|
||||
print(furthest_negative_vector)
|
||||
$CanvasLayer.offset = -furthest_negative_vector
|
||||
update_colors()
|
||||
|
||||
|
||||
func box_hovered(box: ColorRect) -> void:
|
||||
hovered = box
|
||||
update_colors()
|
||||
|
||||
|
||||
func update_colors() -> void:
|
||||
var x: int = 0
|
||||
for box: ColorRect in node_boxes:
|
||||
if flow_field.nodes[x].traversable:
|
||||
box.color = Color.GREEN
|
||||
else:
|
||||
box.color = Color.RED
|
||||
if box == hovered:
|
||||
box.color = Color.AQUAMARINE
|
||||
x += 1
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton and event.button_index == 0:
|
||||
pass
|
||||
1
scenes/flow_field/flow_field_tester.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://io82eo46is7q
|
||||
14
scenes/flow_field/flow_field_tester.tscn
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_scene format=3 uid="uid://dn50ruo00vbyt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://io82eo46is7q" path="res://scenes/flow_field/flow_field_tester.gd" id="1_rs8ix"]
|
||||
|
||||
[node name="Control" type="Control" unique_id=815879095]
|
||||
physics_interpolation_mode = 0
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
script = ExtResource("1_rs8ix")
|
||||
metadata/_custom_type_script = "uid://io82eo46is7q"
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=420705436]
|
||||
offset = Vector2(21.645, 26.07)
|
||||
transform = Transform2D(1, 0, 0, 1, 21.645, 26.07)
|
||||
379
scenes/flow_field/flow_field_tool.gd
Normal file
@@ -0,0 +1,379 @@
|
||||
class_name FlowFieldTool
|
||||
extends Node
|
||||
|
||||
@export_group("Basic Function")
|
||||
@export var zone_list: Array[PackedScene]
|
||||
@export var zone_holder: Node3D
|
||||
@export var visualiser_scene: PackedScene
|
||||
|
||||
@export_group("Flow Field Editor")
|
||||
@export var raycast: RayCast3D
|
||||
@export var project_raycast: RayCast3D
|
||||
@export var camera: Camera3D
|
||||
@export var camera_pivot: Node3D
|
||||
@export var position_field: HBoxContainer
|
||||
@export var position_x: LineEdit
|
||||
@export var position_y: LineEdit
|
||||
@export var position_z: LineEdit
|
||||
@export var x_field: LineEdit
|
||||
@export var y_field: LineEdit
|
||||
@export var z_field: LineEdit
|
||||
@export var x_size_field: LineEdit
|
||||
@export var y_size_field: LineEdit
|
||||
@export var gap_field: LineEdit
|
||||
@export var save_path: LineEdit
|
||||
|
||||
var flow_field: FlowField
|
||||
var visualisers: Dictionary[FlowNodeData, FlowNodeVisualiser]
|
||||
var hover: FlowNodeVisualiser = null
|
||||
var selected: Array[FlowNodeVisualiser] = []
|
||||
var vector_dirty: bool = false
|
||||
var editing: bool = false
|
||||
var selected_zone: int = -1
|
||||
var level: Level
|
||||
var radius: float = 0
|
||||
var up_angle: float = 0
|
||||
var rotate_held: bool = false
|
||||
var flow_field_editor: FlowFieldEditor
|
||||
var path_vfx: PathVFX
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
flow_field_editor = FlowFieldEditor.new()
|
||||
add_child(flow_field_editor)
|
||||
var i: int = 0
|
||||
for zone: PackedScene in zone_list:
|
||||
i += 1
|
||||
$VBoxContainer2/OptionButton.add_item("Zone " + str(i))
|
||||
$VBoxContainer2/OptionButton.select(0)
|
||||
$VBoxContainer2/OptionButton.item_selected.connect(select_zone)
|
||||
_on_trash_button_pressed()
|
||||
path_vfx = PathVFX.new()
|
||||
path_vfx.line_width = 0.4
|
||||
path_vfx.material = load("res://path_material.tres")
|
||||
add_child(path_vfx)
|
||||
|
||||
|
||||
func setup_visualisers_from_flow_field_data(data: FlowFieldData) -> void:
|
||||
for visualiser: FlowNodeVisualiser in visualisers.keys():
|
||||
visualiser.queue_free()
|
||||
visualisers = {}
|
||||
for node: FlowNodeData in data.nodes:
|
||||
add_visual(node)
|
||||
for node: FlowNodeData in visualisers.keys():
|
||||
add_visual_connections(node)
|
||||
|
||||
|
||||
func add_visual(data: FlowNodeData) -> void:
|
||||
var visual: FlowNodeVisualiser = visualiser_scene.instantiate() as FlowNodeVisualiser
|
||||
visual.data = data
|
||||
visual.position = data.position
|
||||
add_child(visual)
|
||||
visualisers[data] = visual
|
||||
|
||||
|
||||
func add_visual_connections(data: FlowNodeData) -> void:
|
||||
var connections: Array[FlowNodeVisualiser] = []
|
||||
for node: FlowNodeData in data.connected_nodes:
|
||||
connections.append(visualisers[node])
|
||||
visualisers[data].connections = connections
|
||||
visualisers[data].setup_connection_visualisers()
|
||||
|
||||
|
||||
func select_zone(zone_index: int) -> void:
|
||||
selected_zone = zone_index
|
||||
|
||||
|
||||
func load_zone() -> void:
|
||||
_on_trash_button_pressed()
|
||||
if level:
|
||||
level.queue_free()
|
||||
level = zone_list[selected_zone].instantiate() as Level
|
||||
level.flow_field = flow_field
|
||||
zone_holder.add_child(level)
|
||||
camera.make_current()
|
||||
editing = true
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if editing:
|
||||
if raycast.is_colliding() and (!hover or hover != raycast.get_collider()):
|
||||
hover = raycast.get_collider()
|
||||
if hover and !raycast.is_colliding():
|
||||
hover = null
|
||||
if selected.size() == 1 and vector_dirty:
|
||||
$Position/Button.visible = true
|
||||
position_field.visible = true
|
||||
x_field.text = str(selected[0].global_position.x)
|
||||
y_field.text = str(selected[0].global_position.y)
|
||||
z_field.text = str(selected[0].global_position.z)
|
||||
vector_dirty = false
|
||||
elif selected.size() > 1:
|
||||
$Position/Button.visible = false
|
||||
position_field.visible = true
|
||||
elif selected.size() < 1:
|
||||
position_field.visible = false
|
||||
|
||||
set_node_colors()
|
||||
|
||||
if Input.is_action_just_pressed("Secondary Fire"):
|
||||
rotate_held = true
|
||||
if Input.is_action_just_released("Secondary Fire"):
|
||||
rotate_held = false
|
||||
|
||||
var y: float = Input.get_axis("Move Forward", "Move Backward")
|
||||
var x: float = Input.get_axis("Move Left", "Move Right")
|
||||
var input_vector: Vector2 = Input.get_vector("Move Left", "Move Right", "Move Forward", "Move Backward")
|
||||
|
||||
var movement: Vector3 = ((camera_pivot.transform.basis.z * input_vector.y) + (camera_pivot.transform.basis.x * input_vector.x))
|
||||
var vec2: Vector2 = Vector2(movement.x, movement.z).normalized()
|
||||
camera_pivot.position += Vector3(vec2.x, 0.0, vec2.y) * delta * 30.0
|
||||
|
||||
|
||||
func set_node_colors() -> void:
|
||||
for node: FlowNodeVisualiser in visualisers.values():
|
||||
if node.data.traversable and node.data.buildable:
|
||||
node.set_color(Color.WEB_GRAY)
|
||||
elif node.data.traversable and !node.data.buildable:
|
||||
node.set_color(Color.CORAL)
|
||||
else:
|
||||
node.set_color(Color.BLACK)
|
||||
if flow_field.goal_nodes.has(node.data):
|
||||
node.set_color(Color.BLUE)
|
||||
if flow_field.start_nodes.has(node.data):
|
||||
node.set_color(Color.PINK)
|
||||
if selected.has(node):
|
||||
node.set_color(Color.GREEN)
|
||||
if node == hover:
|
||||
node.set_color(Color.RED)
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion:
|
||||
var from: Vector3 = camera.project_ray_origin(event.position)
|
||||
var to: Vector3 = camera.project_local_ray_normal(event.position)
|
||||
raycast.global_position = from
|
||||
raycast.target_position = to * 1000.0
|
||||
if event is InputEventMouseButton and event.button_index == 1 and hover:
|
||||
if !selected.has(hover):
|
||||
selected.append(hover)
|
||||
vector_dirty = true
|
||||
if event is InputEventMouseButton and event.button_index == 2 and selected.size() > 0:
|
||||
selected = []
|
||||
|
||||
if event is InputEventMouseButton and event.button_index == 5:
|
||||
zoom_in()
|
||||
|
||||
if event is InputEventMouseButton and event.button_index == 4:
|
||||
zoom_out()
|
||||
|
||||
if event is InputEventMouseMotion and rotate_held:
|
||||
camera_pivot.rotation.y -= (event.relative.x * get_viewport().get_final_transform().x.x) * (Data.preferences.mouse_sens / 10000.0) * (-1 if Data.preferences.invert_lookY else 1)
|
||||
up_angle -= (event.relative.y * get_viewport().get_final_transform().y.y) * (Data.preferences.mouse_sens / 10000.0) * (-1 if Data.preferences.invert_lookY else 1)
|
||||
up_angle = clamp(up_angle, deg_to_rad(-90), deg_to_rad(90))
|
||||
camera_pivot.rotation.x = up_angle
|
||||
|
||||
|
||||
func zoom_out() -> void:
|
||||
camera.position.z -= 0.3
|
||||
|
||||
|
||||
func zoom_in() -> void:
|
||||
camera.position.z += 0.3
|
||||
|
||||
|
||||
func _on_x_field_changed(text: String) -> void:
|
||||
selected[0].global_position.x = float(text)
|
||||
|
||||
|
||||
func _on_y_field_changed(text: String) -> void:
|
||||
selected[0].global_position.y = float(text)
|
||||
|
||||
|
||||
func _on_z_field_changed(text: String) -> void:
|
||||
selected[0].global_position.z = float(text)
|
||||
|
||||
|
||||
## Connects many nodes to a single single node, if any connections already
|
||||
## exist, this function disconnects them instead
|
||||
func connect_many_nodes(common_node: FlowNodeData, child_nodes: Array[FlowNodeData]) -> void:
|
||||
for node: FlowNodeData in child_nodes:
|
||||
if common_node.connections.has(node):
|
||||
flow_field_editor.disconnect_nodes(common_node, node)
|
||||
else:
|
||||
flow_field_editor.connect_nodes(common_node, node)
|
||||
|
||||
|
||||
func set_position() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
var vector: Vector3 = Vector3(float(position_x.text), float(position_y.text), float(position_z.text))
|
||||
node.data.position = vector
|
||||
node.global_position = vector
|
||||
|
||||
|
||||
func offset_position() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
var vector: Vector3 = Vector3(float(position_x.text), float(position_y.text), float(position_z.text))
|
||||
node.data.position += vector
|
||||
node.global_position += vector
|
||||
|
||||
|
||||
func _on_create_button_pressed() -> void:
|
||||
add_visual(flow_field_editor.create_node())
|
||||
|
||||
|
||||
func _on_generate_grid_button_pressed() -> void:
|
||||
for node: FlowNodeData in flow_field_editor.create_grid(int(x_size_field.text), int(y_size_field.text), float(gap_field.text)):
|
||||
add_visual(node)
|
||||
selected.append(node)
|
||||
create_grid_select_button(flow_field.data.grids)
|
||||
|
||||
|
||||
func create_grid_select_button(grid: int) -> void:
|
||||
var button: Button = Button.new()
|
||||
button.text = "Grid " + str(grid)
|
||||
button.pressed.connect(select_in_grid.bind(grid))
|
||||
$VBoxContainer3.add_child(button)
|
||||
|
||||
|
||||
func _on_calculate_button_pressed() -> void:
|
||||
flow_field.calculate()
|
||||
var points: Array[Vector3] = []
|
||||
var node: FlowNodeData = flow_field.get_closest_point(flow_field.start_nodes[0].position, true, false)
|
||||
points.append(node.position + Vector3(0, 0.1, 0))
|
||||
while node.best_path:
|
||||
node = node.best_path
|
||||
points.append(node.position + Vector3(0, 0.1, 0))
|
||||
path_vfx.path(points)
|
||||
|
||||
|
||||
func _on_connect_button_pressed() -> void:
|
||||
flow_field.connect_many_nodes(selected[0], selected.slice(1, selected.size()))
|
||||
|
||||
|
||||
func _on_mark_goal_button_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
flow_field.toggle_goal([node.data])
|
||||
selected = []
|
||||
vector_dirty = true
|
||||
|
||||
|
||||
func _on_mark_start_button_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
flow_field.toggle_start([node.data])
|
||||
selected = []
|
||||
vector_dirty = true
|
||||
|
||||
|
||||
func _on_extrude_button_pressed() -> void:
|
||||
if selected.size() == 1:
|
||||
var node: FlowNodeVisualiser = visualiser_scene.instantiate() as FlowNodeVisualiser
|
||||
add_child(node)
|
||||
node.data = flow_field.create_node(selected[0].position)
|
||||
node.add_connection(selected[0])
|
||||
selected[0].add_connection(node)
|
||||
selected[0].set_color(Color.WEB_GRAY)
|
||||
selected = []
|
||||
selected.append(node)
|
||||
vector_dirty = true
|
||||
|
||||
|
||||
func _on_toggle_traversable_button_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
if !flow_field.toggle_traversable(node.data):
|
||||
flow_field.toggle_traversable(node.data)
|
||||
selected = []
|
||||
return
|
||||
selected = []
|
||||
|
||||
|
||||
func _on_toggle_buildable_button_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
flow_field.toggle_buildable(node.data)
|
||||
|
||||
|
||||
#TODO: This doesnt work as you'd expect because of physics frames
|
||||
func _on_project_downwards_button_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
project_raycast.position = node.position + Vector3.UP
|
||||
project_raycast.target_position = Vector3.DOWN * 100.0
|
||||
await get_tree().physics_frame
|
||||
await get_tree().physics_frame
|
||||
await get_tree().physics_frame
|
||||
await get_tree().physics_frame
|
||||
if project_raycast.is_colliding():
|
||||
node.position = project_raycast.get_collision_point()
|
||||
node.data.position = node.position
|
||||
|
||||
|
||||
func _on_save_button_pressed() -> void:
|
||||
var string: String = JSON.stringify(flow_field.data.to_dict())
|
||||
var path: String = save_path.text + ".json"
|
||||
var dir: DirAccess = DirAccess.open("user://")
|
||||
if !dir.dir_exists("pathing_graphs"):
|
||||
dir.make_dir("pathing_graphs")
|
||||
dir.change_dir("pathing_graphs")
|
||||
var save_file: FileAccess = FileAccess.open("user://pathing_graphs/" + path, FileAccess.WRITE)
|
||||
save_file.store_line(string)
|
||||
|
||||
|
||||
static func load_flow_field_from_disc(path: String) -> FlowFieldData:
|
||||
if FileAccess.file_exists(path):
|
||||
var save_file: FileAccess = FileAccess.open(path, FileAccess.READ)
|
||||
var json_string: String = save_file.get_line()
|
||||
var json: JSON = JSON.new()
|
||||
var parse_result: Error = json.parse(json_string)
|
||||
if parse_result == OK:
|
||||
var dict: Dictionary = json.data
|
||||
var flow_field_data: FlowFieldData = FlowFieldData.from_dict(dict)
|
||||
return flow_field_data
|
||||
return FlowFieldData.new()
|
||||
|
||||
|
||||
func _on_load_button_pressed() -> void:
|
||||
if FileAccess.file_exists("user://pathing_graphs/" + save_path.text + ".json"):
|
||||
var save_file: FileAccess = FileAccess.open("user://pathing_graphs/" + save_path.text + ".json", FileAccess.READ)
|
||||
var json_string: String = save_file.get_line()
|
||||
var json: JSON = JSON.new()
|
||||
var parse_result: Error = json.parse(json_string)
|
||||
if parse_result == OK:
|
||||
var dict: Dictionary = json.data
|
||||
var flow_field_data: FlowFieldData = FlowFieldData.from_dict(dict)
|
||||
flow_field.data = flow_field_data
|
||||
for grid: int in flow_field_data.grids:
|
||||
create_grid_select_button(grid + 1)
|
||||
setup_visualisers_from_flow_field_data(flow_field_data)
|
||||
|
||||
|
||||
func _on_trash_button_pressed() -> void:
|
||||
if flow_field:
|
||||
flow_field.queue_free()
|
||||
for visualiser: FlowNodeVisualiser in visualisers.values():
|
||||
visualiser.queue_free()
|
||||
visualisers = {}
|
||||
for child: Node in $VBoxContainer3.get_children():
|
||||
child.queue_free()
|
||||
flow_field = FlowField.new()
|
||||
flow_field.data = FlowFieldData.new()
|
||||
add_child(flow_field)
|
||||
flow_field_editor.flow_field = flow_field
|
||||
if level:
|
||||
level.flow_field = flow_field
|
||||
|
||||
|
||||
func _on_select_all_pressed() -> void:
|
||||
selected = []
|
||||
for node: FlowNodeVisualiser in flow_field.nodes:
|
||||
selected.append(node)
|
||||
|
||||
|
||||
func select_in_grid(grid: int) -> void:
|
||||
selected = []
|
||||
for node: FlowNodeVisualiser in flow_field.nodes:
|
||||
if node.data.grid_id == grid:
|
||||
selected.append(node)
|
||||
|
||||
|
||||
func _on_print_ids_pressed() -> void:
|
||||
for node: FlowNodeVisualiser in selected:
|
||||
print(node.data.node_id)
|
||||
1
scenes/flow_field/flow_field_tool.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://05c5q1v2nv8p
|
||||
216
scenes/flow_field/flow_field_tool.tscn
Normal file
@@ -0,0 +1,216 @@
|
||||
[gd_scene format=3 uid="uid://cccowrgelgswj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://05c5q1v2nv8p" path="res://scenes/flow_field/flow_field_tool.gd" id="1_e7pmn"]
|
||||
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://zones/moat/scn_moat.tscn" id="2_030xf"]
|
||||
[ext_resource type="PackedScene" uid="uid://csq7if8wojp4g" path="res://zones/cave/scn_cave.tscn" id="3_xar7e"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://scenes/flow_field/flow_node.tscn" id="4_50p2d"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_e7pmn"]
|
||||
ambient_light_source = 2
|
||||
ambient_light_color = Color(0.728822, 0.728822, 0.728822, 1)
|
||||
|
||||
[node name="FlowFieldTool" type="Node" unique_id=897052359 node_paths=PackedStringArray("zone_holder", "raycast", "project_raycast", "camera", "camera_pivot", "position_field", "position_x", "position_y", "position_z", "x_field", "y_field", "z_field", "x_size_field", "y_size_field", "gap_field", "save_path")]
|
||||
script = ExtResource("1_e7pmn")
|
||||
zone_list = Array[PackedScene]([ExtResource("2_030xf"), ExtResource("3_xar7e")])
|
||||
zone_holder = NodePath("ZoneHolder")
|
||||
visualiser_scene = ExtResource("4_50p2d")
|
||||
raycast = NodePath("CameraFocus/Camera3D/RayCast3D")
|
||||
project_raycast = NodePath("RayCast3D")
|
||||
camera = NodePath("CameraFocus/Camera3D")
|
||||
camera_pivot = NodePath("CameraFocus")
|
||||
position_field = NodePath("Position")
|
||||
position_x = NodePath("Position/x")
|
||||
position_y = NodePath("Position/y")
|
||||
position_z = NodePath("Position/z")
|
||||
x_field = NodePath("Position/x")
|
||||
y_field = NodePath("Position/y")
|
||||
z_field = NodePath("Position/z")
|
||||
x_size_field = NodePath("VBoxContainer/HBoxContainer/x_size")
|
||||
y_size_field = NodePath("VBoxContainer/HBoxContainer/y_size")
|
||||
gap_field = NodePath("VBoxContainer/HBoxContainer/gap")
|
||||
save_path = NodePath("VBoxContainer/FileNameInput")
|
||||
metadata/_custom_type_script = "uid://05c5q1v2nv8p"
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1159336300]
|
||||
anchors_preset = 1
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
offset_left = -173.0
|
||||
offset_bottom = 572.0
|
||||
grow_horizontal = 0
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer" unique_id=1948996218]
|
||||
layout_mode = 2
|
||||
text = "Trash FlowField"
|
||||
|
||||
[node name="Create" type="Button" parent="VBoxContainer" unique_id=1093532280]
|
||||
layout_mode = 2
|
||||
text = "Create Node"
|
||||
|
||||
[node name="Delete" type="Button" parent="VBoxContainer" unique_id=118550812]
|
||||
layout_mode = 2
|
||||
text = "Remove Node"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer" unique_id=616970402]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="GenerateGrid" type="Button" parent="VBoxContainer/HBoxContainer" unique_id=1844049824]
|
||||
layout_mode = 2
|
||||
text = "Generate Grid"
|
||||
|
||||
[node name="x_size" type="LineEdit" parent="VBoxContainer/HBoxContainer" unique_id=1197701586]
|
||||
layout_mode = 2
|
||||
text = "15"
|
||||
placeholder_text = "x_size"
|
||||
|
||||
[node name="y_size" type="LineEdit" parent="VBoxContainer/HBoxContainer" unique_id=900625826]
|
||||
layout_mode = 2
|
||||
text = "7"
|
||||
placeholder_text = "y_size"
|
||||
|
||||
[node name="gap" type="LineEdit" parent="VBoxContainer/HBoxContainer" unique_id=1334558468]
|
||||
layout_mode = 2
|
||||
text = "2.5"
|
||||
placeholder_text = "gap"
|
||||
|
||||
[node name="SelectAll" type="Button" parent="VBoxContainer" unique_id=1460776735]
|
||||
layout_mode = 2
|
||||
text = "Select All Nodes"
|
||||
|
||||
[node name="Connect" type="Button" parent="VBoxContainer" unique_id=330867073]
|
||||
layout_mode = 2
|
||||
text = "Connect Nodes"
|
||||
|
||||
[node name="ProjectDownwards" type="Button" parent="VBoxContainer" unique_id=2071376561]
|
||||
layout_mode = 2
|
||||
text = "Stick node to floor"
|
||||
|
||||
[node name="MarkGoal" type="Button" parent="VBoxContainer" unique_id=474927781]
|
||||
layout_mode = 2
|
||||
text = "Toggle Goal"
|
||||
|
||||
[node name="MarkStart" type="Button" parent="VBoxContainer" unique_id=535844071]
|
||||
layout_mode = 2
|
||||
text = "Toggle Start"
|
||||
|
||||
[node name="ToggleTraversable" type="Button" parent="VBoxContainer" unique_id=1888674029]
|
||||
layout_mode = 2
|
||||
text = "Toggle Traversable"
|
||||
|
||||
[node name="ToggleBuildable" type="Button" parent="VBoxContainer" unique_id=1196891911]
|
||||
layout_mode = 2
|
||||
text = "Toggle Buildable"
|
||||
|
||||
[node name="Extrude" type="Button" parent="VBoxContainer" unique_id=114169861]
|
||||
layout_mode = 2
|
||||
text = "Extrude"
|
||||
|
||||
[node name="Calculate" type="Button" parent="VBoxContainer" unique_id=966487363]
|
||||
layout_mode = 2
|
||||
text = "Calculate"
|
||||
|
||||
[node name="Finalize" type="Button" parent="VBoxContainer" unique_id=1604655281]
|
||||
layout_mode = 2
|
||||
text = "Finalize"
|
||||
|
||||
[node name="FileNameInput" type="LineEdit" parent="VBoxContainer" unique_id=1302446264]
|
||||
layout_mode = 2
|
||||
placeholder_text = "level title"
|
||||
alignment = 1
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer" unique_id=426824804]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Save" type="Button" parent="VBoxContainer/HBoxContainer2" unique_id=128915038]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Save"
|
||||
|
||||
[node name="Load" type="Button" parent="VBoxContainer/HBoxContainer2" unique_id=397086630]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Load"
|
||||
|
||||
[node name="Button2" type="Button" parent="VBoxContainer" unique_id=1458001763]
|
||||
layout_mode = 2
|
||||
text = "Print Node_IDS"
|
||||
|
||||
[node name="Position" type="HBoxContainer" parent="." unique_id=1194117729]
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.4
|
||||
anchor_right = 0.6
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="x" type="LineEdit" parent="Position" unique_id=1634710518]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="y" type="LineEdit" parent="Position" unique_id=2145405236]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="z" type="LineEdit" parent="Position" unique_id=1899083093]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Button" type="Button" parent="Position" unique_id=362195148]
|
||||
layout_mode = 2
|
||||
text = "Set Position"
|
||||
|
||||
[node name="Button2" type="Button" parent="Position" unique_id=1670413853]
|
||||
layout_mode = 2
|
||||
text = "Add Offset"
|
||||
|
||||
[node name="CameraFocus" type="Node3D" parent="." unique_id=1567712529]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="CameraFocus" unique_id=1970273041]
|
||||
transform = Transform3D(1, 0, 0, 0, 1.0000002, 0, 0, 0, 1.0000002, 0, 0, 3)
|
||||
environment = SubResource("Environment_e7pmn")
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="CameraFocus/Camera3D" unique_id=1801773920]
|
||||
collision_mask = 64
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="CameraFocus" unique_id=275568945]
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="." unique_id=431196612]
|
||||
|
||||
[node name="ZoneHolder" type="Node3D" parent="." unique_id=1127890663]
|
||||
|
||||
[node name="VBoxContainer2" type="HBoxContainer" parent="." unique_id=1656150952]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
|
||||
[node name="OptionButton" type="OptionButton" parent="VBoxContainer2" unique_id=298744483]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer2" unique_id=1468940506]
|
||||
layout_mode = 2
|
||||
text = "Load zone"
|
||||
|
||||
[node name="VBoxContainer3" type="VBoxContainer" parent="." unique_id=179301019]
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -40.0
|
||||
offset_right = 40.0
|
||||
grow_vertical = 0
|
||||
|
||||
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_trash_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Create" to="." method="_on_create_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Delete" to="." method="_on_create_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/GenerateGrid" to="." method="_on_generate_grid_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/SelectAll" to="." method="_on_select_all_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Connect" to="." method="_on_connect_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/ProjectDownwards" to="." method="_on_project_downwards_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/MarkGoal" to="." method="_on_mark_goal_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/MarkStart" to="." method="_on_mark_start_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/ToggleTraversable" to="." method="_on_toggle_traversable_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/ToggleBuildable" to="." method="_on_toggle_buildable_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Extrude" to="." method="_on_extrude_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Calculate" to="." method="_on_calculate_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer2/Save" to="." method="_on_save_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer2/Load" to="." method="_on_load_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Button2" to="." method="_on_print_ids_pressed"]
|
||||
[connection signal="pressed" from="Position/Button" to="." method="set_position"]
|
||||
[connection signal="pressed" from="Position/Button2" to="." method="offset_position"]
|
||||
[connection signal="pressed" from="VBoxContainer2/Button" to="." method="load_zone"]
|
||||
662
scenes/flow_field/flow_field_tool_output.tscn
Normal file
@@ -0,0 +1,662 @@
|
||||
[gd_scene format=3 uid="uid://2vv6mrxiwibf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://scenes/flow_field/flow_field.gd" id="1_ca7vt"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://scenes/flow_field/flow_node.tscn" id="2_s6hwk"]
|
||||
|
||||
[node name="FlowField" type="Node3D" unique_id=72463082 node_paths=PackedStringArray("nodes", "goals")]
|
||||
script = ExtResource("1_ca7vt")
|
||||
flow_node_scene = ExtResource("2_s6hwk")
|
||||
nodes = [NodePath("FlowNode"), NodePath("@StaticBody3D@10"), NodePath("@StaticBody3D@11"), NodePath("@StaticBody3D@12"), NodePath("@StaticBody3D@13"), NodePath("@StaticBody3D@14"), NodePath("@StaticBody3D@15"), NodePath("@StaticBody3D@16"), NodePath("@StaticBody3D@17"), NodePath("@StaticBody3D@18"), NodePath("@StaticBody3D@19"), NodePath("@StaticBody3D@20"), NodePath("@StaticBody3D@21"), NodePath("@StaticBody3D@22"), NodePath("@StaticBody3D@23"), NodePath("@StaticBody3D@24"), NodePath("@StaticBody3D@25"), NodePath("@StaticBody3D@26"), NodePath("@StaticBody3D@27"), NodePath("@StaticBody3D@28"), NodePath("@StaticBody3D@29"), NodePath("@StaticBody3D@30"), NodePath("@StaticBody3D@31"), NodePath("@StaticBody3D@32"), NodePath("@StaticBody3D@33"), NodePath("@StaticBody3D@34"), NodePath("@StaticBody3D@35"), NodePath("@StaticBody3D@36"), NodePath("@StaticBody3D@37"), NodePath("@StaticBody3D@38"), NodePath("@StaticBody3D@39"), NodePath("@StaticBody3D@40"), NodePath("@StaticBody3D@41"), NodePath("@StaticBody3D@42"), NodePath("@StaticBody3D@43"), NodePath("@StaticBody3D@44"), NodePath("@StaticBody3D@45"), NodePath("@StaticBody3D@46"), NodePath("@StaticBody3D@47"), NodePath("@StaticBody3D@48"), NodePath("@StaticBody3D@49"), NodePath("@StaticBody3D@50"), NodePath("@StaticBody3D@51"), NodePath("@StaticBody3D@52"), NodePath("@StaticBody3D@53"), NodePath("@StaticBody3D@54"), NodePath("@StaticBody3D@55"), NodePath("@StaticBody3D@56"), NodePath("@StaticBody3D@57"), NodePath("@StaticBody3D@58"), NodePath("@StaticBody3D@59"), NodePath("@StaticBody3D@60"), NodePath("@StaticBody3D@61"), NodePath("@StaticBody3D@62"), NodePath("@StaticBody3D@63"), NodePath("@StaticBody3D@64"), NodePath("@StaticBody3D@65"), NodePath("@StaticBody3D@66"), NodePath("@StaticBody3D@67"), NodePath("@StaticBody3D@68"), NodePath("@StaticBody3D@69"), NodePath("@StaticBody3D@70"), NodePath("@StaticBody3D@71"), NodePath("@StaticBody3D@72"), NodePath("@StaticBody3D@73"), NodePath("@StaticBody3D@74"), NodePath("@StaticBody3D@75"), NodePath("@StaticBody3D@76"), NodePath("@StaticBody3D@77"), NodePath("@StaticBody3D@78"), NodePath("@StaticBody3D@79"), NodePath("@StaticBody3D@80"), NodePath("@StaticBody3D@81"), NodePath("@StaticBody3D@82"), NodePath("@StaticBody3D@83"), NodePath("@StaticBody3D@84"), NodePath("@StaticBody3D@85"), NodePath("@StaticBody3D@86"), NodePath("@StaticBody3D@87"), NodePath("@StaticBody3D@88"), NodePath("@StaticBody3D@89"), NodePath("@StaticBody3D@90"), NodePath("@StaticBody3D@91"), NodePath("@StaticBody3D@92"), NodePath("@StaticBody3D@93"), NodePath("@StaticBody3D@94"), NodePath("@StaticBody3D@95"), NodePath("@StaticBody3D@96"), NodePath("@StaticBody3D@97"), NodePath("@StaticBody3D@98"), NodePath("@StaticBody3D@99"), NodePath("@StaticBody3D@100"), NodePath("@StaticBody3D@101"), NodePath("@StaticBody3D@102"), NodePath("@StaticBody3D@103"), NodePath("@StaticBody3D@104"), NodePath("@StaticBody3D@105"), NodePath("@StaticBody3D@106"), NodePath("@StaticBody3D@107"), NodePath("@StaticBody3D@108"), NodePath("@StaticBody3D@109"), NodePath("@StaticBody3D@110"), NodePath("@StaticBody3D@111"), NodePath("@StaticBody3D@112"), NodePath("@StaticBody3D@113"), NodePath("@StaticBody3D@385"), NodePath("@StaticBody3D@387"), NodePath("@StaticBody3D@389"), NodePath("@StaticBody3D@391"), NodePath("@StaticBody3D@393"), NodePath("@StaticBody3D@395"), NodePath("@StaticBody3D@397"), NodePath("@StaticBody3D@411"), NodePath("@StaticBody3D@414"), NodePath("@StaticBody3D@416"), NodePath("@StaticBody3D@458"), NodePath("@StaticBody3D@464"), NodePath("@StaticBody3D@466"), NodePath("@StaticBody3D@468"), NodePath("@StaticBody3D@470"), NodePath("@StaticBody3D@472"), NodePath("@StaticBody3D@474"), NodePath("@StaticBody3D@476"), NodePath("@StaticBody3D@490"), NodePath("@StaticBody3D@493"), NodePath("@StaticBody3D@495")]
|
||||
goals = [NodePath("@StaticBody3D@458")]
|
||||
metadata/_custom_type_script = "uid://r4nmfr8jfcjx"
|
||||
|
||||
[node name="FlowNode" parent="." unique_id=328620212 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@10"), NodePath("../@StaticBody3D@16"), NodePath("../@StaticBody3D@464")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@10" parent="." unique_id=757115662 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, -0.0404969, -5)
|
||||
connections = [NodePath("../FlowNode"), NodePath("../@StaticBody3D@11"), NodePath("../@StaticBody3D@17"), NodePath("../@StaticBody3D@466")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@11" parent="." unique_id=91866818 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@10"), NodePath("../@StaticBody3D@12"), NodePath("../@StaticBody3D@18"), NodePath("../@StaticBody3D@468")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@12" parent="." unique_id=1562096635 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, -0.0404969, 2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@11"), NodePath("../@StaticBody3D@13"), NodePath("../@StaticBody3D@19"), NodePath("../@StaticBody3D@470")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@13" parent="." unique_id=315845522 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@12"), NodePath("../@StaticBody3D@14"), NodePath("../@StaticBody3D@20"), NodePath("../@StaticBody3D@472")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@14" parent="." unique_id=1356566661 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@13"), NodePath("../@StaticBody3D@15"), NodePath("../@StaticBody3D@21"), NodePath("../@StaticBody3D@474")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@15" parent="." unique_id=2018001205 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@14"), NodePath("../@StaticBody3D@22"), NodePath("../@StaticBody3D@476")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@16" parent="." unique_id=1952971850 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.0017556, -7.5)
|
||||
connections = [NodePath("../FlowNode"), NodePath("../@StaticBody3D@17"), NodePath("../@StaticBody3D@23")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@17" parent="." unique_id=1395521277 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, -0.0404969, -5)
|
||||
connections = [NodePath("../@StaticBody3D@10"), NodePath("../@StaticBody3D@16"), NodePath("../@StaticBody3D@18"), NodePath("../@StaticBody3D@24")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@18" parent="." unique_id=1221249238 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@11"), NodePath("../@StaticBody3D@17"), NodePath("../@StaticBody3D@19"), NodePath("../@StaticBody3D@25")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@19" parent="." unique_id=1578090308 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, -0.0404969, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@12"), NodePath("../@StaticBody3D@18"), NodePath("../@StaticBody3D@20"), NodePath("../@StaticBody3D@26")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@20" parent="." unique_id=643883522 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@13"), NodePath("../@StaticBody3D@19"), NodePath("../@StaticBody3D@21"), NodePath("../@StaticBody3D@27")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@21" parent="." unique_id=1872145165 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@14"), NodePath("../@StaticBody3D@20"), NodePath("../@StaticBody3D@22"), NodePath("../@StaticBody3D@28")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@22" parent="." unique_id=1512762088 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@15"), NodePath("../@StaticBody3D@21"), NodePath("../@StaticBody3D@29")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@23" parent="." unique_id=617097145 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@16"), NodePath("../@StaticBody3D@24"), NodePath("../@StaticBody3D@30")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@24" parent="." unique_id=797413766 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@17"), NodePath("../@StaticBody3D@23"), NodePath("../@StaticBody3D@25"), NodePath("../@StaticBody3D@31")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@25" parent="." unique_id=1635314950 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@18"), NodePath("../@StaticBody3D@24"), NodePath("../@StaticBody3D@26"), NodePath("../@StaticBody3D@32")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@26" parent="." unique_id=776099452 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, -0.0404969, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@19"), NodePath("../@StaticBody3D@25"), NodePath("../@StaticBody3D@27"), NodePath("../@StaticBody3D@33")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@27" parent="." unique_id=1607428862 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@20"), NodePath("../@StaticBody3D@26"), NodePath("../@StaticBody3D@28"), NodePath("../@StaticBody3D@34")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@28" parent="." unique_id=2061993066 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@21"), NodePath("../@StaticBody3D@27"), NodePath("../@StaticBody3D@29"), NodePath("../@StaticBody3D@35")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@29" parent="." unique_id=492952396 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@22"), NodePath("../@StaticBody3D@28"), NodePath("../@StaticBody3D@36")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@30" parent="." unique_id=373504999 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@23"), NodePath("../@StaticBody3D@31"), NodePath("../@StaticBody3D@37")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@31" parent="." unique_id=1673544189 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@24"), NodePath("../@StaticBody3D@30"), NodePath("../@StaticBody3D@32"), NodePath("../@StaticBody3D@38")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@32" parent="." unique_id=1670560719 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@25"), NodePath("../@StaticBody3D@31"), NodePath("../@StaticBody3D@33"), NodePath("../@StaticBody3D@39")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@33" parent="." unique_id=1382769971 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, -0.0404969, 2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@26"), NodePath("../@StaticBody3D@32"), NodePath("../@StaticBody3D@34"), NodePath("../@StaticBody3D@40")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@34" parent="." unique_id=1877899723 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@27"), NodePath("../@StaticBody3D@33"), NodePath("../@StaticBody3D@35"), NodePath("../@StaticBody3D@41")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@35" parent="." unique_id=173179606 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@28"), NodePath("../@StaticBody3D@34"), NodePath("../@StaticBody3D@36"), NodePath("../@StaticBody3D@42")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@36" parent="." unique_id=1314031653 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@29"), NodePath("../@StaticBody3D@35"), NodePath("../@StaticBody3D@43")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@37" parent="." unique_id=248711168 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@30"), NodePath("../@StaticBody3D@38"), NodePath("../@StaticBody3D@44")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@38" parent="." unique_id=498061123 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@31"), NodePath("../@StaticBody3D@37"), NodePath("../@StaticBody3D@39"), NodePath("../@StaticBody3D@45")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@39" parent="." unique_id=41382391 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@32"), NodePath("../@StaticBody3D@38"), NodePath("../@StaticBody3D@40"), NodePath("../@StaticBody3D@46")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@40" parent="." unique_id=1058091315 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, -0.0404969, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@33"), NodePath("../@StaticBody3D@39"), NodePath("../@StaticBody3D@41"), NodePath("../@StaticBody3D@47")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@41" parent="." unique_id=1006899114 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@34"), NodePath("../@StaticBody3D@40"), NodePath("../@StaticBody3D@42"), NodePath("../@StaticBody3D@48")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@42" parent="." unique_id=567193682 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@35"), NodePath("../@StaticBody3D@41"), NodePath("../@StaticBody3D@43"), NodePath("../@StaticBody3D@49")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@43" parent="." unique_id=1250409949 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@36"), NodePath("../@StaticBody3D@42"), NodePath("../@StaticBody3D@50")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@44" parent="." unique_id=638967872 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@37"), NodePath("../@StaticBody3D@45"), NodePath("../@StaticBody3D@51")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@45" parent="." unique_id=1493409843 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@38"), NodePath("../@StaticBody3D@44"), NodePath("../@StaticBody3D@46"), NodePath("../@StaticBody3D@52")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@46" parent="." unique_id=1997114351 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@39"), NodePath("../@StaticBody3D@45"), NodePath("../@StaticBody3D@47"), NodePath("../@StaticBody3D@53")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@47" parent="." unique_id=1624909819 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -0.0404969, 0)
|
||||
connections = [NodePath("../@StaticBody3D@40"), NodePath("../@StaticBody3D@46"), NodePath("../@StaticBody3D@48"), NodePath("../@StaticBody3D@54")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@48" parent="." unique_id=151474352 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@41"), NodePath("../@StaticBody3D@47"), NodePath("../@StaticBody3D@49"), NodePath("../@StaticBody3D@55")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@49" parent="." unique_id=1793069746 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@42"), NodePath("../@StaticBody3D@48"), NodePath("../@StaticBody3D@50"), NodePath("../@StaticBody3D@56")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@50" parent="." unique_id=1243081493 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@43"), NodePath("../@StaticBody3D@49"), NodePath("../@StaticBody3D@57")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@51" parent="." unique_id=1149808827 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@44"), NodePath("../@StaticBody3D@52"), NodePath("../@StaticBody3D@58")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@52" parent="." unique_id=367514059 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@45"), NodePath("../@StaticBody3D@51"), NodePath("../@StaticBody3D@53"), NodePath("../@StaticBody3D@59")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@53" parent="." unique_id=406475631 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@46"), NodePath("../@StaticBody3D@52"), NodePath("../@StaticBody3D@54"), NodePath("../@StaticBody3D@60")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@54" parent="." unique_id=657445226 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -0.0404969, 0)
|
||||
connections = [NodePath("../@StaticBody3D@47"), NodePath("../@StaticBody3D@53"), NodePath("../@StaticBody3D@55"), NodePath("../@StaticBody3D@61")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@55" parent="." unique_id=1930679825 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@48"), NodePath("../@StaticBody3D@54"), NodePath("../@StaticBody3D@56"), NodePath("../@StaticBody3D@62")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@56" parent="." unique_id=793229507 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@49"), NodePath("../@StaticBody3D@55"), NodePath("../@StaticBody3D@57"), NodePath("../@StaticBody3D@63")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@57" parent="." unique_id=924190174 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@50"), NodePath("../@StaticBody3D@56"), NodePath("../@StaticBody3D@64")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@58" parent="." unique_id=288395528 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0017556, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@51"), NodePath("../@StaticBody3D@59"), NodePath("../@StaticBody3D@65")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@59" parent="." unique_id=873721864 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0404971, -5)
|
||||
connections = [NodePath("../@StaticBody3D@52"), NodePath("../@StaticBody3D@58"), NodePath("../@StaticBody3D@60"), NodePath("../@StaticBody3D@66")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@60" parent="." unique_id=830467168 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0404969, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@53"), NodePath("../@StaticBody3D@59"), NodePath("../@StaticBody3D@61"), NodePath("../@StaticBody3D@67")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@61" parent="." unique_id=291321264 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0404969, 0)
|
||||
connections = [NodePath("../@StaticBody3D@54"), NodePath("../@StaticBody3D@60"), NodePath("../@StaticBody3D@62"), NodePath("../@StaticBody3D@68")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@62" parent="." unique_id=441065785 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0404972, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@55"), NodePath("../@StaticBody3D@61"), NodePath("../@StaticBody3D@63"), NodePath("../@StaticBody3D@69")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@63" parent="." unique_id=1406770755 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0404972, 5)
|
||||
connections = [NodePath("../@StaticBody3D@56"), NodePath("../@StaticBody3D@62"), NodePath("../@StaticBody3D@64"), NodePath("../@StaticBody3D@70")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@64" parent="." unique_id=1913941933 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@57"), NodePath("../@StaticBody3D@63"), NodePath("../@StaticBody3D@71")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@65" parent="." unique_id=1202203283 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@58"), NodePath("../@StaticBody3D@66"), NodePath("../@StaticBody3D@72")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@66" parent="." unique_id=1132634448 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@59"), NodePath("../@StaticBody3D@65"), NodePath("../@StaticBody3D@67"), NodePath("../@StaticBody3D@73")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@67" parent="." unique_id=1287910585 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@60"), NodePath("../@StaticBody3D@66"), NodePath("../@StaticBody3D@68"), NodePath("../@StaticBody3D@74")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@68" parent="." unique_id=594961650 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, -0.0404972, 0)
|
||||
connections = [NodePath("../@StaticBody3D@61"), NodePath("../@StaticBody3D@67"), NodePath("../@StaticBody3D@69"), NodePath("../@StaticBody3D@75")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@69" parent="." unique_id=1526097240 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@62"), NodePath("../@StaticBody3D@68"), NodePath("../@StaticBody3D@70"), NodePath("../@StaticBody3D@76")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@70" parent="." unique_id=174822479 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, -0.0404971, 5)
|
||||
connections = [NodePath("../@StaticBody3D@63"), NodePath("../@StaticBody3D@69"), NodePath("../@StaticBody3D@71"), NodePath("../@StaticBody3D@77")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@71" parent="." unique_id=943724471 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@64"), NodePath("../@StaticBody3D@70"), NodePath("../@StaticBody3D@78")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@72" parent="." unique_id=76295832 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@65"), NodePath("../@StaticBody3D@73"), NodePath("../@StaticBody3D@79")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@73" parent="." unique_id=985871701 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@66"), NodePath("../@StaticBody3D@72"), NodePath("../@StaticBody3D@74"), NodePath("../@StaticBody3D@80")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@74" parent="." unique_id=1781554201 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@67"), NodePath("../@StaticBody3D@73"), NodePath("../@StaticBody3D@75"), NodePath("../@StaticBody3D@81")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@75" parent="." unique_id=996434416 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -0.0404969, -1.42109e-14)
|
||||
connections = [NodePath("../@StaticBody3D@68"), NodePath("../@StaticBody3D@74"), NodePath("../@StaticBody3D@76"), NodePath("../@StaticBody3D@82")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@76" parent="." unique_id=592036863 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@69"), NodePath("../@StaticBody3D@75"), NodePath("../@StaticBody3D@77"), NodePath("../@StaticBody3D@83")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@77" parent="." unique_id=813506650 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -0.0404971, 5)
|
||||
connections = [NodePath("../@StaticBody3D@70"), NodePath("../@StaticBody3D@76"), NodePath("../@StaticBody3D@78"), NodePath("../@StaticBody3D@84")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@78" parent="." unique_id=1188307799 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@71"), NodePath("../@StaticBody3D@77"), NodePath("../@StaticBody3D@85")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@79" parent="." unique_id=1971827989 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@72"), NodePath("../@StaticBody3D@80"), NodePath("../@StaticBody3D@86")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@80" parent="." unique_id=28074274 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@73"), NodePath("../@StaticBody3D@79"), NodePath("../@StaticBody3D@81"), NodePath("../@StaticBody3D@87")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@81" parent="." unique_id=1563446494 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@74"), NodePath("../@StaticBody3D@80"), NodePath("../@StaticBody3D@82"), NodePath("../@StaticBody3D@88")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@82" parent="." unique_id=693122304 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, -0.0404969, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@75"), NodePath("../@StaticBody3D@81"), NodePath("../@StaticBody3D@83"), NodePath("../@StaticBody3D@89")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@83" parent="." unique_id=944465678 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@76"), NodePath("../@StaticBody3D@82"), NodePath("../@StaticBody3D@84"), NodePath("../@StaticBody3D@90")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@84" parent="." unique_id=895551446 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, -0.0404971, 5)
|
||||
connections = [NodePath("../@StaticBody3D@77"), NodePath("../@StaticBody3D@83"), NodePath("../@StaticBody3D@85"), NodePath("../@StaticBody3D@91")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@85" parent="." unique_id=1655235344 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@78"), NodePath("../@StaticBody3D@84"), NodePath("../@StaticBody3D@92")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@86" parent="." unique_id=504654313 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@79"), NodePath("../@StaticBody3D@87"), NodePath("../@StaticBody3D@93")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@87" parent="." unique_id=261503331 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@80"), NodePath("../@StaticBody3D@86"), NodePath("../@StaticBody3D@88"), NodePath("../@StaticBody3D@94")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@88" parent="." unique_id=2080958354 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@81"), NodePath("../@StaticBody3D@87"), NodePath("../@StaticBody3D@89"), NodePath("../@StaticBody3D@95")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@89" parent="." unique_id=132645163 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, -0.0404969, 0)
|
||||
connections = [NodePath("../@StaticBody3D@82"), NodePath("../@StaticBody3D@88"), NodePath("../@StaticBody3D@90"), NodePath("../@StaticBody3D@96")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@90" parent="." unique_id=775897287 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@83"), NodePath("../@StaticBody3D@89"), NodePath("../@StaticBody3D@91"), NodePath("../@StaticBody3D@97")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@91" parent="." unique_id=194561316 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, -0.0404971, 5)
|
||||
connections = [NodePath("../@StaticBody3D@84"), NodePath("../@StaticBody3D@90"), NodePath("../@StaticBody3D@92"), NodePath("../@StaticBody3D@98")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@92" parent="." unique_id=1608798716 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@85"), NodePath("../@StaticBody3D@91"), NodePath("../@StaticBody3D@99")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@93" parent="." unique_id=709169041 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@86"), NodePath("../@StaticBody3D@94"), NodePath("../@StaticBody3D@100")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@94" parent="." unique_id=168204741 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@87"), NodePath("../@StaticBody3D@93"), NodePath("../@StaticBody3D@95"), NodePath("../@StaticBody3D@101")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@95" parent="." unique_id=1667951340 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@88"), NodePath("../@StaticBody3D@94"), NodePath("../@StaticBody3D@96"), NodePath("../@StaticBody3D@102")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@96" parent="." unique_id=972486030 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, -0.0404969, 0)
|
||||
connections = [NodePath("../@StaticBody3D@89"), NodePath("../@StaticBody3D@95"), NodePath("../@StaticBody3D@97"), NodePath("../@StaticBody3D@103")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@97" parent="." unique_id=453341856 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@90"), NodePath("../@StaticBody3D@96"), NodePath("../@StaticBody3D@98"), NodePath("../@StaticBody3D@104")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@98" parent="." unique_id=1306245900 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, -0.0404971, 5)
|
||||
connections = [NodePath("../@StaticBody3D@91"), NodePath("../@StaticBody3D@97"), NodePath("../@StaticBody3D@99"), NodePath("../@StaticBody3D@105")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@99" parent="." unique_id=660072411 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@92"), NodePath("../@StaticBody3D@98"), NodePath("../@StaticBody3D@106")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@100" parent="." unique_id=1820379262 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@93"), NodePath("../@StaticBody3D@101"), NodePath("../@StaticBody3D@107")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@101" parent="." unique_id=12570627 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@94"), NodePath("../@StaticBody3D@100"), NodePath("../@StaticBody3D@102"), NodePath("../@StaticBody3D@108")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@102" parent="." unique_id=115702871 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@95"), NodePath("../@StaticBody3D@101"), NodePath("../@StaticBody3D@103"), NodePath("../@StaticBody3D@109")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@103" parent="." unique_id=837797651 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, -0.0404969, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@96"), NodePath("../@StaticBody3D@102"), NodePath("../@StaticBody3D@104"), NodePath("../@StaticBody3D@110")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@104" parent="." unique_id=1330074079 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@97"), NodePath("../@StaticBody3D@103"), NodePath("../@StaticBody3D@105"), NodePath("../@StaticBody3D@111")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@105" parent="." unique_id=1805228083 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, -0.0404969, 5)
|
||||
connections = [NodePath("../@StaticBody3D@98"), NodePath("../@StaticBody3D@104"), NodePath("../@StaticBody3D@106"), NodePath("../@StaticBody3D@112")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@106" parent="." unique_id=1932081713 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0.00175571, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@99"), NodePath("../@StaticBody3D@105"), NodePath("../@StaticBody3D@113")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@107" parent="." unique_id=1529071954 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, 0.00175571, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@100"), NodePath("../@StaticBody3D@108"), NodePath("../@StaticBody3D@397")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@108" parent="." unique_id=675226672 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, -0.0404972, -5)
|
||||
connections = [NodePath("../@StaticBody3D@101"), NodePath("../@StaticBody3D@107"), NodePath("../@StaticBody3D@109"), NodePath("../@StaticBody3D@395")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@109" parent="." unique_id=2131023073 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, -0.0404972, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@102"), NodePath("../@StaticBody3D@108"), NodePath("../@StaticBody3D@110"), NodePath("../@StaticBody3D@393")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@110" parent="." unique_id=1447878297 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, -0.0404969, 2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@103"), NodePath("../@StaticBody3D@109"), NodePath("../@StaticBody3D@111"), NodePath("../@StaticBody3D@391")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@111" parent="." unique_id=712017595 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, -0.0404969, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@104"), NodePath("../@StaticBody3D@110"), NodePath("../@StaticBody3D@112"), NodePath("../@StaticBody3D@389")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@112" parent="." unique_id=1912169701 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, -0.0404969, 5)
|
||||
connections = [NodePath("../@StaticBody3D@105"), NodePath("../@StaticBody3D@111"), NodePath("../@StaticBody3D@113"), NodePath("../@StaticBody3D@387")]
|
||||
visualisers = [null, null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@113" parent="." unique_id=1356088392 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, 0.0017556, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@106"), NodePath("../@StaticBody3D@112"), NodePath("../@StaticBody3D@385")]
|
||||
visualisers = [null, null, null]
|
||||
|
||||
[node name="@StaticBody3D@385" parent="." unique_id=1294078555 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, 0.0945654, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@113"), NodePath("../@StaticBody3D@387"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@387" parent="." unique_id=1595261462 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, -0.0885693, 5)
|
||||
connections = [NodePath("../@StaticBody3D@112"), NodePath("../@StaticBody3D@385"), NodePath("../@StaticBody3D@389"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@389" parent="." unique_id=179065096 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, -0.0848544, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@111"), NodePath("../@StaticBody3D@391"), NodePath("../@StaticBody3D@387"), NodePath("../@StaticBody3D@416"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@391" parent="." unique_id=1461123363 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, -0.0806967, 2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@110"), NodePath("../@StaticBody3D@393"), NodePath("../@StaticBody3D@389"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@393" parent="." unique_id=986300354 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, -0.0848545, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@109"), NodePath("../@StaticBody3D@395"), NodePath("../@StaticBody3D@391"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@395" parent="." unique_id=823365518 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, -0.0885694, -5)
|
||||
connections = [NodePath("../@StaticBody3D@108"), NodePath("../@StaticBody3D@397"), NodePath("../@StaticBody3D@393"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@397" parent="." unique_id=985819522 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.215, 0.0945654, -7.5)
|
||||
connections = [NodePath("../@StaticBody3D@107"), NodePath("../@StaticBody3D@395"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@416")]
|
||||
visualisers = [null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@411" parent="." unique_id=942087383 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.215, -1.0593, 0)
|
||||
connections = [NodePath("../@StaticBody3D@391"), NodePath("../@StaticBody3D@416"), NodePath("../@StaticBody3D@414"), NodePath("../@StaticBody3D@385"), NodePath("../@StaticBody3D@387"), NodePath("../@StaticBody3D@389"), NodePath("../@StaticBody3D@393"), NodePath("../@StaticBody3D@395"), NodePath("../@StaticBody3D@397"), NodePath("../@StaticBody3D@458")]
|
||||
visualisers = [null, null, null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@414" parent="." unique_id=1454840132 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.215, -1.05915, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@393"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@397"), NodePath("../@StaticBody3D@395"), NodePath("../@StaticBody3D@391"), NodePath("../@StaticBody3D@389"), NodePath("../@StaticBody3D@387"), NodePath("../@StaticBody3D@385"), NodePath("../@StaticBody3D@458")]
|
||||
visualisers = [null, null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@416" parent="." unique_id=64522456 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.215, -1.05945, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@389"), NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@385"), NodePath("../@StaticBody3D@387"), NodePath("../@StaticBody3D@391"), NodePath("../@StaticBody3D@393"), NodePath("../@StaticBody3D@395"), NodePath("../@StaticBody3D@397"), NodePath("../@StaticBody3D@458")]
|
||||
visualisers = [null, null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@458" parent="." unique_id=1467197443 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.215, -1.05955, 0)
|
||||
connections = [NodePath("../@StaticBody3D@411"), NodePath("../@StaticBody3D@416"), NodePath("../@StaticBody3D@414")]
|
||||
visualisers = [null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@464" parent="." unique_id=1434980999 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, 0.10004, -7.5)
|
||||
connections = [NodePath("../FlowNode"), NodePath("../@StaticBody3D@466"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@466" parent="." unique_id=1293394447 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, -0.079766, -5)
|
||||
connections = [NodePath("../@StaticBody3D@10"), NodePath("../@StaticBody3D@468"), NodePath("../@StaticBody3D@464"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@468" parent="." unique_id=195127986 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, -0.0764061, -2.5)
|
||||
connections = [NodePath("../@StaticBody3D@11"), NodePath("../@StaticBody3D@470"), NodePath("../@StaticBody3D@466"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@470" parent="." unique_id=189009953 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, -0.0730402, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@12"), NodePath("../@StaticBody3D@472"), NodePath("../@StaticBody3D@468"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@472" parent="." unique_id=635282593 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, -0.0764062, 2.5)
|
||||
connections = [NodePath("../@StaticBody3D@13"), NodePath("../@StaticBody3D@474"), NodePath("../@StaticBody3D@470"), NodePath("../@StaticBody3D@493"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@474" parent="." unique_id=844528211 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, -0.0797663, 5)
|
||||
connections = [NodePath("../@StaticBody3D@14"), NodePath("../@StaticBody3D@472"), NodePath("../@StaticBody3D@476"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@476" parent="." unique_id=886910695 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.285, 0.10004, 7.5)
|
||||
connections = [NodePath("../@StaticBody3D@15"), NodePath("../@StaticBody3D@474"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@493")]
|
||||
visualisers = [null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@490" parent="." unique_id=137896375 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.385, -1.0444, -2.84217e-14)
|
||||
connections = [NodePath("../@StaticBody3D@470"), NodePath("../@StaticBody3D@493"), NodePath("../@StaticBody3D@495"), NodePath("../@StaticBody3D@472"), NodePath("../@StaticBody3D@474"), NodePath("../@StaticBody3D@476"), NodePath("../@StaticBody3D@468"), NodePath("../@StaticBody3D@466"), NodePath("../@StaticBody3D@464")]
|
||||
visualisers = [null, null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@493" parent="." unique_id=452610810 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.385, -1.05029, 4)
|
||||
connections = [NodePath("../@StaticBody3D@472"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@476"), NodePath("../@StaticBody3D@474"), NodePath("../@StaticBody3D@470"), NodePath("../@StaticBody3D@468"), NodePath("../@StaticBody3D@466"), NodePath("../@StaticBody3D@464")]
|
||||
visualisers = [null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
|
||||
[node name="@StaticBody3D@495" parent="." unique_id=1197271690 node_paths=PackedStringArray("connections", "visualisers") instance=ExtResource("2_s6hwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.385, -1.05029, -4)
|
||||
connections = [NodePath("../@StaticBody3D@468"), NodePath("../@StaticBody3D@490"), NodePath("../@StaticBody3D@464"), NodePath("../@StaticBody3D@466"), NodePath("../@StaticBody3D@470"), NodePath("../@StaticBody3D@472"), NodePath("../@StaticBody3D@474"), NodePath("../@StaticBody3D@476")]
|
||||
visualisers = [null, null, null, null, null, null, null, null]
|
||||
buildable = false
|
||||
62
scenes/flow_field/flow_node.gd
Normal file
@@ -0,0 +1,62 @@
|
||||
class_name FlowNodeVisualiser
|
||||
extends StaticBody3D
|
||||
|
||||
var data: FlowNodeData
|
||||
var connections: Array[FlowNodeVisualiser]
|
||||
var visualisers: Array[Node3D]
|
||||
var visual_scene: PackedScene = preload("res://Scenes/FlowField/cube2.tscn")
|
||||
var best_path: FlowNodeVisualiser :
|
||||
get():
|
||||
return best_path
|
||||
set(value):
|
||||
set_connector_color(best_path, Color.DARK_GRAY)
|
||||
best_path = value
|
||||
set_connector_color(best_path, Color.DARK_GREEN)
|
||||
|
||||
|
||||
func setup_connection_visualisers() -> void:
|
||||
visualisers = []
|
||||
for node: FlowNodeVisualiser in connections:
|
||||
var visual: Node3D = visual_scene.instantiate()
|
||||
add_child(visual)
|
||||
visual.owner = self
|
||||
visualisers.append(visual)
|
||||
set_connector_color(node, Color.WEB_GRAY)
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func _process(delta: float) -> void:
|
||||
if visible:
|
||||
for i: int in connections.size():
|
||||
var distance: float = global_position.distance_to(connections[i].global_position)
|
||||
visualisers[i].scale = Vector3(0.3, 0.3, 1.0 * (distance / 2.0))
|
||||
visualisers[i].position = to_local(connections[i].global_position) / 4.0
|
||||
if distance >= 0.05:
|
||||
visualisers[i].look_at(connections[i].global_position)
|
||||
|
||||
|
||||
func set_color(new_color: Color) -> void:
|
||||
$flow_node/Sphere.material_override.albedo_color = new_color
|
||||
|
||||
|
||||
func set_connector_color(node: FlowNodeVisualiser, new_color: Color) -> void:
|
||||
if visible:
|
||||
var i: int = connections.find(node)
|
||||
visualisers[i].get_child(0).material_override.albedo_color = new_color
|
||||
|
||||
|
||||
func add_connection(node: FlowNodeVisualiser) -> void:
|
||||
if !connections.has(node):
|
||||
var visual: Node3D = visual_scene.instantiate()
|
||||
add_child(visual)
|
||||
visual.owner = self
|
||||
connections.append(node)
|
||||
visualisers.append(visual)
|
||||
set_connector_color(node, Color.WEB_GRAY)
|
||||
|
||||
|
||||
func remove_connection(node: FlowNodeVisualiser) -> void:
|
||||
if connections.has(node):
|
||||
var i: int = connections.find(node)
|
||||
visualisers.pop_at(i).queue_free()
|
||||
connections.remove_at(i)
|
||||
1
scenes/flow_field/flow_node.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c86ygtor5tksd
|
||||
BIN
scenes/flow_field/flow_node.glb
Normal file
42
scenes/flow_field/flow_node.glb.import
Normal file
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bs4en6twugqjl"
|
||||
path="res://.godot/imported/flow_node.glb-03115bd13e3be35ef5e101089fe751ff.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/flow_field/flow_node.glb"
|
||||
dest_files=["res://.godot/imported/flow_node.glb-03115bd13e3be35ef5e101089fe751ff.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
18
scenes/flow_field/flow_node.tscn
Normal file
@@ -0,0 +1,18 @@
|
||||
[gd_scene format=3 uid="uid://bssfvyxv5uo1f"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c86ygtor5tksd" path="res://scenes/flow_field/flow_node.gd" id="1_ng65h"]
|
||||
[ext_resource type="PackedScene" uid="uid://h7el2c2awv6" path="res://scenes/flow_field/flow_node2.tscn" id="2_bmgs5"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_bmgs5"]
|
||||
radius = 0.4
|
||||
|
||||
[node name="FlowNode" type="StaticBody3D" unique_id=693964790]
|
||||
collision_layer = 64
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_ng65h")
|
||||
metadata/_custom_type_script = "uid://c86ygtor5tksd"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=218852378]
|
||||
shape = SubResource("SphereShape3D_bmgs5")
|
||||
|
||||
[node name="flow_node" parent="." unique_id=1362505504 instance=ExtResource("2_bmgs5")]
|
||||
11
scenes/flow_field/flow_node2.tscn
Normal file
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://h7el2c2awv6"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bs4en6twugqjl" path="res://scenes/flow_field/flow_node.glb" id="1_tnepb"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0r20u"]
|
||||
resource_local_to_scene = true
|
||||
|
||||
[node name="flow_node" unique_id=1309943906 instance=ExtResource("1_tnepb")]
|
||||
|
||||
[node name="Sphere" parent="." index="0" unique_id=661581070]
|
||||
material_override = SubResource("StandardMaterial3D_0r20u")
|
||||
70
scenes/flow_field/flow_node_data.gd
Normal file
@@ -0,0 +1,70 @@
|
||||
class_name FlowNodeData
|
||||
extends RefCounted
|
||||
|
||||
enum NodeType {
|
||||
STANDARD = 0,
|
||||
START = 1,
|
||||
GOAL = 2,
|
||||
OBSTACLE = 3,
|
||||
}
|
||||
|
||||
|
||||
var node_id: int = -1
|
||||
var position: Vector3 = Vector3.ZERO
|
||||
var type: NodeType = NodeType.STANDARD
|
||||
var buildable: bool = true
|
||||
var traversable: bool = true
|
||||
var connected_nodes: Array[FlowNodeData]
|
||||
var best_path: FlowNodeData
|
||||
var in_grid: bool = false
|
||||
var grid_id: int = -1
|
||||
var grid_x: int = 0
|
||||
var grid_y: int = 0
|
||||
|
||||
|
||||
#This function cannot fill in the connection information until a complete set
|
||||
#of nodes have been loaded and can be looped over
|
||||
static func from_dict(dict: Dictionary) -> FlowNodeData:
|
||||
var data: FlowNodeData = FlowNodeData.new()
|
||||
data.node_id = dict["node_id"]
|
||||
data.position.x = dict["position_x"]
|
||||
data.position.y = dict["position_y"]
|
||||
data.position.z = dict["position_z"]
|
||||
data.type = dict["type"]
|
||||
data.buildable = dict["buildable"]
|
||||
data.in_grid = dict["in_grid"]
|
||||
data.grid_id = dict["grid_id"]
|
||||
data.grid_x = dict["grid_x"]
|
||||
data.grid_y = dict["grid_y"]
|
||||
|
||||
if data.type == NodeType.OBSTACLE:
|
||||
data.buildable = false
|
||||
data.traversable = false
|
||||
return data
|
||||
|
||||
|
||||
func populate_connections(dict: Dictionary, node_array: Array[FlowNodeData]) -> void:
|
||||
var connections_array: Array = dict["connected_nodes"]
|
||||
for x: float in connections_array:
|
||||
for y: FlowNodeData in node_array:
|
||||
if y.node_id == int(x):
|
||||
connected_nodes.append(y)
|
||||
|
||||
|
||||
func to_dict() -> Dictionary:
|
||||
var dict: Dictionary = {}
|
||||
var connections: Array[int] = []
|
||||
for node: FlowNodeData in connected_nodes:
|
||||
connections.append(node.node_id)
|
||||
dict["connected_nodes"] = connections
|
||||
dict["node_id"] = node_id
|
||||
dict["position_x"] = position.x
|
||||
dict["position_y"] = position.y
|
||||
dict["position_z"] = position.z
|
||||
dict["type"] = type
|
||||
dict["buildable"] = buildable
|
||||
dict["in_grid"] = in_grid
|
||||
dict["grid_id"] = grid_id
|
||||
dict["grid_x"] = grid_x
|
||||
dict["grid_y"] = grid_y
|
||||
return dict
|
||||
1
scenes/flow_field/flow_node_data.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://udtpnemisl0t
|
||||
43
scenes/item_cassette.tscn
Normal file
@@ -0,0 +1,43 @@
|
||||
[gd_scene format=3 uid="uid://dsasunnk47n8o"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1l7xhsd5prk1" path="res://scripts/item_cassette.gd" id="1_f3ek5"]
|
||||
[ext_resource type="Script" uid="uid://cl2mi4bnpatwk" path="res://scripts/float_and_spin.gd" id="2_yfdc3"]
|
||||
[ext_resource type="AudioStream" uid="uid://dknygn5eyuhxt" path="res://audio/aud_shot.wav" id="3_om63b"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_qb7ge"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bf4ou"]
|
||||
height = 1.0
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ixwn8"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("3_om63b")
|
||||
|
||||
[node name="Node3D" type="StaticBody3D" unique_id=452969856]
|
||||
collision_layer = 8
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_f3ek5")
|
||||
|
||||
[node name="model" type="RayCast3D" parent="." unique_id=1487936813]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, 0)
|
||||
target_position = Vector3(0, -10, 0)
|
||||
script = ExtResource("2_yfdc3")
|
||||
float_height = 0.7
|
||||
curve = SubResource("Curve_qb7ge")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="model" unique_id=848183276]
|
||||
radius = 0.1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1286165261]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, 0)
|
||||
shape = SubResource("CapsuleShape3D_bf4ou")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." unique_id=1111630089]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.701401, 0)
|
||||
stream = SubResource("AudioStreamRandomizer_ixwn8")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="finished" from="AudioStreamPlayer3D" to="." method="_on_audio_stream_player_3d_finished"]
|
||||
21
scenes/item_container.tscn
Normal file
@@ -0,0 +1,21 @@
|
||||
[gd_scene format=3 uid="uid://8d452unjpoiu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://do24iuot0j7d7" path="res://scripts/inventory.gd" id="1_6ftnx"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lscco"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_b3jqa"]
|
||||
albedo_color = Color(0.509804, 0.505882, 0, 1)
|
||||
|
||||
[node name="ItemContainer" type="StaticBody3D" unique_id=1917739256]
|
||||
|
||||
[node name="Inventory" type="Node" parent="." unique_id=1822580678]
|
||||
script = ExtResource("1_6ftnx")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=380640726]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_lscco")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1992274411]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
material = SubResource("StandardMaterial3D_b3jqa")
|
||||
10
scenes/ladder/scn_ladder.tscn
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_scene format=3 uid="uid://cx8f6tsipvmls"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://7pd2edvb845w" path="res://scenes/ladder/scr_ladder.gd" id="1_cq4ai"]
|
||||
|
||||
[node name="Ladder" type="Area3D" unique_id=1685840961]
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_cq4ai")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
|
||||
12
scenes/ladder/scr_ladder.gd
Normal file
@@ -0,0 +1,12 @@
|
||||
class_name Ladder
|
||||
extends Area3D
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body is Hero:
|
||||
body.movement.enable_climbing()
|
||||
|
||||
|
||||
func _on_body_exited(body: Node3D) -> void:
|
||||
if body is Hero:
|
||||
body.movement.disable_climbing()
|
||||
1
scenes/ladder/scr_ladder.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://7pd2edvb845w
|
||||
BIN
scenes/level_select/Level_Select_Banner.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
40
scenes/level_select/Level_Select_Banner.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drvs8v3bvlw18"
|
||||
path="res://.godot/imported/Level_Select_Banner.png-eca554025ee07158d116ca0ee588f964.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/level_select/Level_Select_Banner.png"
|
||||
dest_files=["res://.godot/imported/Level_Select_Banner.png-eca554025ee07158d116ca0ee588f964.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
|
||||
BIN
scenes/level_select/crt.glb
Normal file
60
scenes/level_select/crt.glb.import
Normal file
@@ -0,0 +1,60 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cxarqns8onckw"
|
||||
path="res://.godot/imported/crt.glb-c59795273436ff2e4bb0f03e2e391bd0.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/level_select/crt.glb"
|
||||
dest_files=["res://.godot/imported/crt.glb-c59795273436ff2e4bb0f03e2e391bd0.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=false
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Metal": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://materials/metal_1/metal1.tres",
|
||||
"use_external/path": "uid://qq11jacogcec"
|
||||
},
|
||||
"Screen": {
|
||||
"use_external/enabled": false,
|
||||
"use_external/fallback_path": "res://crt_screen.tres",
|
||||
"use_external/path": "uid://cis5sbogdn4os"
|
||||
},
|
||||
"Wood": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://materials/wood_1/wood1.tres",
|
||||
"use_external/path": "uid://c21fh4gsnunfg"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=0
|
||||
BIN
scenes/level_select/crt_Level_Select_Banner.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
44
scenes/level_select/crt_Level_Select_Banner.png.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://df5skwtn84n1p"
|
||||
path.s3tc="res://.godot/imported/crt_Level_Select_Banner.png-817240eb8fba32a36b3909996d5ade69.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "b798ace04f034a43207bc1e65eefe9f0"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/level_select/crt_Level_Select_Banner.png"
|
||||
dest_files=["res://.godot/imported/crt_Level_Select_Banner.png-817240eb8fba32a36b3909996d5ade69.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
10
scenes/level_select/crt_screen_tester.tres
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://co725vuobwshh"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://shaders/wiggly_model.gdshader" id="1_4l81e"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_4l81e")
|
||||
shader_parameter/jitter_z_coordinate = true
|
||||
shader_parameter/jitter_depth_independent = true
|
||||
shader_parameter/alpha_scissor = 1.0
|
||||
BIN
scenes/level_select/crt_steel1.png
Normal file
|
After Width: | Height: | Size: 489 B |
44
scenes/level_select/crt_steel1.png.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://3rvy1up8f1k5"
|
||||
path.s3tc="res://.godot/imported/crt_steel1.png-b2e8978225d44183a6c88632b641062b.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "97569a5489f5b2ed001ce20310e8deb2"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/level_select/crt_steel1.png"
|
||||
dest_files=["res://.godot/imported/crt_steel1.png-b2e8978225d44183a6c88632b641062b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
scenes/level_select/crt_tree1_bark.png
Normal file
|
After Width: | Height: | Size: 585 B |
44
scenes/level_select/crt_tree1_bark.png.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bs0lypwyo5jf6"
|
||||
path.s3tc="res://.godot/imported/crt_tree1_bark.png-183277a34689fb281a8a4e437c2eb381.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "3a9eb64baf1362d22626d5e08a5eea2e"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/level_select/crt_tree1_bark.png"
|
||||
dest_files=["res://.godot/imported/crt_tree1_bark.png-183277a34689fb281a8a4e437c2eb381.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
38
scenes/level_select/level_magec.gd
Normal file
@@ -0,0 +1,38 @@
|
||||
class_name LevelMagec
|
||||
extends Node3D
|
||||
|
||||
@export var level_scene: PackedScene
|
||||
@export var widget_scene: PackedScene
|
||||
@export var level_parent: Node3D
|
||||
@export var widget_parent: Node3D
|
||||
@export var camera: Camera3D
|
||||
|
||||
@export var transition: float :
|
||||
get():
|
||||
return transition
|
||||
set(value):
|
||||
transition = value
|
||||
$CanvasLayer/TextureRect2.modulate = Color(1, 1, 1, 1.0 - value)
|
||||
|
||||
|
||||
var wireframe: WireFrame
|
||||
var level_config: LevelConfig = load("res://Levels/Level2/specs.tres")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
create_widget(null)
|
||||
camera.make_current()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Input.is_action_just_pressed("Interact"):
|
||||
$AnimationPlayer.play("level_select_camera")
|
||||
|
||||
|
||||
func create_widget(mesh: Mesh) -> void:
|
||||
wireframe = widget_scene.instantiate() as WireFrame
|
||||
widget_parent.add_child(wireframe)
|
||||
var flow_field_data: FlowFieldData = FlowFieldTool.load_flow_field_from_disc(level_config.zone.flow_field_data_path)
|
||||
for node: FlowNodeData in flow_field_data.nodes:
|
||||
if level_config.points_blocked.has(node.node_id):
|
||||
wireframe.spawn_blocker(node.position)
|
||||
1
scenes/level_select/level_magec.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b2ta3p7n7g1dx
|
||||
298
scenes/level_select/level_mageccc.tscn
Normal file
@@ -0,0 +1,298 @@
|
||||
[gd_scene format=4 uid="uid://cr2et2egnogvb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b2ta3p7n7g1dx" path="res://scenes/level_select/level_magec.gd" id="1_w3kbw"]
|
||||
[ext_resource type="PackedScene" uid="uid://cxarqns8onckw" path="res://scenes/level_select/crt.glb" id="2_75n78"]
|
||||
[ext_resource type="PackedScene" uid="uid://ca174636iktc6" path="res://zones/moat/mdl_moat.glb" id="2_kfofo"]
|
||||
[ext_resource type="PackedScene" uid="uid://dse6msy2hrctc" path="res://wire_frame.tscn" id="3_kfofo"]
|
||||
[ext_resource type="Shader" uid="uid://dq04j2s5foo2f" path="res://shaders/wiggly_model.gdshader" id="4_6d5u3"]
|
||||
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://zones/moat/scn_moat.tscn" id="6_u47ok"]
|
||||
[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://scripts/resources/enemy.gd" id="7_bf6dr"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdnhe2mi5c5ln" path="res://assets/textures/dead_eye_dog.png" id="8_5e5s6"]
|
||||
[ext_resource type="PackedScene" uid="uid://bvq6tbkuv2mfp" path="res://enemies/eye_dog/scn_eye_dog.tscn" id="10_tlmxb"]
|
||||
[ext_resource type="Texture2D" uid="uid://chmxo0rj26cxh" path="res://enemies/eye_dog/ico_eye_dog.png" id="11_xnj0i"]
|
||||
[ext_resource type="Resource" uid="uid://dxi17xvdlhkvc" path="res://enemies/elder_eye_dog/ene_elder_eye_dog.tres" id="12_b1o6b"]
|
||||
[ext_resource type="Resource" uid="uid://cvehqh4tt28g7" path="res://enemies/skitter/ene_skitter.tres" id="13_wnrwu"]
|
||||
[ext_resource type="Resource" uid="uid://bffhb5krs5elm" path="res://enemies/crystalisk/ene_crystalisk.tres" id="14_yipjp"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_345c2"]
|
||||
viewport_path = NodePath("GreenWireframe")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_w857q"]
|
||||
viewport_path = NodePath("RedWireframe")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_u47ok"]
|
||||
background_color = Color(0.3553134, 0.3553136, 0.35531357, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ke55h"]
|
||||
resource_name = "Material"
|
||||
cull_mode = 2
|
||||
albedo_color = Color(0.9063318, 0.9063318, 0.9063318, 1)
|
||||
roughness = 0.5
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_hfd22"]
|
||||
viewport_path = NodePath("FinalWireframe")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_wy82c"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("4_6d5u3")
|
||||
shader_parameter/albedo = SubResource("ViewportTexture_hfd22")
|
||||
shader_parameter/jitter_z_coordinate = true
|
||||
shader_parameter/jitter_depth_independent = true
|
||||
shader_parameter/alpha_scissor = 1.0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_02qwi"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.23222329, -0.2910274, -0.24000001, 0.43629748, 0.4710274, 0.48000002),
|
||||
"format": 34359742465,
|
||||
"index_count": 264,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAABAAMABQADAAAABAAGAAEABgACAAEABwAEAAMABwADAAUABQAIAAcABwAIAAkABQAKAAgABwAJAAsACwAEAAcACwAJAAwADQAKAAUABQAAAA0ADQAOAAoADQAAAA8ADwAAAAIAEAAOAA0ADQAPABAAEAARAA4AEgARABAAEgATABEAEAAPABQAEAAUABIADwACABUAFAAPABUAFgAVAAIAFAAVABcABgAWAAIAGAATABIAGAAZABMAEgAUABoAEgAaABgAGwAaABQAGwAUABcAGAAaABwAHQAZABgAGAAcAB0AHQAeABkAHwAXABUAHwAbABcAFgAfABUAIAAaABsAIAAcABoAIQAbAB8AIQAgABsAIgAfABYAIgAhAB8AIAAjABwAJAAiABYAJAAWAAYAIQAlACAAIAAlACMAIgAmACEAIQAmACUAJAAnACIAIgAnACYAJQAoACMAJQAmACgAHAAjACgAJAApACcAHAAoACoAJgArACgAJgAnACsAKgAoACsAHQAcACoAJwApACwAJwAsACsALQApACQALQAsACkALQAkAAYALQAGAAQACwAtAAQALgArACwALgAsAC0AKgArAC4ALwAtAAsALwAuAC0ACwAMAC8ALwAMADAAMQAuAC8AMQAqAC4ALwAwADEAHQAqADEAMQAwAB4AMQAeAB0A"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 50,
|
||||
"vertex_data": PackedByteArray("1PhQPuxROD4K16M98cttvuxROD6QwnU+8cttvuxROD4K16M92z9BPuxROD6QwnU+7sxHPgAAAACQwnU+2z9BPoddIT4szl4+8cttvgAAAACQwnU+7sxHPgAAAAAszl4+mIokPgAAAAAszl4+hv0dPoddIb4szl4+hv0dPoddIT4szl4+2z9BPoddIb4szl4+f7YtPoddIb5yiZQ91PhQPoddIT5yiZQ9f7YtPoddIT5yiZQ91PhQPuxROD4K16O91PhQPoddIT5yiZS9f7YtPoddIT5yiZS92z9BPoddIT4szl6+hv0dPoddIT4szl6+2z9BPuxROD6QwnW+8cttvuxROD4K16O98cttvgAAAAAK16M98cttvuxROD6QwnW+7sxHPgAAAAAszl6+mIokPgAAAAAszl6+7sxHPgAAAACQwnW+8cttvgAAAACQwnW+2z9BPuxROL6QwnW+2z9BPoddIb4szl6+hv0dPoddIb4szl6+8cttvgAAAAAK16O98cttvuxROL6QwnW+8cttvuxROL4K16O98cttvuxROL4K16M92z9BPosBlb6QwnW+8cttvuxROL6QwnU+8cttvosBlb6QwnW+8cttvosBlb4K16O98cttvosBlb4K16M91PhQPosBlb4K16O98cttvosBlb6QwnU+1PhQPuxROL4K16O91PhQPosBlb4K16M92z9BPosBlb6QwnU+2z9BPuxROL6QwnU+1PhQPuxROL4K16M91PhQPoddIb5yiZQ9f7YtPoddIb5yiZS91PhQPoddIb5yiZS9")
|
||||
}, {
|
||||
"aabb": AABB(0.15428743, -0.15758334, -0.21758336, 0.021751568, 0.31516668, 0.43516672),
|
||||
"format": 34896613377,
|
||||
"index_count": 36,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAADAAAABAAFAAMABgAEAAAABwAAAAIABgAAAAcACAAGAAcABwACAAkACAAHAAoACgAHAAkACgAJAAsA"),
|
||||
"name": "Screen",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 12,
|
||||
"vertex_data": PackedByteArray("////f6mqAAAAAP////8AALS0//+pqgAASkv/f///AAC0tAAAqaoAAAAAAAD//wAAtLQAAFVVAAD///9/VVUAAAAAAAAAAAAAtLT//1VVAABKS/9/AAAAAAAA//8AAAAA")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_vgnnb"]
|
||||
resource_local_to_scene = true
|
||||
resource_name = "crt_Cube"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.23222329, -0.2910274, -0.24000001, 0.43629748, 0.4710274, 0.48000002),
|
||||
"attribute_data": PackedByteArray("AAAgP6yqqj4AAGA/AACAPgAAYD+sqqo+AAAgPwAAgD4AACA/VlXVPgAAYD9WVdU+AAAgPwAAAD8AAGA/AAAAPwAAAD8AAIA+AAAgPwAAAAAAACA/AACAPgAAAD8AAAAAAADAPgAAgD4AAMA+AAAAAAAAwD4AAAAAAADAPgAAgD4AAAA/VlVVPwAAID8AAEA/AAAgP1VVVT8AAAA/AABAPwAAAD+rqmo/AAAgP6uqaj8AAAA/AACAPwAAID8AAIA/AADAPgAAgD8AAMA+VlVVPwAAwD4AAEA/AADAPgAAQD8AAMA+VlVVPwAAwD6rqmo/AADAPquqaj8AAMA+AACAPwAAwD5WVdU+AADAPqyqqj4AAMA+rKqqPgAAwD5WVdU+avjHPjxX0z5q+Mc+xqisPmr4xz48V9M+avjHPrIF+j5q+Mc+sgX6Pmr4xz48V9M+avjHPsaorD5q+Mc+xqisPmr4xz5Q+oU+avjHPlD6hT4AAAA/AABAPwAAID8AAAA/AAAgPwAAQD8AAAA/AAAAPwAAwD4AAEA/AADAPgAAAD8AAMA+AAAAPwAAwD4AAEA/AAAAP7AF+j4AAMA+AAAAP2r4xz6yBfo+AAAAPwAAAD8AAAA/UPqFPgAAID8AAIA+ywMcP076hT4AAAA/AACAPssDHD88V9M+AAAgPwAAAD/LAxw/sAX6PgAAID9WVdU+avjHPsaorD4AAMA+AACAPmr4xz5Q+oU+AADAPqyqqj4AAAA/UPqFPmr4xz5Q+oU+avjHPlD6hT4AAAA/UPqFPssDHD9O+oU+ywMcP076hT7LAxw/xKisPssDHD9O+oU+ywMcP076hT7LAxw/xKisPssDHD88V9M+ywMcPzxX0z7LAxw/sAX6PssDHD+wBfo+AAAAP7AF+j7LAxw/sAX6PssDHD+wBfo+AAAAP7AF+j5q+Mc+sgX6Pmr4xz6yBfo+avjHPrIF+j4AAMA+VlXVPmr4xz48V9M+AADAPgAAAD/LAxw/TvqFPgAAID+sqqo+ywMcP8SorD4AACA/AACAPssDHD/EqKw+AAAgP1ZV1T7LAxw/PFfTPgAAID+sqqo+avjHPlD6hT4AAAA/AACAPgAAAD9Q+oU+AADAPgAAgD7LAxw/sAX6PgAAAD8AAAA/AAAAP7AF+j4AACA/AAAAPwAAAD6sqqo+AADAPgAAgD4AAMA+rKqqPgAAAD4AAIA+AAAAPlZV1T4AAMA+VlXVPgAAAD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAwD5WVdU+AADAPlZV1T4AAMA+AAAAPwAAwD6sqqo+AADAPgAAgD4AAMA+AACAPgAAwD6sqqo+"),
|
||||
"format": 34359742487,
|
||||
"index_count": 264,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAAAAIABAACAAUABgAEAAUABgAFAAcACAAJAAoACAALAAkADAALAAgADAANAAsADAAOAA0ADAAPAA4AEAARABIAEAATABEAFAAQABIAFAASABUAFgAUABUAFgAVABcAGAAUABYAGQATABAAGQAaABMAGQAbABoAGQAcABsAHQAZABAAHQAcABkAHQAQABQAGAAdABQAHQAeABwAGAAeAB0AGAAfAB4AIAAhACIAIAAjACEAJAAgACIAJAAiACUAJgAnACgAJgApACcAKgApACYAKgArACkALAArACoALAAtACsALgAvADAALgAxAC8AMgAxAC4AMgAzADEAMgA0ADMAMgA1ADQANgA3ADgANgA5ADcAOgA7ADwAOgA9ADsAPgA/AEAAPgBBAD8AQgBDAEQAQgBFAEMARgBHAEgARgBJAEcASgBJAEYASgBLAEkATABNAE4ATABPAE0AUABPAEwAUABRAE8AUgBRAFAAUgBTAFEAVABVAFYAVABXAFUAWABXAFQAWABZAFcAWgBbAFwAWgBdAFsAXgBfAGAAXgBhAF8AYgBjAGQAYgBlAGMAZgBnAGgAZgBpAGcAagBrAGwAagBtAGsAbgBvAHAAbgBxAG8AcgBuAHAAcgBwAHMAdAByAHMAdABzAHUAdgB3AHgAdgB5AHcAegB7AHwAegB9AHsA"),
|
||||
"material": SubResource("StandardMaterial3D_ke55h"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 126,
|
||||
"vertex_data": PackedByteArray("1PhQPuxROD4K16M98cttvuxROD6QwnU+8cttvuxROD4K16M92z9BPuxROD6QwnU+1PhQPuxROD4K16O98cttvuxROD4K16O92z9BPuxROD6QwnW+8cttvuxROD6QwnW+7sxHPgAAAACQwnU+8cttvuxROD6QwnU+2z9BPuxROD6QwnU+8cttvgAAAACQwnU+2z9BPuxROL6QwnU+8cttvuxROL6QwnU+8cttvosBlb6QwnU+2z9BPosBlb6QwnU+8cttvgAAAAAK16O98cttvuxROD6QwnW+8cttvuxROD4K16O98cttvgAAAACQwnW+8cttvgAAAAAK16M98cttvuxROD4K16M98cttvgAAAACQwnU+8cttvuxROD6QwnU+8cttvuxROL6QwnU+8cttvuxROL4K16O98cttvuxROL6QwnW+8cttvosBlb6QwnW+8cttvosBlb4K16O98cttvuxROL4K16M98cttvosBlb4K16M98cttvosBlb6QwnU+1PhQPuxROL4K16O91PhQPosBlb4K16M91PhQPuxROL4K16M91PhQPosBlb4K16O91PhQPoddIb5yiZS91PhQPoddIb5yiZQ91PhQPoddIb5yiZS9hv0dPoddIb4szl6+2z9BPoddIb4szl6+f7YtPoddIb5yiZS91PhQPoddIb5yiZQ9f7YtPoddIb5yiZQ92z9BPoddIb4szl4+hv0dPoddIb4szl4+8cttvgAAAACQwnW+2z9BPuxROD6QwnW+8cttvuxROD6QwnW+7sxHPgAAAACQwnW+8cttvuxROL6QwnW+2z9BPuxROL6QwnW+2z9BPosBlb6QwnW+8cttvosBlb6QwnW+7sxHPgAAAAAszl6+2z9BPuxROL6QwnW+2z9BPoddIb4szl6+7sxHPgAAAACQwnW+7sxHPgAAAAAszl4+2z9BPuxROD6QwnU+2z9BPoddIT4szl4+7sxHPgAAAACQwnU+1PhQPoddIT5yiZS92z9BPuxROD6QwnW+2z9BPoddIT4szl6+1PhQPuxROD4K16O91PhQPoddIb5yiZQ92z9BPuxROL6QwnU+2z9BPoddIb4szl4+1PhQPuxROL4K16M97sxHPgAAAAAszl4+hv0dPoddIb4szl4+2z9BPoddIb4szl4+mIokPgAAAAAszl4+2z9BPoddIT4szl4+hv0dPoddIT4szl4+1PhQPoddIT5yiZQ9hv0dPoddIT4szl4+2z9BPoddIT4szl4+f7YtPoddIT5yiZQ91PhQPoddIT5yiZS9f7YtPoddIT5yiZS92z9BPoddIT4szl6+hv0dPoddIT4szl6+7sxHPgAAAAAszl6+hv0dPoddIT4szl6+2z9BPoddIT4szl6+mIokPgAAAAAszl6+2z9BPoddIb4szl6+hv0dPoddIb4szl6+2z9BPoddIb4szl6+1PhQPuxROL4K16O91PhQPoddIb5yiZS92z9BPuxROL6QwnW+2z9BPoddIT4szl4+1PhQPuxROD4K16M91PhQPoddIT5yiZQ92z9BPuxROD6QwnU+1PhQPoddIT5yiZQ91PhQPuxROD4K16O91PhQPoddIT5yiZS91PhQPuxROD4K16M92z9BPoddIb4szl4+7sxHPgAAAACQwnU+7sxHPgAAAAAszl4+2z9BPuxROL6QwnU+2z9BPoddIT4szl6+7sxHPgAAAACQwnW+7sxHPgAAAAAszl6+2z9BPuxROD6QwnW+8cttvosBlb4K16M92z9BPosBlb6QwnU+1PhQPosBlb4K16M98cttvosBlb6QwnU+8cttvosBlb4K16O91PhQPosBlb4K16O98cttvosBlb6QwnW+2z9BPosBlb6QwnW+2z9BPuxROL6QwnW+1PhQPosBlb4K16O91PhQPuxROL4K16O92z9BPosBlb6QwnW+1PhQPuxROL4K16M92z9BPosBlb6QwnU+2z9BPuxROL6QwnU+1PhQPosBlb4K16M9/3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/v/9//3+VgLP//3//f9p+bP//f/9/mnvM/f9//3+UgLT//3//f1CDVv7/f/9//3////9//3////8//3//f////z8AAP9//3/+/wAA/3//f/7/AAD/f/9//v8AAP9//3///wAA/3//f///AAD/f/9///8AAP9//3///wAA/3//f///AAD/f/9///8AAP9//3///wAA/3//f///AAD/f////78AAP9/////vwAA/3//f///AAD/f////78AAP9/////v////3//f/7/////f////7////9//3///////3////+/////f/9//v////9//3////9///////+//3///////7//f///////v/9///////+//3///////7//f///////v/9///////+//3///////7//////an+0//////+ufFb+//////9/////////aX+z//////8kgWz//////2SEzP3/////////v/////////+/HPlne62Ep/0c+Wd7roSo/Rz5Z3uuhKj9HPlne62Ep/1m++KGUXun/Wb74oZQe6j9ZvvihlB7qP1m++KGUnun/aT4nW1RiP/7pPidbQ2Iz/uk+J1tD4i8+6T4nW1liAH8nO1Zh613//uc7VmH8XfP+5ztWYfvd7z7nO1Zh5l3Afz/////////v/////////+//////////7//////////v/////////+//////////7//fwAA////v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//3//f////z//f/9/////P/9//3////8//3//f////z//f/9/////P/9//3////8/pPhhkqZ39/uk+GGSAHjW+6T4YZICeND7pPhhkpl39/uc7aV4WIj3+5ztpXj+h9b7nO2lePyH0Puc7aV4ZYj3+////3//f/7/////f/9///////9//3///////3//f/7/Zvscea6EqP1m+xx5rYSn/Wb7HHmthKf9Zvscea6EqP0c+ZeEUHuo/Rz5l4RRe6f9HPmXhFF7p/0c+ZeEUHuo/f9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//38AAP///7///zSL////v///NIv///+///80i////7///zSL////v8r0/3////8/yvT/f////z/K9P9/////P8r0/3////8/")
|
||||
}, {
|
||||
"aabb": AABB(0.15428743, -0.15758334, -0.21758336, 0.021751568, 0.31516668, 0.43516672),
|
||||
"attribute_data": PackedByteArray("VFX/fwAAAABUVQAAAAD/f////3+pqgAA//8AAKmq/3+pqv9/VFUAAKmqAABUVf9/qar//1RV/3+pqv9/VFX///////+pqv9/////f6mq//9UVf//AAD/f1RV/38AAP//"),
|
||||
"format": 34896613399,
|
||||
"index_count": 36,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUA"),
|
||||
"material": SubResource("ShaderMaterial_wy82c"),
|
||||
"name": "Screen",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 24,
|
||||
"vertex_data": PackedByteArray("////f6mqt7sAAP////+3u7S0//+pqre7Skv/f///t7tKS/9/AABPxLS0//9VVU/EAAD//wAAT8T///9/VVVPxP///39VVQPAtLT//6mqA8C0tP//VVUDwP///3+pqgPAtLQAAFVVA8D///9/qaoDwP///39VVQPAtLQAAKmqA8AAAAAAAABPxP///39VVU/ESkv/fwAAT8S0tAAAVVVPxLS0AACpqre7Skv/f///t7v///9/qaq3uwAAAAD//7e7OYXAAjmFwAI5hcACOYXAAriEPAK4hDwCuIQ8AriEPAL+hH8C/oR/Av6EfwL+hH8CgH3+BIB9/gSAff4EgH3+BMN9uATDfbgEw324BMN9uAQ/fTkFP305BT99OQU/fTkF")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_02qwi")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qwnlq"]
|
||||
resource_local_to_scene = true
|
||||
script = ExtResource("7_bf6dr")
|
||||
title = "ENEMY_DOG"
|
||||
description = "ENEMY_DESC_DOG"
|
||||
target_type = 1
|
||||
icon = ExtResource("11_xnj0i")
|
||||
scene = ExtResource("10_tlmxb")
|
||||
death_sprite = ExtResource("8_5e5s6")
|
||||
spawn_power = 3
|
||||
health = 60
|
||||
movement_speed = 1.6
|
||||
spawn_cooldown = 1.2
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_bf6dr"]
|
||||
viewport_path = NodePath("SubViewport2")
|
||||
|
||||
[sub_resource type="Animation" id="Animation_u47ok"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SubViewport2/Camera:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(),
|
||||
"transitions": PackedFloat32Array(),
|
||||
"update": 0,
|
||||
"values": []
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SubViewport2/Camera:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(),
|
||||
"transitions": PackedFloat32Array(),
|
||||
"update": 0,
|
||||
"values": []
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".:transition")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bf6dr"]
|
||||
resource_name = "level_select_camera"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("SubViewport2/Camera:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 2, 3),
|
||||
"transitions": PackedFloat32Array(1, 1.189207, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1.5566754, 0.15818101, -0.11609393), Vector3(0.6145027, 0.026614469, 0.1049245), Vector3(0.4818139, 0.019984554, 0.072412945)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("SubViewport2/Camera:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.0009999999, 2, 3),
|
||||
"transitions": PackedFloat32Array(1, 1.6245052, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.056555673, 1.7600856, -3.7312557e-09), Vector3(-0.048686683, 1.2257853, 0.0006891833), Vector3(-0.048686683, 1.2257853, 0.00068918336)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".:transition")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 3),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, 1.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_5e5s6"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_u47ok"),
|
||||
&"level_select_camera": SubResource("Animation_bf6dr")
|
||||
}
|
||||
|
||||
[node name="MainMenu" type="Node3D" unique_id=984017026 node_paths=PackedStringArray("level_parent", "widget_parent", "camera")]
|
||||
script = ExtResource("1_w3kbw")
|
||||
level_scene = ExtResource("2_kfofo")
|
||||
widget_scene = ExtResource("3_kfofo")
|
||||
level_parent = NodePath("LevelParent")
|
||||
widget_parent = NodePath("WidgetParent")
|
||||
camera = NodePath("SubViewport2/Camera")
|
||||
|
||||
[node name="Camera3D2" type="Camera3D" parent="." unique_id=374375141]
|
||||
transform = Transform3D(0.4555774, -0.46552664, 0.7587716, -0.043558143, 0.839686, 0.5413227, -0.88912994, -0.27966508, 0.36226448, 99.20114, 72.947174, 45.636845)
|
||||
cull_mask = 1047553
|
||||
fov = 22.5
|
||||
size = 43.57
|
||||
|
||||
[node name="GreenWireframe" type="SubViewport" parent="." unique_id=175663129]
|
||||
transparent_bg = true
|
||||
|
||||
[node name="ScreenWidget" type="Node3D" parent="GreenWireframe" unique_id=1457950745]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="GreenWireframe/ScreenWidget" unique_id=41454252]
|
||||
transform = Transform3D(0.45557746, -0.46552664, 0.7587717, -0.043558154, 0.839686, 0.5413227, -0.8891302, -0.27966496, 0.36226422, 99.20115, 72.94717, 45.636837)
|
||||
cull_mask = 1047560
|
||||
fov = 22.5
|
||||
size = 43.57
|
||||
|
||||
[node name="RedWireframe" type="SubViewport" parent="." unique_id=2071234738]
|
||||
transparent_bg = true
|
||||
|
||||
[node name="ScreenWidget" type="Node3D" parent="RedWireframe" unique_id=1934822115]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="RedWireframe/ScreenWidget" unique_id=623430347]
|
||||
transform = Transform3D(0.45557746, -0.46552664, 0.7587717, -0.043558154, 0.839686, 0.5413227, -0.8891302, -0.27966496, 0.36226422, 99.20115, 72.94717, 45.623333)
|
||||
cull_mask = 1047568
|
||||
fov = 22.5
|
||||
size = 43.57
|
||||
|
||||
[node name="FinalWireframe" type="SubViewport" parent="." unique_id=835362935]
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="FinalWireframe" unique_id=1593128902]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
texture = SubResource("ViewportTexture_345c2")
|
||||
|
||||
[node name="TextureRect2" type="TextureRect" parent="FinalWireframe" unique_id=2002250236]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
texture = SubResource("ViewportTexture_w857q")
|
||||
|
||||
[node name="SubViewport2" type="SubViewport" parent="." unique_id=1175246961]
|
||||
size = Vector2i(640, 360)
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="SubViewport2" unique_id=1255723463]
|
||||
transform = Transform3D(-0.1881609, -0.05551589, 0.9805678, -3.72529e-09, 0.99840117, 0.05652553, -0.9821382, 0.010635892, -0.18786003, 1.5566754, 0.15818101, -0.11609393)
|
||||
cull_mask = 1047553
|
||||
environment = SubResource("Environment_u47ok")
|
||||
fov = 30.219149
|
||||
near = 0.1
|
||||
far = 100.0
|
||||
|
||||
[node name="Cube" type="MeshInstance3D" parent="." unique_id=1889324323]
|
||||
transform = Transform3D(0.9332891, 0, -0.35912594, 0, 1, 0, 0.35912594, 0, 0.9332891, -0.021253854, 0, -0.11329776)
|
||||
mesh = SubResource("ArrayMesh_vgnnb")
|
||||
|
||||
[node name="crt" parent="." unique_id=1336417692 instance=ExtResource("2_75n78")]
|
||||
|
||||
[node name="Cube" parent="crt" index="0" unique_id=338342558]
|
||||
visible = false
|
||||
|
||||
[node name="Camera" parent="crt" index="1" unique_id=1494569047]
|
||||
cull_mask = 1047553
|
||||
|
||||
[node name="Cube_006" parent="crt" index="7" unique_id=1024162896]
|
||||
visible = false
|
||||
|
||||
[node name="Cube_007" parent="crt" index="8" unique_id=1406661328]
|
||||
visible = false
|
||||
|
||||
[node name="WidgetParent" type="Node3D" parent="." unique_id=712457526]
|
||||
|
||||
[node name="LevelParent" type="Node3D" parent="." unique_id=641558505]
|
||||
|
||||
[node name="Bridge" parent="LevelParent" unique_id=1906077552 instance=ExtResource("6_u47ok")]
|
||||
enemy_pool = Array[ExtResource("7_bf6dr")]([SubResource("Resource_qwnlq"), ExtResource("12_b1o6b"), ExtResource("13_wnrwu"), ExtResource("14_yipjp")])
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1871909436]
|
||||
|
||||
[node name="TextureRect2" type="TextureRect" parent="CanvasLayer" unique_id=486525668]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = SubResource("ViewportTexture_bf6dr")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1978184300]
|
||||
libraries/ = SubResource("AnimationLibrary_5e5s6")
|
||||
|
||||
[editable path="crt"]
|
||||
38
scenes/menus/alert_popup.tscn
Normal file
@@ -0,0 +1,38 @@
|
||||
[gd_scene format=3 uid="uid://6a277g802os0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://4uwd40mavufi" path="res://scripts/alert_popup.gd" id="1_cac03"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="2_2mbtt"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_veol0"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_2mbtt")
|
||||
|
||||
[node name="Control" type="PanelContainer" unique_id=1358708603]
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_cac03")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=262018832]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer" unique_id=1955868029]
|
||||
layout_mode = 2
|
||||
text = "Unable to connect to server"
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer" unique_id=573721072]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "OK"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=642000737]
|
||||
stream = SubResource("AudioStreamRandomizer_veol0")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="mouse_entered" from="VBoxContainer/Button" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_button_pressed"]
|
||||
55
scenes/menus/confirmation_popup.tscn
Normal file
@@ -0,0 +1,55 @@
|
||||
[gd_scene format=3 uid="uid://f46qh73hrk4y"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bjt72v1wym5ie" path="res://scripts/confirmation_popup.gd" id="1_x7akt"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="2_3w36n"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_22wuj"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_3w36n")
|
||||
|
||||
[node name="ConfirmationPopup" type="PanelContainer" unique_id=1165272278]
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -67.5
|
||||
offset_top = -30.5
|
||||
offset_right = 67.5
|
||||
offset_bottom = 30.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_x7akt")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1692009644]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer" unique_id=1306121466]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
text = "Some Text?"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer" unique_id=1948090750]
|
||||
layout_mode = 2
|
||||
alignment = 2
|
||||
|
||||
[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer" unique_id=2050991125]
|
||||
layout_mode = 2
|
||||
text = "Cancel"
|
||||
|
||||
[node name="Confirm" type="Button" parent="VBoxContainer/HBoxContainer" unique_id=830285956]
|
||||
layout_mode = 2
|
||||
text = "Confirm"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=195190349]
|
||||
stream = SubResource("AudioStreamRandomizer_22wuj")
|
||||
volume_db = -10.665
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="mouse_entered" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_cancel_pressed"]
|
||||
[connection signal="mouse_entered" from="VBoxContainer/HBoxContainer/Confirm" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Confirm" to="." method="_on_confirm_pressed"]
|
||||
72
scenes/menus/multiplayer_lobby.tscn
Normal file
@@ -0,0 +1,72 @@
|
||||
[gd_scene format=3 uid="uid://cwvprrvk4l2k0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvm4lyhx1uh0w" path="res://scripts/multiplayer_lobby.gd" id="2_nb860"]
|
||||
[ext_resource type="PackedScene" uid="uid://bvfit0sy2tnw4" path="res://scenes/menus/server_form.tscn" id="5_bqbwv"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddmg342ff2qaq" path="res://ui/chatbox.tscn" id="6_wtqwd"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="7_6mhre"]
|
||||
[ext_resource type="PackedScene" uid="uid://bc6m3cluulpis" path="res://ui/menus/CharacterSelect/character_select.tscn" id="7_kawp7"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_cwnde"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("7_6mhre")
|
||||
|
||||
[node name="multiplayer_lobby" type="Control" unique_id=473106326 node_paths=PackedStringArray("server_form", "audio_player")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("2_nb860")
|
||||
server_form = NodePath("ServerForm")
|
||||
character_select_screen = ExtResource("7_kawp7")
|
||||
audio_player = NodePath("AudioStreamPlayer")
|
||||
chatbox_scene = ExtResource("6_wtqwd")
|
||||
|
||||
[node name="ServerForm" parent="." unique_id=1466097634 instance=ExtResource("5_bqbwv")]
|
||||
layout_mode = 1
|
||||
offset_left = -151.0
|
||||
offset_top = -112.0
|
||||
offset_right = 151.0
|
||||
offset_bottom = 112.0
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=1774735888]
|
||||
stream = SubResource("AudioStreamRandomizer_cwnde")
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="." unique_id=1897046379]
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -6.0
|
||||
offset_top = -6.0
|
||||
offset_right = 6.0
|
||||
offset_bottom = 6.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer" unique_id=2052048593]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="FormTitle" type="Label" parent="PanelContainer/VBoxContainer" unique_id=626539239]
|
||||
layout_mode = 2
|
||||
text = "TITLE_PLAYER_LOBBY"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ReadyButton" type="Button" parent="PanelContainer/VBoxContainer" unique_id=7189097]
|
||||
layout_mode = 2
|
||||
text = "Ready"
|
||||
|
||||
[connection signal="connect_button_pressed" from="ServerForm" to="." method="connect_to_server"]
|
||||
[connection signal="host_button_pressed" from="ServerForm" to="." method="create_server"]
|
||||
[connection signal="mouse_entered" from="PanelContainer/VBoxContainer/ReadyButton" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="PanelContainer/VBoxContainer/ReadyButton" to="." method="ready_player"]
|
||||
116
scenes/menus/server_form.tscn
Normal file
@@ -0,0 +1,116 @@
|
||||
[gd_scene format=3 uid="uid://bvfit0sy2tnw4"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dyyhbd2pbfygi" path="res://scripts/server_form.gd" id="1_43oaq"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="2_hirre"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_3o7ni"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_hirre")
|
||||
|
||||
[node name="ServerForm" type="PanelContainer" unique_id=1145091654 node_paths=PackedStringArray("ip_entry", "port_entry", "host_button", "join_button", "ip_field", "port_field", "players_field", "start_button")]
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -81.0
|
||||
offset_top = -85.5
|
||||
offset_right = 81.0
|
||||
offset_bottom = 85.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_43oaq")
|
||||
ip_entry = NodePath("VBoxContainer/IPField/ServerIP")
|
||||
port_entry = NodePath("VBoxContainer/PortField/ServerPort")
|
||||
host_button = NodePath("VBoxContainer/ModeContainer/HostButton")
|
||||
join_button = NodePath("VBoxContainer/ModeContainer/JoinButton")
|
||||
ip_field = NodePath("VBoxContainer/IPField")
|
||||
port_field = NodePath("VBoxContainer/PortField")
|
||||
players_field = NodePath("VBoxContainer/PlayersField")
|
||||
start_button = NodePath("VBoxContainer/StartButton")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=561935001]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="BackButton" type="Button" parent="VBoxContainer" unique_id=569188032]
|
||||
layout_mode = 2
|
||||
text = "Back"
|
||||
|
||||
[node name="ModeContainer" type="VBoxContainer" parent="VBoxContainer" unique_id=412577610]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HostButton" type="Button" parent="VBoxContainer/ModeContainer" unique_id=631449156]
|
||||
layout_mode = 2
|
||||
text = "Host Game"
|
||||
|
||||
[node name="JoinButton" type="Button" parent="VBoxContainer/ModeContainer" unique_id=1935206321]
|
||||
layout_mode = 2
|
||||
text = "Join Game"
|
||||
|
||||
[node name="IPField" type="HBoxContainer" parent="VBoxContainer" unique_id=1725471186]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/IPField" unique_id=1622344831]
|
||||
layout_mode = 2
|
||||
text = "Server IP:"
|
||||
|
||||
[node name="ServerIP" type="LineEdit" parent="VBoxContainer/IPField" unique_id=2021046132]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "localhost"
|
||||
|
||||
[node name="PortField" type="HBoxContainer" parent="VBoxContainer" unique_id=803673382]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/PortField" unique_id=1598783998]
|
||||
layout_mode = 2
|
||||
text = "Server Port:"
|
||||
|
||||
[node name="ServerPort" type="LineEdit" parent="VBoxContainer/PortField" unique_id=1709303077]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "default"
|
||||
|
||||
[node name="PlayersField" type="HBoxContainer" parent="VBoxContainer" unique_id=1542923946]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/PlayersField" unique_id=1691764369]
|
||||
layout_mode = 2
|
||||
text = "Max Players"
|
||||
|
||||
[node name="HSlider" type="HSlider" parent="VBoxContainer/PlayersField" unique_id=1035713116]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 1
|
||||
max_value = 4.0
|
||||
value = 4.0
|
||||
tick_count = 5
|
||||
ticks_on_borders = true
|
||||
|
||||
[node name="Label2" type="Label" parent="VBoxContainer/PlayersField" unique_id=821854456]
|
||||
layout_mode = 2
|
||||
text = "4"
|
||||
|
||||
[node name="StartButton" type="Button" parent="VBoxContainer" unique_id=1563391807]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
text = "Start"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=698870317]
|
||||
stream = SubResource("AudioStreamRandomizer_3o7ni")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="mouse_entered" from="VBoxContainer/BackButton" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/BackButton" to="." method="_on_button_pressed"]
|
||||
[connection signal="mouse_entered" from="VBoxContainer/ModeContainer/HostButton" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/ModeContainer/HostButton" to="." method="_on_host_button_pressed"]
|
||||
[connection signal="mouse_entered" from="VBoxContainer/ModeContainer/JoinButton" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/ModeContainer/JoinButton" to="." method="_on_join_button_pressed"]
|
||||
[connection signal="value_changed" from="VBoxContainer/PlayersField/HSlider" to="." method="_on_h_slider_value_changed"]
|
||||
[connection signal="mouse_entered" from="VBoxContainer/StartButton" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/StartButton" to="." method="_on_start_button_pressed"]
|
||||
28
scenes/menus/singleplayer_lobby.tscn
Normal file
@@ -0,0 +1,28 @@
|
||||
[gd_scene format=3 uid="uid://176c6fuhg5ic"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://e5gf7hd5jsw3" path="res://scripts/singleplayer_lobby.gd" id="1_nd17k"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddmg342ff2qaq" path="res://ui/chatbox.tscn" id="3_l8xy3"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="6_6nu57"]
|
||||
[ext_resource type="PackedScene" uid="uid://bc6m3cluulpis" path="res://ui/menus/CharacterSelect/character_select.tscn" id="6_ltm04"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_g5har"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("6_6nu57")
|
||||
|
||||
[node name="singleplayer_lobby" type="Control" unique_id=1948631640 node_paths=PackedStringArray("audio_player")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_nd17k")
|
||||
character_select_screen = ExtResource("6_ltm04")
|
||||
audio_player = NodePath("AudioStreamPlayer")
|
||||
chatbox_scene = ExtResource("3_l8xy3")
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=1662384823]
|
||||
stream = SubResource("AudioStreamRandomizer_g5har")
|
||||
bus = &"SFX"
|
||||
42
scenes/menus/text_input_popup.tscn
Normal file
@@ -0,0 +1,42 @@
|
||||
[gd_scene format=3 uid="uid://dccsyymk4uko6"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b0asb3pmu8pqb" path="res://scripts/text_input_popup.gd" id="1_ve6eb"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://ui/drop_003.ogg" id="2_mec4u"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_w0x7l"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_mec4u")
|
||||
|
||||
[node name="TextInputPopup" type="PanelContainer" unique_id=601601243]
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -90.0
|
||||
offset_top = -35.0
|
||||
offset_right = 90.0
|
||||
offset_bottom = 35.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_ve6eb")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=868959961]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="VBoxContainer" unique_id=704296503]
|
||||
layout_mode = 2
|
||||
placeholder_text = "Dummy Text"
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer" unique_id=1043501287]
|
||||
layout_mode = 2
|
||||
text = "Confirm
|
||||
"
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=1455592164]
|
||||
stream = SubResource("AudioStreamRandomizer_w0x7l")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="mouse_entered" from="VBoxContainer/Button" to="." method="_on_button_mouse_entered"]
|
||||
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_button_pressed"]
|
||||
34
scenes/mixer/scn_mixer.tscn
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_scene format=3 uid="uid://c6isprnkaliqr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bpvmvx10q4ayd" path="res://scenes/mixer/scr_mixer.gd" id="1_q8doq"]
|
||||
[ext_resource type="PackedScene" uid="uid://bajli4d3nqwll" path="res://ui/menus/MixingMenu/track_editor.tscn" id="2_ibyhf"]
|
||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://scripts/interact_button.gd" id="2_mjah6"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ibyhf"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_78x4u"]
|
||||
size = Vector3(0.5, 0.5, 0.5)
|
||||
|
||||
[node name="RemixTable" type="StaticBody3D" unique_id=155375437 node_paths=PackedStringArray("button")]
|
||||
script = ExtResource("1_q8doq")
|
||||
remix_menu_scene = ExtResource("2_ibyhf")
|
||||
button = NodePath("StaticBody3D")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=512153260]
|
||||
shape = SubResource("BoxShape3D_ibyhf")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1398049834]
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=1526369567]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.524303, 0)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("2_mjah6")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=296240418]
|
||||
shape = SubResource("BoxShape3D_78x4u")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="StaticBody3D" unique_id=2047185618]
|
||||
size = Vector3(0.5, 0.5, 0.5)
|
||||
|
||||
[connection signal="button_interacted" from="StaticBody3D" to="." method="_on_static_body_3d_button_interacted"]
|
||||
37
scenes/mixer/scr_mixer.gd
Normal file
@@ -0,0 +1,37 @@
|
||||
class_name RemixTable
|
||||
extends StaticBody3D
|
||||
|
||||
@export var remix_menu_scene: PackedScene
|
||||
@export var button: InteractButton
|
||||
|
||||
var reply_player: Hero
|
||||
|
||||
func _ready() -> void:
|
||||
button.hover_text = tr("PROMPT_REMIX_INTERACT")
|
||||
|
||||
|
||||
func _on_static_body_3d_button_interacted(_value: int, callback: Hero) -> void:
|
||||
if callback.hand.size >= 1:
|
||||
reply_player = callback
|
||||
var menu: TrackEditor = remix_menu_scene.instantiate() as TrackEditor
|
||||
var cassette_array: Array[Cassette] = []
|
||||
for cassette: Cassette in callback.hand.contents:
|
||||
cassette_array.append(cassette)
|
||||
menu.hero = reply_player
|
||||
menu.set_money(reply_player.currency)
|
||||
menu.populate_feature_slots()
|
||||
menu.add_option(cassette_array)
|
||||
menu.cassettes_remixed.connect(output)
|
||||
menu.press_check_button(false)
|
||||
reply_player.pause()
|
||||
reply_player.hud.add_child(menu)
|
||||
|
||||
|
||||
func output(cassettes_to_remove: Array[Cassette], cassettes_to_add: Array[Cassette], amount_spent: int) -> void:
|
||||
for cassette: Cassette in cassettes_to_remove:
|
||||
reply_player.hand.contents.erase(cassette)
|
||||
reply_player.hud.hot_wheel.update_cassettes(reply_player.get_wheel_cassettes())
|
||||
for cassette: Cassette in cassettes_to_add:
|
||||
reply_player.add_cassette(cassette)
|
||||
reply_player.currency -= amount_spent
|
||||
reply_player.unpause()
|
||||
1
scenes/mixer/scr_mixer.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bpvmvx10q4ayd
|
||||
47
scenes/projectiles/explosive_projectile.tscn
Normal file
@@ -0,0 +1,47 @@
|
||||
[gd_scene format=3 uid="uid://7f4dfphgiswr"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8qjlgam6wuo0" path="res://scenes/projectiles/projectile.tscn" id="1_136w8"]
|
||||
[ext_resource type="Script" uid="uid://cubn2iabwg3" path="res://scripts/projectiles/explosive_projectile.gd" id="2_3adg2"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_ia31t"]
|
||||
offsets = PackedFloat32Array(0, 0.3, 0.681818, 1)
|
||||
colors = PackedColorArray(1, 0.733333, 0, 1, 0.780392, 0.0352941, 0, 0.921569, 0, 0, 0, 0.87451, 0, 0, 0, 0.301961)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_iertm"]
|
||||
gradient = SubResource("Gradient_ia31t")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_1wlqd"]
|
||||
spread = 180.0
|
||||
initial_velocity_min = 4.0
|
||||
initial_velocity_max = 4.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
damping_min = 2.0
|
||||
damping_max = 2.0
|
||||
color_ramp = SubResource("GradientTexture1D_iertm")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dqr5j"]
|
||||
transparency = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_5qmrv"]
|
||||
material = SubResource("StandardMaterial3D_dqr5j")
|
||||
size = Vector3(0.2, 0.2, 0.2)
|
||||
|
||||
[node name="ExplosiveProjectile" unique_id=1515091441 instance=ExtResource("1_136w8")]
|
||||
script = ExtResource("2_3adg2")
|
||||
explosion_range = 3.0
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer3D" parent="." index="2" unique_id=1138017970]
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="." index="3" unique_id=729922247]
|
||||
emitting = false
|
||||
amount = 80
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
process_material = SubResource("ParticleProcessMaterial_1wlqd")
|
||||
draw_pass_1 = SubResource("BoxMesh_5qmrv")
|
||||
|
||||
[connection signal="finished" from="AudioStreamPlayer" to="." method="_on_audio_stream_player_finished"]
|
||||
[connection signal="finished" from="GPUParticles3D" to="." method="_on_gpu_particles_3d_finished"]
|
||||
8
scenes/projectiles/homing_projectile.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://di2wwvkv4wov1"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://7f4dfphgiswr" path="res://scenes/projectiles/explosive_projectile.tscn" id="1_it3tw"]
|
||||
[ext_resource type="Script" uid="uid://dwr38fukjqu7r" path="res://scripts/projectiles/homing_projectile.gd" id="2_etdxg"]
|
||||
|
||||
[node name="HomingProjectile" unique_id=1704606199 instance=ExtResource("1_it3tw")]
|
||||
script = ExtResource("2_etdxg")
|
||||
explosion_range = 6.0
|
||||
24
scenes/projectiles/projectile.tscn
Normal file
@@ -0,0 +1,24 @@
|
||||
[gd_scene format=3 uid="uid://c8qjlgam6wuo0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bifvnevs5y4nj" path="res://scripts/projectiles/projectile.gd" id="1_k4v4y"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_fgj4t"]
|
||||
radius = 0.2
|
||||
|
||||
[node name="Projectile" type="RigidBody3D" unique_id=750354712 node_paths=PackedStringArray("collision_shape")]
|
||||
collision_layer = 0
|
||||
collision_mask = 5
|
||||
gravity_scale = 0.0
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 1
|
||||
script = ExtResource("1_k4v4y")
|
||||
collision_shape = NodePath("CollisionShape3D")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=255307928]
|
||||
shape = SubResource("SphereShape3D_fgj4t")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="." unique_id=1229445457]
|
||||
billboard = 1
|
||||
texture_filter = 0
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
8
scenes/projectiles/status_applying_projectile.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://beq6rn0babncg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://7f4dfphgiswr" path="res://scenes/projectiles/explosive_projectile.tscn" id="1_atrjq"]
|
||||
[ext_resource type="Script" uid="uid://ba2aqn82wo747" path="res://scripts/projectiles/status_applying_projectile.gd" id="2_4p44n"]
|
||||
|
||||
[node name="StatusApplyingProjectile" unique_id=290277616 instance=ExtResource("1_atrjq")]
|
||||
script = ExtResource("2_4p44n")
|
||||
status_stats = null
|
||||
45
scenes/seller/scn_seller.tscn
Normal file
@@ -0,0 +1,45 @@
|
||||
[gd_scene format=3 uid="uid://c2avjln5vmr0y"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cu11aknhwt2qc" path="res://scenes/seller/scr_seller.gd" id="1_diuqd"]
|
||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://scripts/interact_button.gd" id="1_toyr6"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_waypt"]
|
||||
albedo_color = Color(0.909804, 0.113725, 0.113725, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_o3ege"]
|
||||
albedo_color = Color(1, 0.498039, 0.0941176, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_yxwll"]
|
||||
size = Vector3(1, 1.1, 0.7)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_5mxpr"]
|
||||
size = Vector3(0.925, 0.3, 0.4)
|
||||
|
||||
[node name="Shredder" type="StaticBody3D" unique_id=9342411]
|
||||
script = ExtResource("1_diuqd")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=446453613]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 0)
|
||||
size = Vector3(1, 1.1, 0.7)
|
||||
material = SubResource("StandardMaterial3D_waypt")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGBox3D" unique_id=1468240847]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.58128, 0)
|
||||
operation = 2
|
||||
size = Vector3(0.8, 0.4, 0.2)
|
||||
material = SubResource("StandardMaterial3D_o3ege")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1315197581]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 0)
|
||||
shape = SubResource("BoxShape3D_yxwll")
|
||||
|
||||
[node name="InteractButton" type="StaticBody3D" parent="." unique_id=194468447]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.08506, 0)
|
||||
collision_layer = 16
|
||||
script = ExtResource("1_toyr6")
|
||||
hover_text = "[center]#Interact# to shred card"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractButton" unique_id=1441281150]
|
||||
shape = SubResource("BoxShape3D_5mxpr")
|
||||
|
||||
[connection signal="button_interacted" from="InteractButton" to="." method="_on_interact_button_button_interacted"]
|
||||
7
scenes/seller/scr_seller.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
class_name Shredder extends StaticBody3D
|
||||
|
||||
|
||||
func _on_interact_button_button_interacted(_value: int, callback: Hero) -> void:
|
||||
var cassette: Cassette = callback.inventory.remove_at(callback.inventory_selected_index) as Cassette
|
||||
callback.currency += 5 * (cassette.rarity + 1)
|
||||
callback.decrement_selected()
|
||||
1
scenes/seller/scr_seller.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cu11aknhwt2qc
|
||||
263
scenes/shop/scn_shop.tscn
Normal file
@@ -0,0 +1,263 @@
|
||||
[gd_scene format=3 uid="uid://7g3jev3v6d3l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://colk6js4wet11" path="res://scenes/shop/scr_shop.gd" id="1_4in53"]
|
||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://scripts/interact_button.gd" id="1_x8sts"]
|
||||
[ext_resource type="PackedScene" uid="uid://dsasunnk47n8o" path="res://scenes/item_cassette.tscn" id="2_qh00w"]
|
||||
[ext_resource type="PackedScene" uid="uid://dixtx38u4jhd7" path="res://ui/cassette_hand.tscn" id="3_u7x2f"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lhc2g"]
|
||||
albedo_color = Color(0.313726, 0.180392, 0.00392157, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tn6ej"]
|
||||
albedo_color = Color(0.313726, 0.180392, 0.00392157, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4tjcf"]
|
||||
albedo_color = Color(0.313726, 0.180392, 0.00392157, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_3a288"]
|
||||
size = Vector3(2.95542, 2.01704, 1.92446)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_txjtg"]
|
||||
size = Vector3(0.427765, 0.430664, 0.898926)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_3r1g8"]
|
||||
size = Vector3(0.69, 0.665, 0.34)
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_5mbfv"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_cfv1i"]
|
||||
viewport_path = NodePath("SubViewport2")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_1rey7"]
|
||||
viewport_path = NodePath("SubViewport3")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_rlwso"]
|
||||
viewport_path = NodePath("SubViewport4")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_a6401"]
|
||||
viewport_path = NodePath("SubViewport5")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_rnm0u"]
|
||||
viewport_path = NodePath("SubViewport6")
|
||||
|
||||
[node name="ShopStand" type="Node3D" unique_id=1287436541 node_paths=PackedStringArray("cards", "choice_colliders", "choice_buttons", "choice_sprites", "blank_button", "blank_button_collider", "blank_models")]
|
||||
script = ExtResource("1_4in53")
|
||||
cards = [NodePath("SubViewport/Node2D"), NodePath("SubViewport2/Node2D"), NodePath("SubViewport3/Node2D"), NodePath("SubViewport4/Node2D"), NodePath("SubViewport5/Node2D"), NodePath("SubViewport6/Node2D")]
|
||||
choice_colliders = [NodePath("InteractButton/CollisionShape3D"), NodePath("InteractButton2/CollisionShape3D2"), NodePath("InteractButton3/CollisionShape3D3"), NodePath("InteractButton6/CollisionShape3D6"), NodePath("InteractButton5/CollisionShape3D5"), NodePath("InteractButton4/CollisionShape3D4")]
|
||||
choice_buttons = [NodePath("InteractButton"), NodePath("InteractButton2"), NodePath("InteractButton3"), NodePath("InteractButton6"), NodePath("InteractButton5"), NodePath("InteractButton4")]
|
||||
choice_sprites = [NodePath("Sprites/Sprite3D"), NodePath("Sprites/Sprite3D2"), NodePath("Sprites/Sprite3D3"), NodePath("Sprites/Sprite3D4"), NodePath("Sprites/Sprite3D5"), NodePath("Sprites/Sprite3D6")]
|
||||
item_card_scene = ExtResource("2_qh00w")
|
||||
blank_button = NodePath("InteractButton7")
|
||||
blank_button_collider = NodePath("InteractButton7/CollisionShape3D")
|
||||
blank_models = [NodePath("CSGBox3D4"), NodePath("CSGBox3D5"), NodePath("CSGBox3D6"), NodePath("CSGBox3D7"), NodePath("CSGBox3D8")]
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1318214883]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.294425, 0, 0)
|
||||
size = Vector3(3.54787, 1, 1)
|
||||
material = SubResource("StandardMaterial3D_lhc2g")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="." unique_id=985592437]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.453776, -0.485039)
|
||||
size = Vector3(2.95902, 1, 1)
|
||||
material = SubResource("StandardMaterial3D_tn6ej")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="." unique_id=1018776620]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.491623, -0.927363)
|
||||
size = Vector3(2.95902, 1.96606, 1)
|
||||
material = SubResource("StandardMaterial3D_4tjcf")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=1128254914]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=5577448]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.502094, -0.465026)
|
||||
shape = SubResource("BoxShape3D_3a288")
|
||||
|
||||
[node name="InteractButton7" type="StaticBody3D" parent="." unique_id=1757807307]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.73285, 0.835364, 0.235621)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractButton7" unique_id=823738383]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0624237, -0.101074, -0.214111)
|
||||
shape = SubResource("BoxShape3D_txjtg")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton" type="StaticBody3D" parent="." unique_id=2043390372]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.08327, 0.835364, 0.235621)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractButton" unique_id=1008844636]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton2" type="StaticBody3D" parent="." unique_id=409716279]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0897942, 0.854733, 0.276212)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
button_press_value = 1
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="InteractButton2" unique_id=2089267741]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton3" type="StaticBody3D" parent="." unique_id=1438261967]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.982556, 0.839111, 0.270489)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
button_press_value = 2
|
||||
|
||||
[node name="CollisionShape3D3" type="CollisionShape3D" parent="InteractButton3" unique_id=934010889]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton4" type="StaticBody3D" parent="." unique_id=771110062]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.964396, 1.2947, -0.222282)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
button_press_value = 5
|
||||
|
||||
[node name="CollisionShape3D4" type="CollisionShape3D" parent="InteractButton4" unique_id=87223566]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton5" type="StaticBody3D" parent="." unique_id=1026319516]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0971891, 1.30596, -0.223896)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
button_press_value = 4
|
||||
|
||||
[node name="CollisionShape3D5" type="CollisionShape3D" parent="InteractButton5" unique_id=1157590590]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="InteractButton6" type="StaticBody3D" parent="." unique_id=757111681]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.01936, 1.30134, -0.249066)
|
||||
collision_layer = 16
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_x8sts")
|
||||
button_press_value = 3
|
||||
|
||||
[node name="CollisionShape3D6" type="CollisionShape3D" parent="InteractButton6" unique_id=224663904]
|
||||
shape = SubResource("BoxShape3D_3r1g8")
|
||||
disabled = true
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="." unique_id=801515313]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport" unique_id=1117068690 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="SubViewport2" type="SubViewport" parent="." unique_id=2121876296]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport2" unique_id=2001793470 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="SubViewport3" type="SubViewport" parent="." unique_id=1774810803]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport3" unique_id=1966107137 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="SubViewport4" type="SubViewport" parent="." unique_id=1209309422]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport4" unique_id=251514880 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="SubViewport5" type="SubViewport" parent="." unique_id=464148156]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport5" unique_id=744193440 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="SubViewport6" type="SubViewport" parent="." unique_id=632925405]
|
||||
transparent_bg = true
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Node2D" parent="SubViewport6" unique_id=1640978035 instance=ExtResource("3_u7x2f")]
|
||||
|
||||
[node name="Sprites" type="Node3D" parent="." unique_id=2065838295]
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Sprites" unique_id=2020241299]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.05174, 0.845052, 0.31035)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_5mbfv")
|
||||
|
||||
[node name="Sprite3D2" type="Sprite3D" parent="Sprites" unique_id=14769278]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0552108, 0.842029, 0.32352)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_cfv1i")
|
||||
|
||||
[node name="Sprite3D3" type="Sprite3D" parent="Sprites" unique_id=519578707]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.02516, 0.816916, 0.304008)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_1rey7")
|
||||
|
||||
[node name="Sprite3D4" type="Sprite3D" parent="Sprites" unique_id=2109735455]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.947595, 1.28234, -0.191499)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_rlwso")
|
||||
|
||||
[node name="Sprite3D5" type="Sprite3D" parent="Sprites" unique_id=559650869]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0401761, 1.28234, -0.191499)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_a6401")
|
||||
|
||||
[node name="Sprite3D6" type="Sprite3D" parent="Sprites" unique_id=312809326]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.0227, 1.28234, -0.191499)
|
||||
visible = false
|
||||
pixel_size = 0.0015
|
||||
texture_filter = 0
|
||||
texture = SubResource("ViewportTexture_rnm0u")
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="." unique_id=844039360]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.236721)
|
||||
visible = false
|
||||
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="." unique_id=2110804170]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.14049)
|
||||
visible = false
|
||||
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="." unique_id=71961612]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.0426871)
|
||||
visible = false
|
||||
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="." unique_id=1872581565]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, -0.0568752)
|
||||
visible = false
|
||||
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||
|
||||
[node name="CSGBox3D8" type="CSGBox3D" parent="." unique_id=433292911]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, -0.151894)
|
||||
visible = false
|
||||
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||
|
||||
[connection signal="button_interacted" from="InteractButton7" to="." method="retrieve_blank"]
|
||||
[connection signal="button_interacted" from="InteractButton" to="." method="retrieve_card"]
|
||||
[connection signal="button_interacted" from="InteractButton2" to="." method="retrieve_card"]
|
||||
[connection signal="button_interacted" from="InteractButton3" to="." method="retrieve_card"]
|
||||
[connection signal="button_interacted" from="InteractButton4" to="." method="retrieve_card"]
|
||||
[connection signal="button_interacted" from="InteractButton5" to="." method="retrieve_card"]
|
||||
[connection signal="button_interacted" from="InteractButton6" to="." method="retrieve_card"]
|
||||
129
scenes/shop/scr_shop.gd
Normal file
@@ -0,0 +1,129 @@
|
||||
class_name ShopStand extends Node3D
|
||||
|
||||
@export var cassettes: Array[CassetteInHand]
|
||||
@export var choice_colliders: Array[CollisionShape3D]
|
||||
@export var choice_buttons: Array[InteractButton]
|
||||
@export var choice_sprites: Array[Sprite3D]
|
||||
@export var item_card_scene: PackedScene
|
||||
@export var blank_button: InteractButton
|
||||
@export var blank_button_collider: CollisionShape3D
|
||||
@export var blank_models: Array[CSGBox3D]
|
||||
|
||||
var price_dict: Dictionary = {
|
||||
Data.Rarity.UNCOMMON : 25,
|
||||
Data.Rarity.RARE : 40,
|
||||
Data.Rarity.EPIC : 60,
|
||||
Data.Rarity.LEGENDARY : 85,
|
||||
}
|
||||
|
||||
var cards_generated: int = 0
|
||||
var blanks_available: int = 5
|
||||
var blank_cost: int = 20
|
||||
var buy_blank_prompt: String = "PROMPT_BUY_BLANK"
|
||||
var buy_card_prompt: String = "PROMPT_BUY_CARD"
|
||||
var shops_generated: int = 0
|
||||
|
||||
|
||||
func close() -> void:
|
||||
for x: CollisionShape3D in choice_colliders:
|
||||
x.disabled = true
|
||||
for x: Sprite3D in choice_sprites:
|
||||
x.visible = false
|
||||
for x: CSGBox3D in blank_models:
|
||||
x.visible = false
|
||||
blank_button_collider.disabled = true
|
||||
|
||||
|
||||
func randomize_cards() -> void:
|
||||
blanks_available = 5
|
||||
var unlocked_classes: Array[HeroClass] = Data.save_data.get_unlocked_classes()
|
||||
var faction_choices: Array[Cassette.Role]
|
||||
for hero: HeroClass in unlocked_classes:
|
||||
if !faction_choices.has(hero.role):
|
||||
faction_choices.append(hero.role)
|
||||
var random_faction: int = NoiseRandom.randi_in_range(shops_generated, 0, faction_choices.size() - 1)
|
||||
shops_generated += 1
|
||||
var cheap_cards: Array[Cassette] = []
|
||||
var medium_cards: Array[Cassette] = []
|
||||
var pricey_cards: Array[Cassette] = []
|
||||
for cassette: Cassette in Data.cassettes:
|
||||
if cassette.role != random_faction:
|
||||
continue
|
||||
if cassette.rarity == Data.Rarity.UNCOMMON or cassette.rarity == Data.Rarity.RARE:
|
||||
cheap_cards.append(cassette)
|
||||
if cassette.rarity == Data.Rarity.RARE or cassette.rarity == Data.Rarity.EPIC:
|
||||
medium_cards.append(cassette)
|
||||
if cassette.rarity == Data.Rarity.EPIC or cassette.rarity == Data.Rarity.LEGENDARY:
|
||||
pricey_cards.append(cassette)
|
||||
|
||||
var chosen_card: Cassette = null
|
||||
for x: int in 3:
|
||||
if cheap_cards.size() > 0:
|
||||
chosen_card = cheap_cards[NoiseRandom.randi_in_range(12 * cards_generated, 0, cheap_cards.size() - 1)]
|
||||
cards_generated += 1
|
||||
if chosen_card != null:
|
||||
cassettes[x].set_card(chosen_card)
|
||||
cassettes[x].view_tower()
|
||||
choice_buttons[x].press_cost = price_dict[chosen_card.rarity]
|
||||
choice_buttons[x].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
|
||||
if chosen_card.role == Cassette.Role.MAGE:
|
||||
Data.save_data.saw_mage_card_in_shop()
|
||||
for x: int in 2:
|
||||
if medium_cards.size() > 0:
|
||||
chosen_card = medium_cards[NoiseRandom.randi_in_range(9 * cards_generated, 0, medium_cards.size() - 1)]
|
||||
elif cheap_cards.size() > 0:
|
||||
chosen_card = cheap_cards[NoiseRandom.randi_in_range(9 * cards_generated, 0, cheap_cards.size() - 1)]
|
||||
cards_generated += 1
|
||||
if chosen_card != null:
|
||||
cassettes[x+3].set_card(chosen_card)
|
||||
cassettes[x+3].view_tower()
|
||||
choice_buttons[x+3].press_cost = price_dict[chosen_card.rarity]
|
||||
choice_buttons[x+3].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
|
||||
if chosen_card.role == Cassette.Role.MAGE:
|
||||
Data.save_data.saw_mage_card_in_shop()
|
||||
for x: int in 1:
|
||||
if pricey_cards.size() > 0:
|
||||
chosen_card = pricey_cards[NoiseRandom.randi_in_range(50 * cards_generated, 0, pricey_cards.size() - 1)]
|
||||
elif medium_cards.size() > 0:
|
||||
chosen_card = medium_cards[NoiseRandom.randi_in_range(50 * cards_generated, 0, medium_cards.size() - 1)]
|
||||
elif cheap_cards.size() > 0:
|
||||
chosen_card = cheap_cards[NoiseRandom.randi_in_range(50 * cards_generated, 0, cheap_cards.size() - 1)]
|
||||
cards_generated += 1
|
||||
if chosen_card != null:
|
||||
cassettes[x+5].set_card(chosen_card)
|
||||
cassettes[x+5].view_tower()
|
||||
choice_buttons[x+5].press_cost = price_dict[chosen_card.rarity]
|
||||
choice_buttons[x+5].hover_text = tr(buy_card_prompt).format({Card_Name = tr(chosen_card.display_name), Card_Cost = str(price_dict[chosen_card.rarity])})
|
||||
if chosen_card.role == Cassette.Role.MAGE:
|
||||
Data.save_data.saw_mage_card_in_shop()
|
||||
for x: CollisionShape3D in choice_colliders:
|
||||
x.set_deferred("disabled", false)
|
||||
for x: Sprite3D in choice_sprites:
|
||||
x.visible = true
|
||||
for x: CSGBox3D in blank_models:
|
||||
x.visible = true
|
||||
blank_button_collider.set_deferred("disabled", false)
|
||||
blank_button.hover_text = tr(buy_blank_prompt).format({Blank_Cost = str(blank_cost)})
|
||||
|
||||
|
||||
func retrieve_card(i: int, callback: Hero) -> void:
|
||||
if callback.currency >= price_dict[cassettes[i].stats.rarity]:
|
||||
choice_colliders[i].disabled = true
|
||||
choice_sprites[i].set_visible(false)
|
||||
var cassette: Cassette = cassettes[i].stats
|
||||
if cassette.role == Cassette.Role.ENGINEER:
|
||||
Data.save_data.bought_engineer_card()
|
||||
if cassette.role == Cassette.Role.MAGE:
|
||||
Data.save_data.bought_mage_card()
|
||||
callback.currency -= price_dict[cassettes[i].stats.rarity]
|
||||
callback.add_card(cassette)
|
||||
|
||||
|
||||
func retrieve_blank(_i: int, callback: Hero) -> void:
|
||||
if callback.currency >= blank_cost:
|
||||
blank_models[5 - blanks_available].visible = false
|
||||
blanks_available -= 1
|
||||
callback.currency -= blank_cost
|
||||
callback.blank_cassettes += 1
|
||||
if blanks_available == 0:
|
||||
blank_button_collider.disabled = true
|
||||
1
scenes/shop/scr_shop.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://colk6js4wet11
|
||||
108
scenes/tower_base/dissolve.tres
Normal file
@@ -0,0 +1,108 @@
|
||||
[gd_resource type="VisualShader" format=3 uid="uid://dsi0ofa74tfc4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bmor4v4j7krgh" path="res://scenes/tower_base/funboxtex.png" id="1_kau30"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4ytjp05u7auv" path="res://noisetex.tres" id="2_ow168"]
|
||||
|
||||
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_ugjxq"]
|
||||
source = 5
|
||||
texture = ExtResource("1_kau30")
|
||||
|
||||
[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_hqcdo"]
|
||||
parameter_name = "Texture2DParameter"
|
||||
texture_type = 1
|
||||
texture_filter = 1
|
||||
|
||||
[sub_resource type="VisualShaderNodeColorParameter" id="VisualShaderNodeColorParameter_rwgpq"]
|
||||
output_port_for_preview = 0
|
||||
expanded_output_ports = [0]
|
||||
parameter_name = "Color"
|
||||
default_value_enabled = true
|
||||
default_value = Color(0, 1, 0, 0.752941)
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_g2jnk"]
|
||||
output_port_for_preview = 0
|
||||
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
|
||||
op_type = 2
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_ddxtc"]
|
||||
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
|
||||
expanded_output_ports = [0]
|
||||
op_type = 2
|
||||
operator = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_nxokf"]
|
||||
output_port_for_preview = 0
|
||||
input_name = "uv"
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorFunc" id="VisualShaderNodeVectorFunc_lymyr"]
|
||||
output_port_for_preview = 0
|
||||
default_input_values = [0, Quaternion(0, 0, 0, 0)]
|
||||
op_type = 2
|
||||
function = 32
|
||||
|
||||
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_s08rr"]
|
||||
output_port_for_preview = 4
|
||||
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
|
||||
expanded_output_ports = [0]
|
||||
op_type = 2
|
||||
|
||||
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_8utgl"]
|
||||
parameter_name = "Float"
|
||||
default_value_enabled = true
|
||||
default_value = 1.0
|
||||
|
||||
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_pyn4g"]
|
||||
function = 31
|
||||
|
||||
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_pw0qj"]
|
||||
default_input_values = [0, 0.0, 1, 0.5]
|
||||
operator = 1
|
||||
|
||||
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_4c6mr"]
|
||||
output_port_for_preview = 0
|
||||
texture = ExtResource("2_ow168")
|
||||
|
||||
[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_v8kd6"]
|
||||
output_port_for_preview = 0
|
||||
operator = 1
|
||||
|
||||
[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_h0gpf"]
|
||||
output_port_for_preview = 0
|
||||
function = 15
|
||||
|
||||
[resource]
|
||||
modes/depth_draw = 1
|
||||
flags/depth_prepass_alpha = true
|
||||
preview_params/Texture2DParameter = "Resource(\"uid://bmor4v4j7krgh\", \"res://scenes/tower_base/funboxtex.png\")"
|
||||
preview_params/Float = "1.0"
|
||||
nodes/fragment/0/position = Vector2(1220, 280)
|
||||
nodes/fragment/2/node = SubResource("VisualShaderNodeInput_nxokf")
|
||||
nodes/fragment/2/position = Vector2(-580, 180)
|
||||
nodes/fragment/5/node = SubResource("VisualShaderNodeFloatOp_pw0qj")
|
||||
nodes/fragment/5/position = Vector2(-500, 440)
|
||||
nodes/fragment/7/node = SubResource("VisualShaderNodeTexture_4c6mr")
|
||||
nodes/fragment/7/position = Vector2(-280, 20)
|
||||
nodes/fragment/8/node = SubResource("VisualShaderNodeFloatOp_v8kd6")
|
||||
nodes/fragment/8/position = Vector2(-60, 340)
|
||||
nodes/fragment/9/node = SubResource("VisualShaderNodeFloatFunc_h0gpf")
|
||||
nodes/fragment/9/position = Vector2(140, 360)
|
||||
nodes/fragment/13/node = SubResource("VisualShaderNodeTexture_ugjxq")
|
||||
nodes/fragment/13/position = Vector2(260, 120)
|
||||
nodes/fragment/14/node = SubResource("VisualShaderNodeTexture2DParameter_hqcdo")
|
||||
nodes/fragment/14/position = Vector2(-60, -240)
|
||||
nodes/fragment/15/node = SubResource("VisualShaderNodeColorParameter_rwgpq")
|
||||
nodes/fragment/15/position = Vector2(20, 1040)
|
||||
nodes/fragment/18/node = SubResource("VisualShaderNodeVectorOp_g2jnk")
|
||||
nodes/fragment/18/position = Vector2(500, 340)
|
||||
nodes/fragment/19/node = SubResource("VisualShaderNodeVectorOp_ddxtc")
|
||||
nodes/fragment/19/position = Vector2(600, 740)
|
||||
nodes/fragment/21/node = SubResource("VisualShaderNodeVectorFunc_lymyr")
|
||||
nodes/fragment/21/position = Vector2(360, 660)
|
||||
nodes/fragment/22/node = SubResource("VisualShaderNodeVectorOp_s08rr")
|
||||
nodes/fragment/22/position = Vector2(900.954, 607.998)
|
||||
nodes/fragment/23/node = SubResource("VisualShaderNodeFloatParameter_8utgl")
|
||||
nodes/fragment/23/position = Vector2(-1000, 460)
|
||||
nodes/fragment/24/node = SubResource("VisualShaderNodeFloatFunc_pyn4g")
|
||||
nodes/fragment/24/position = Vector2(-700, 460)
|
||||
nodes/fragment/connections = PackedInt32Array(2, 0, 7, 0, 14, 0, 13, 2, 8, 0, 9, 0, 9, 0, 18, 1, 9, 0, 21, 0, 15, 0, 19, 1, 21, 0, 19, 0, 18, 0, 22, 0, 19, 0, 22, 1, 22, 0, 0, 0, 22, 4, 0, 1, 13, 0, 18, 0, 7, 0, 8, 0, 5, 0, 8, 1, 23, 0, 24, 0, 24, 0, 5, 0)
|
||||
BIN
scenes/tower_base/funbox.glb
Normal file
61
scenes/tower_base/funbox.glb.import
Normal file
@@ -0,0 +1,61 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dx0ixlcxcxpcg"
|
||||
path="res://.godot/imported/funbox.glb-e5bfe7f22d86c8fa124149fe4c0bd038.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/tower_base/funbox.glb"
|
||||
dest_files=["res://.godot/imported/funbox.glb-e5bfe7f22d86c8fa124149fe4c0bd038.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type="Node3D"
|
||||
nodes/root_name="Scene Root"
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "",
|
||||
"use_external/path": "uid://dsi0ofa74tfc4"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"funbox_Cube_001": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 60.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://textmesh.res",
|
||||
"save_to_file/path": "uid://b03auioc2qr1c"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=0
|
||||
gltf/embedded_image_handling=0
|
||||
BIN
scenes/tower_base/funboxtex.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
40
scenes/tower_base/funboxtex.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bmor4v4j7krgh"
|
||||
path="res://.godot/imported/funboxtex.png-e1520a74fba83a0ab5c6fc133bfb062a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/tower_base/funboxtex.png"
|
||||
dest_files=["res://.godot/imported/funboxtex.png-e1520a74fba83a0ab5c6fc133bfb062a.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=true
|
||||
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=0
|
||||
12
scenes/tower_base/new_shader_material.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://bi0grduhgdma4"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dsi0ofa74tfc4" path="res://scenes/tower_base/dissolve.tres" id="1_id1v3"]
|
||||
[ext_resource type="Texture2D" uid="uid://bmor4v4j7krgh" path="res://scenes/tower_base/funboxtex.png" id="2_8kmo6"]
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_id1v3")
|
||||
shader_parameter/Texture2DParameter = ExtResource("2_8kmo6")
|
||||
shader_parameter/Float = 1.0
|
||||
shader_parameter/Color = Color(0, 1, 0, 0.752941)
|
||||
BIN
scenes/tower_base/textmesh.res
Normal file
BIN
scenes/tower_base/textmesh.res.depren
Normal file
78
scenes/tower_base/tower_base.gd
Normal file
@@ -0,0 +1,78 @@
|
||||
class_name TowerBase extends StaticBody3D
|
||||
|
||||
@export var inventory: Inventory
|
||||
@export var block: Node3D
|
||||
@export var collider: CollisionShape3D
|
||||
@export var minimap_icon: Sprite3D
|
||||
@export var duration_label: Label
|
||||
@export var duration_sprites: Array[Sprite3D] = []
|
||||
|
||||
var game_manager: GameManager
|
||||
var owner_id: int
|
||||
var point: FlowNodeData
|
||||
var tower: Tower = null
|
||||
var has_cassette: bool :
|
||||
set(_value):
|
||||
return
|
||||
get:
|
||||
return inventory.size != 0
|
||||
var duration: int = 0 :
|
||||
set(value):
|
||||
duration = value
|
||||
duration_label.text = str(value)
|
||||
get():
|
||||
return duration
|
||||
|
||||
|
||||
func set_color(color: Color) -> void:
|
||||
$MeshInstance3D.material_override.set("shader_parameter/Color", color)
|
||||
|
||||
|
||||
func set_float(value: float) -> void:
|
||||
$MeshInstance3D.material_override.set("shader_parameter/Float", value)
|
||||
|
||||
|
||||
@rpc("reliable", "call_local", "any_peer")
|
||||
func networked_spawn_tower(cassette_index: int, caller_id: int) -> void:
|
||||
var cassette: Cassette = Data.cassattes[cassette_index]
|
||||
inventory.add(cassette)
|
||||
tower = inventory.item_at(0).turret_scene.instantiate() as Tower
|
||||
tower.stats = inventory.item_at(0).tower_stats
|
||||
tower.name = "tower"
|
||||
tower.base_name = name
|
||||
tower.owner_id = caller_id
|
||||
tower.position = Vector3(0, 1.2, 0)
|
||||
minimap_icon.modulate = Color.RED
|
||||
duration = 999
|
||||
add_child(tower)
|
||||
|
||||
|
||||
@rpc("reliable", "call_local", "any_peer")
|
||||
func networked_remove_tower() -> void:
|
||||
var cassette: Cassette = inventory.remove_at(0)
|
||||
if !game_manager.cassette_gameplay:
|
||||
game_manager.connected_players_nodes[tower.owner_id].add_cassette(cassette)
|
||||
game_manager.connected_players_nodes[tower.owner_id].unready_self()
|
||||
tower.queue_free()
|
||||
tower = null
|
||||
minimap_icon.modulate = Color.GREEN
|
||||
|
||||
|
||||
func toggle_collision() -> void:
|
||||
collider.disabled = !collider.disabled
|
||||
|
||||
|
||||
func iterate_duration() -> void:
|
||||
duration -= 1
|
||||
if duration <= 0:
|
||||
networked_remove_tower.rpc()
|
||||
|
||||
|
||||
func enable_duration_sprites() -> void:
|
||||
for sprite: Sprite3D in duration_sprites:
|
||||
sprite.visible = true
|
||||
|
||||
|
||||
func disable_duration_sprites() -> void:
|
||||
for sprite: Sprite3D in duration_sprites:
|
||||
sprite.visible = false
|
||||
1
scenes/tower_base/tower_base.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://si58bm4r7r2i
|
||||
81
scenes/tower_base/tower_base.tscn
Normal file
@@ -0,0 +1,81 @@
|
||||
[gd_scene format=3 uid="uid://ddbbwx0yy16lh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://si58bm4r7r2i" path="res://scenes/tower_base/tower_base.gd" id="1_kalmg"]
|
||||
[ext_resource type="Script" uid="uid://do24iuot0j7d7" path="res://scripts/inventory.gd" id="2_m0oxx"]
|
||||
[ext_resource type="Material" uid="uid://bi0grduhgdma4" path="res://scenes/tower_base/new_shader_material.tres" id="3_ueedj"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://cm5xjp442ew0y" path="res://scenes/tower_base/textmesh.res" id="4_8j8ue"]
|
||||
[ext_resource type="Texture2D" uid="uid://ba85u6i558x4w" path="res://assets/textures/minimap_node.png" id="4_lbvtm"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lc72v"]
|
||||
size = Vector3(1.381, 1.377, 1.381)
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_ueedj"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
|
||||
[node name="TowerBase" type="StaticBody3D" unique_id=532233532 node_paths=PackedStringArray("inventory", "block", "collider", "minimap_icon", "duration_label", "duration_sprites") groups=["TowerBases"]]
|
||||
collision_layer = 17
|
||||
script = ExtResource("1_kalmg")
|
||||
inventory = NodePath("Inventory")
|
||||
block = NodePath("MeshInstance3D")
|
||||
collider = NodePath("CollisionShape3D")
|
||||
minimap_icon = NodePath("MinimapIcon")
|
||||
duration_label = NodePath("SubViewport/Label")
|
||||
duration_sprites = [NodePath("Sprite3D"), NodePath("Sprite3D2"), NodePath("Sprite3D3"), NodePath("Sprite3D4")]
|
||||
|
||||
[node name="Inventory" type="Node" parent="." unique_id=807552257]
|
||||
script = ExtResource("2_m0oxx")
|
||||
max_size = 1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=672031336]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.688315, 0.00199121)
|
||||
shape = SubResource("BoxShape3D_lc72v")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=199619411]
|
||||
material_override = ExtResource("3_ueedj")
|
||||
mesh = ExtResource("4_8j8ue")
|
||||
|
||||
[node name="MinimapIcon" type="Sprite3D" parent="." unique_id=1466057781]
|
||||
transform = Transform3D(3.5, 0, 0, 0, -1.5299e-07, 3.5, 0, -3.5, -1.5299e-07, 0, 1.5, 0)
|
||||
layers = 4
|
||||
modulate = Color(0, 1, 0, 1)
|
||||
texture_filter = 0
|
||||
texture = ExtResource("4_lbvtm")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="." unique_id=2044772662]
|
||||
transparent_bg = true
|
||||
size = Vector2i(128, 128)
|
||||
|
||||
[node name="Label" type="Label" parent="SubViewport" unique_id=127602290]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 128
|
||||
text = "4"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="." unique_id=1053333852]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0.6)
|
||||
visible = false
|
||||
double_sided = false
|
||||
texture = SubResource("ViewportTexture_ueedj")
|
||||
|
||||
[node name="Sprite3D2" type="Sprite3D" parent="." unique_id=1767748410]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 2, -0.6)
|
||||
visible = false
|
||||
double_sided = false
|
||||
texture = SubResource("ViewportTexture_ueedj")
|
||||
|
||||
[node name="Sprite3D3" type="Sprite3D" parent="." unique_id=733247947]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.6, 2, 0)
|
||||
visible = false
|
||||
double_sided = false
|
||||
texture = SubResource("ViewportTexture_ueedj")
|
||||
|
||||
[node name="Sprite3D4" type="Sprite3D" parent="." unique_id=1214585597]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -0.6, 2, 0)
|
||||
visible = false
|
||||
double_sided = false
|
||||
texture = SubResource("ViewportTexture_ueedj")
|
||||
43
scenes/tower_frame.tscn
Normal file
@@ -0,0 +1,43 @@
|
||||
[gd_scene format=3 uid="uid://c2cpc8f0l7soh"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ba85u6i558x4w" path="res://assets/textures/minimap_node.png" id="1_phew5"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xt3aj"]
|
||||
albedo_color = Color(0.356863, 0.87451, 0.94902, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gbm1j"]
|
||||
albedo_color = Color(0.356863, 0.87451, 0.94902, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_18qg8"]
|
||||
albedo_color = Color(0.356863, 0.87451, 0.94902, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ip8b2"]
|
||||
albedo_color = Color(0.356863, 0.87451, 0.94902, 1)
|
||||
|
||||
[node name="Node3D" type="Node3D" unique_id=1287204221]
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="." unique_id=262480766]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, 0.625)
|
||||
size = Vector3(1.25, 0.04, 0.05)
|
||||
material = SubResource("StandardMaterial3D_xt3aj")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="." unique_id=633221520]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, -0.625)
|
||||
size = Vector3(1.25, 0.04, 0.05)
|
||||
material = SubResource("StandardMaterial3D_gbm1j")
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="." unique_id=915532125]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.625, 0.02, 0)
|
||||
size = Vector3(0.05, 0.04, 1.3)
|
||||
material = SubResource("StandardMaterial3D_18qg8")
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="." unique_id=781808395]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.625, 0.02, 0)
|
||||
size = Vector3(0.05, 0.04, 1.3)
|
||||
material = SubResource("StandardMaterial3D_ip8b2")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="." unique_id=158460348]
|
||||
transform = Transform3D(4, 0, 0, 0, -1.74846e-07, 4, 0, -4, -1.74846e-07, 0, 0, 0)
|
||||
layers = 4
|
||||
texture_filter = 0
|
||||
texture = ExtResource("1_phew5")
|
||||
65
scenes/towers/area_tower.tscn
Normal file
@@ -0,0 +1,65 @@
|
||||
[gd_scene format=3 uid="uid://kioik38usbqj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ct24fjmc1ptd6" path="res://towers/tower.gd" id="1_6jyob"]
|
||||
[ext_resource type="Script" uid="uid://rvnacmxsrh4w" path="res://scripts/target_finder.gd" id="2_e7wkg"]
|
||||
[ext_resource type="Script" uid="uid://duvfverjdqodj" path="res://scripts/affectors/area_affector.gd" id="3_u832u"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_vk4a8"]
|
||||
resource_name = "shoot"
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_cebsq"]
|
||||
_data = {
|
||||
&"shoot": SubResource("Animation_vk4a8")
|
||||
}
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_42byu"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1ucq4"]
|
||||
transparency = 1
|
||||
cull_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0, 0.415686, 0.223529)
|
||||
|
||||
[node name="Tower" type="Node3D" unique_id=462431540 node_paths=PackedStringArray("target_finder", "affector", "animator", "pitch_model", "yaw_model", "range_indicator", "audio_player")]
|
||||
script = ExtResource("1_6jyob")
|
||||
target_finder = NodePath("TargetFinder")
|
||||
affector = NodePath("AreaAffector")
|
||||
animator = NodePath("AnimationPlayer")
|
||||
pitch_model = NodePath("Pitch")
|
||||
yaw_model = NodePath("Yaw")
|
||||
range_indicator = NodePath("CSGSphere3D")
|
||||
audio_player = NodePath("Yaw/AudioStreamPlayer3D")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=935470152]
|
||||
libraries/ = SubResource("AnimationLibrary_cebsq")
|
||||
|
||||
[node name="Pitch" type="MeshInstance3D" parent="." unique_id=1225654056]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_42byu")
|
||||
|
||||
[node name="Yaw" type="MeshInstance3D" parent="." unique_id=1867477]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_42byu")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Yaw" unique_id=402668034]
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="MinimapIcon" type="Sprite3D" parent="." unique_id=1452391736]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
layers = 4
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="." unique_id=1039990115]
|
||||
visible = false
|
||||
layers = 5
|
||||
radius = 10.0
|
||||
radial_segments = 16
|
||||
rings = 16
|
||||
material = SubResource("StandardMaterial3D_1ucq4")
|
||||
|
||||
[node name="TargetFinder" type="Node" parent="." unique_id=1954544832 node_paths=PackedStringArray("tower")]
|
||||
script = ExtResource("2_e7wkg")
|
||||
tower = NodePath("..")
|
||||
max_targets = 0
|
||||
|
||||
[node name="AreaAffector" type="Node" parent="." unique_id=1048310301]
|
||||
script = ExtResource("3_u832u")
|
||||
10
scenes/towers/direct_affect_tower.tscn
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_scene format=3 uid="uid://43vmeyuurqfs"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bvqu1heobgboe" path="res://scenes/towers/tower.tscn" id="1_rp4eu"]
|
||||
[ext_resource type="Script" uid="uid://8d0a4uc2i0ti" path="res://scripts/affectors/direct_affect.gd" id="2_f7mf6"]
|
||||
|
||||
[node name="DirectAffectTower" unique_id=49384709 node_paths=PackedStringArray("affector") instance=ExtResource("1_rp4eu")]
|
||||
affector = NodePath("DirectAffect")
|
||||
|
||||
[node name="DirectAffect" type="Node" parent="." index="6" unique_id=1279134293]
|
||||
script = ExtResource("2_f7mf6")
|
||||
12
scenes/towers/projectile_tower.tscn
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_scene format=3 uid="uid://bidr1m71pajma"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bvqu1heobgboe" path="res://scenes/towers/tower.tscn" id="1_p8i8e"]
|
||||
[ext_resource type="Script" uid="uid://ccu1u6nqkjxki" path="res://scripts/affectors/spawn_affect.gd" id="2_d8uyp"]
|
||||
|
||||
[node name="ProjectileTower" unique_id=2093418902 node_paths=PackedStringArray("affector") instance=ExtResource("1_p8i8e")]
|
||||
affector = NodePath("SpawnAffect")
|
||||
|
||||
[node name="SpawnAffect" type="Node" parent="." index="6" unique_id=595069188 node_paths=PackedStringArray("tower")]
|
||||
script = ExtResource("2_d8uyp")
|
||||
tower = NodePath("..")
|
||||
metadata/_custom_type_script = "uid://ccu1u6nqkjxki"
|
||||
59
scenes/towers/tower.tscn
Normal file
@@ -0,0 +1,59 @@
|
||||
[gd_scene format=3 uid="uid://bvqu1heobgboe"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ct24fjmc1ptd6" path="res://towers/tower.gd" id="1_u8bfo"]
|
||||
[ext_resource type="Script" uid="uid://rvnacmxsrh4w" path="res://scripts/target_finder.gd" id="2_txlxp"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_vk4a8"]
|
||||
resource_name = "shoot"
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_cebsq"]
|
||||
_data = {
|
||||
&"shoot": SubResource("Animation_vk4a8")
|
||||
}
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_42byu"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1ucq4"]
|
||||
transparency = 1
|
||||
cull_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0, 0.415686, 0.223529)
|
||||
|
||||
[node name="Tower" type="Node3D" unique_id=71293380 node_paths=PackedStringArray("target_finder", "animator", "pitch_model", "yaw_model", "range_indicator", "audio_player")]
|
||||
script = ExtResource("1_u8bfo")
|
||||
target_finder = NodePath("TargetFinder")
|
||||
animator = NodePath("AnimationPlayer")
|
||||
pitch_model = NodePath("Pitch")
|
||||
yaw_model = NodePath("Yaw")
|
||||
range_indicator = NodePath("CSGSphere3D")
|
||||
audio_player = NodePath("Yaw/AudioStreamPlayer3D")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=599257624]
|
||||
libraries/ = SubResource("AnimationLibrary_cebsq")
|
||||
|
||||
[node name="Pitch" type="MeshInstance3D" parent="." unique_id=2005074924]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_42byu")
|
||||
|
||||
[node name="Yaw" type="MeshInstance3D" parent="." unique_id=36855242]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_42byu")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Yaw" unique_id=1877101855]
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="MinimapIcon" type="Sprite3D" parent="." unique_id=1008002045]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
layers = 4
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="." unique_id=1140796836]
|
||||
visible = false
|
||||
layers = 5
|
||||
radius = 10.0
|
||||
radial_segments = 16
|
||||
rings = 16
|
||||
material = SubResource("StandardMaterial3D_1ucq4")
|
||||
|
||||
[node name="TargetFinder" type="Node" parent="." unique_id=278878888 node_paths=PackedStringArray("tower")]
|
||||
script = ExtResource("2_txlxp")
|
||||
tower = NodePath("..")
|
||||