From 5781b7dad68c3e01d83365f73b0d35d9e5252f97 Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Sun, 16 Jan 2022 17:14:36 +0100 Subject: control system --- assets/turrets.json | 39 ++++-- default_env.tres | 2 +- docs/editor/editor.md | 3 + docs/main.md | 1 + project.godot | 10 +- scenes/gui.tscn | 281 +++++++++---------------------------------- scenes/gui/gui_button.tscn | 74 ++++++++++++ scripts/bullet.gd | 2 +- scripts/control.gd | 153 +++++++++++++++++++++++ scripts/enemies.gd | 2 +- scripts/globals.gd | 24 ++++ scripts/gui.gd | 6 +- scripts/gui_bottom_bar.gd | 56 ++++----- scripts/gui_picker.gd | 67 +++++++---- scripts/gui_top_bar.gd | 11 +- scripts/gui_turret.gd | 26 ++-- scripts/gui_turret_detail.gd | 37 ++++-- scripts/load_map.gd | 4 +- scripts/load_shapes.gd | 6 +- scripts/load_turrets.gd | 8 +- scripts/movement.gd | 62 +--------- scripts/path.gd | 8 ++ scripts/placer.gd | 144 ++++++++++++---------- scripts/pointer.gd | 28 +++++ scripts/turret.gd | 2 +- world.tscn | 22 ++-- 26 files changed, 623 insertions(+), 455 deletions(-) create mode 100644 scenes/gui/gui_button.tscn create mode 100644 scripts/control.gd create mode 100644 scripts/globals.gd create mode 100644 scripts/pointer.gd diff --git a/assets/turrets.json b/assets/turrets.json index 65c23c8..2c13028 100644 --- a/assets/turrets.json +++ b/assets/turrets.json @@ -17,23 +17,22 @@ } }, { - "name": "shotgun", - "cost": { "T": 250 }, - "cooldown": 2.0, + "name": "dual laser", + "cost": { "T": 100 }, + "cooldown": 1.0, "damage": 1, - "turn_speed": 1.2, + "turn_speed": 2, "range": 5, - "upgrades": [ "cannon" ], - "modules_max": 3, - "model_name": "shotgun.glb", + "upgrades": [ "dual laser", "sniper" ], + "modules_max": 2, + "model_name": "laser.glb", "projectile": { "type": "bullet", "speed": 10, - "model_name": "bullet_shot.glb", - "amount": 5, - "spread": 10 + "model_name": "laser_shot.glb", + "amount": 1 } - }, + }, { "name": "sniper", "cost": { "T": 300 }, @@ -50,6 +49,24 @@ "amount": 1 } }, + { + "name": "shotgun", + "cost": { "T": 250 }, + "cooldown": 2.0, + "damage": 1, + "turn_speed": 1.2, + "range": 5, + "upgrades": [ "cannon" ], + "modules_max": 3, + "model_name": "shotgun.glb", + "projectile": { + "type": "bullet", + "speed": 10, + "model_name": "bullet_shot.glb", + "amount": 5, + "spread": 10 + } + }, { "name": "plastic", "cost": { "T": 400 }, diff --git a/default_env.tres b/default_env.tres index 851fd85..aec1221 100644 --- a/default_env.tres +++ b/default_env.tres @@ -12,7 +12,7 @@ background_sky = SubResource( 1 ) ambient_light_color = Color( 1, 1, 1, 1 ) ambient_light_energy = 0.1 ambient_light_sky_contribution = 0.0 -tonemap_mode = 3 +tonemap_mode = 4 auto_exposure_speed = 21.0 ssao_radius = 0.2 ssao_quality = 2 diff --git a/docs/editor/editor.md b/docs/editor/editor.md index 606ba10..fd4a4b9 100644 --- a/docs/editor/editor.md +++ b/docs/editor/editor.md @@ -10,6 +10,9 @@ Requirements: --- +### control +- state machine + ### turret - **place** - remove diff --git a/docs/main.md b/docs/main.md index b55fa80..b2b596b 100644 --- a/docs/main.md +++ b/docs/main.md @@ -71,6 +71,7 @@ regular is planned - endwave report - [editor](./editor/editor.md): + - _control_ - turret - _attach_ - _path_ diff --git a/project.godot b/project.godot index 54943aa..d419755 100644 --- a/project.godot +++ b/project.godot @@ -34,7 +34,7 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/voxel-core/classes/readers/vox.gd" }, { -"base": "Reference", +"base": "Object", "class": "Voxel", "language": "GDScript", "path": "res://addons/voxel-core/classes/voxel.gd" @@ -60,7 +60,7 @@ _global_script_class_icons={ "Reader": "", "Utils": "", "VoxReader": "", -"Voxel": "", +"Voxel": "res://addons/voxel-core/assets/classes/voxel.png", "VoxelMesh": "", "VoxelSet": "", "VoxelTool": "" @@ -72,9 +72,13 @@ config/name="snub" run/main_scene="res://world.tscn" config/icon="res://icon.png" +[autoload] + +Globals="*res://scripts/globals.gd" + [editor_plugins] -enabled=PoolStringArray( ) +enabled=PoolStringArray( "res://addons/voxel-core/plugin.cfg" ) [gui] diff --git a/scenes/gui.tscn b/scenes/gui.tscn index 4ece237..a81e63b 100644 --- a/scenes/gui.tscn +++ b/scenes/gui.tscn @@ -1,10 +1,8 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://scripts/gui.gd" type="Script" id=1] [ext_resource path="res://themes/DarkTheme/Dark.theme" type="Theme" id=2] [ext_resource path="res://scripts/gui_picker.gd" type="Script" id=3] -[ext_resource path="res://scenes/gui/gui_turret.tscn" type="PackedScene" id=4] -[ext_resource path="res://scripts/gui_turret.gd" type="Script" id=5] [ext_resource path="res://scripts/gui_bottom_bar.gd" type="Script" id=6] [ext_resource path="res://scripts/gui_top_bar.gd" type="Script" id=7] [ext_resource path="res://scenes/gui/gui_turret_detail.tscn" type="PackedScene" id=8] @@ -13,15 +11,6 @@ bg_color = Color( 0, 0, 0, 0 ) border_width_bottom = 1 -[sub_resource type="OpenSimplexNoise" id=1] -seed = -7 - -[sub_resource type="NoiseTexture" id=2] -width = 100 -height = 100 -seamless = true -noise = SubResource( 1 ) - [sub_resource type="StyleBoxFlat" id=3] resource_local_to_scene = true resource_name = "border" @@ -29,6 +18,10 @@ bg_color = Color( 0.6, 0.6, 0.6, 0 ) border_width_top = 1 shadow_offset = Vector2( 1, 1 ) +[sub_resource type="StyleBoxFlat" id=5] +bg_color = Color( 0, 0, 0, 0.529412 ) +border_width_top = 1 + [node name="gui" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 @@ -194,6 +187,9 @@ margin_top = 5.0 margin_right = 81.0 margin_bottom = -5.0 text = "Next Wave" +__meta__ = { +"_edit_use_anchors_": false +} [node name="border" type="Panel" parent="top_bar/panel"] anchor_right = 1.0 @@ -214,269 +210,108 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="voxels" type="Panel" parent="bottom_bar"] +[node name="picker" type="Panel" parent="bottom_bar"] anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -320.0 -margin_bottom = -220.0 +margin_top = -120.0 +margin_bottom = 1.0 script = ExtResource( 3 ) __meta__ = { "_edit_use_anchors_": false } -[node name="Hbox" type="HBoxContainer" parent="bottom_bar/voxels"] +[node name="Hbox" type="HBoxContainer" parent="bottom_bar/picker"] anchor_right = 1.0 -margin_bottom = 50.0 +margin_bottom = 120.0 +rect_min_size = Vector2( 0, 120 ) custom_constants/separation = 1 alignment = 1 __meta__ = { "_edit_use_anchors_": false } -[node name="0" type="TextureButton" parent="bottom_bar/voxels/Hbox"] -margin_left = 361.0 -margin_right = 461.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="ColorRect" parent="bottom_bar/voxels/Hbox/0"] -margin_right = 100.0 -margin_bottom = 100.0 -mouse_filter = 2 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="1" type="TextureButton" parent="bottom_bar/voxels/Hbox"] -margin_left = 462.0 -margin_right = 562.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="ColorRect" parent="bottom_bar/voxels/Hbox/1"] -margin_right = 100.0 -margin_bottom = 100.0 -mouse_filter = 2 -color = Color( 0.388235, 0, 1, 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="2" type="TextureButton" parent="bottom_bar/voxels/Hbox"] -margin_left = 563.0 -margin_right = 663.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="ColorRect" parent="bottom_bar/voxels/Hbox/2"] -margin_right = 100.0 -margin_bottom = 100.0 +[node name="border" type="Panel" parent="bottom_bar/picker"] +anchor_right = 1.0 +anchor_bottom = 1.0 mouse_filter = 2 -color = Color( 0.113725, 0, 1, 1 ) +custom_styles/panel = SubResource( 3 ) __meta__ = { "_edit_use_anchors_": false } -[node name="map_tools" type="Panel" parent="bottom_bar"] +[node name="editor_bar" type="Panel" parent="bottom_bar"] anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -220.0 +margin_top = -150.0 margin_bottom = -120.0 -script = ExtResource( 3 ) +custom_styles/panel = SubResource( 5 ) __meta__ = { "_edit_use_anchors_": false } -[node name="Hbox" type="HBoxContainer" parent="bottom_bar/map_tools"] -anchor_right = 1.0 -margin_bottom = 100.0 -custom_constants/separation = 1 -alignment = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="attach" type="TextureButton" parent="bottom_bar/map_tools/Hbox"] -margin_left = 310.0 -margin_right = 410.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="TextureRect" parent="bottom_bar/map_tools/Hbox/attach"] -margin_right = 100.0 -margin_bottom = 100.0 -texture = SubResource( 2 ) -flip_v = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Label" type="Label" parent="bottom_bar/map_tools/Hbox/attach"] -margin_left = 29.0 -margin_top = 5.0 -margin_right = 69.0 -margin_bottom = 19.0 -text = "attach" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="start path" type="TextureButton" parent="bottom_bar/map_tools/Hbox"] -margin_left = 411.0 -margin_right = 511.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="TextureRect" parent="bottom_bar/map_tools/Hbox/start path"] -margin_right = 100.0 -margin_bottom = 100.0 -texture = SubResource( 2 ) -flip_v = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Label" type="Label" parent="bottom_bar/map_tools/Hbox/start path"] -margin_left = 29.0 -margin_top = 5.0 -margin_right = 69.0 -margin_bottom = 19.0 -text = "start path" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="path" type="TextureButton" parent="bottom_bar/map_tools/Hbox"] -margin_left = 512.0 -margin_right = 612.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureRect" type="TextureRect" parent="bottom_bar/map_tools/Hbox/path"] -margin_right = 100.0 -margin_bottom = 100.0 -texture = SubResource( 2 ) -flip_v = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Label" type="Label" parent="bottom_bar/map_tools/Hbox/path"] -margin_left = 29.0 -margin_top = 5.0 -margin_right = 69.0 -margin_bottom = 19.0 -text = "path" +[node name="hbox" type="HBoxContainer" parent="bottom_bar/editor_bar"] +anchor_bottom = 1.0 +margin_top = 3.0 +margin_bottom = -2.0 +custom_constants/separation = 4 __meta__ = { "_edit_use_anchors_": false } -[node name="end path" type="TextureButton" parent="bottom_bar/map_tools/Hbox"] -margin_left = 613.0 -margin_right = 713.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 100, 100 ) -rect_pivot_offset = Vector2( 50, 50 ) -size_flags_horizontal = 9 -script = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} +[node name="Control" type="Control" parent="bottom_bar/editor_bar/hbox"] +margin_bottom = 25.0 -[node name="TextureRect" type="TextureRect" parent="bottom_bar/map_tools/Hbox/end path"] -margin_right = 100.0 -margin_bottom = 100.0 -texture = SubResource( 2 ) -flip_v = true +[node name="turrets" type="Button" parent="bottom_bar/editor_bar/hbox"] +margin_left = 4.0 +margin_right = 57.0 +margin_bottom = 25.0 +text = "Turrets" __meta__ = { "_edit_use_anchors_": false } -[node name="Label" type="Label" parent="bottom_bar/map_tools/Hbox/end path"] -margin_left = 29.0 -margin_top = 5.0 -margin_right = 69.0 -margin_bottom = 19.0 -text = "end path" +[node name="path" type="Button" parent="bottom_bar/editor_bar/hbox"] +margin_left = 61.0 +margin_right = 93.0 +margin_bottom = 25.0 +text = "Path" __meta__ = { "_edit_use_anchors_": false } -[node name="turrets" type="Panel" parent="bottom_bar"] -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_top = -120.0 -margin_bottom = 1.0 -script = ExtResource( 3 ) +[node name="attach" type="Button" parent="bottom_bar/editor_bar/hbox"] +margin_left = 97.0 +margin_right = 143.0 +margin_bottom = 25.0 +text = "Attach" __meta__ = { "_edit_use_anchors_": false } -[node name="Hbox" type="HBoxContainer" parent="bottom_bar/turrets"] -anchor_right = 1.0 -margin_bottom = 120.0 -rect_min_size = Vector2( 0, 120 ) -custom_constants/separation = 1 -alignment = 1 +[node name="voxel" type="Button" parent="bottom_bar/editor_bar/hbox"] +margin_left = 147.0 +margin_right = 193.0 +margin_bottom = 25.0 +text = "Voxels" __meta__ = { "_edit_use_anchors_": false } -[node name="gui_turret" parent="bottom_bar/turrets/Hbox" instance=ExtResource( 4 )] -margin_left = 411.0 -margin_right = 511.0 - -[node name="gui_turret2" parent="bottom_bar/turrets/Hbox" instance=ExtResource( 4 )] -margin_left = 512.0 -margin_right = 612.0 - -[node name="border" type="Panel" parent="bottom_bar/turrets"] -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -custom_styles/panel = SubResource( 3 ) +[node name="palette" type="Button" parent="bottom_bar/editor_bar/hbox"] +margin_left = 197.0 +margin_right = 250.0 +margin_bottom = 25.0 +text = "Palette" __meta__ = { "_edit_use_anchors_": false } [connection signal="button_down" from="top_bar/panel/editor_button" to="top_bar" method="_on_editor_button_down"] [connection signal="pressed" from="top_bar/panel/wave_button" to="top_bar" method="_on_wave_button_pressed"] +[connection signal="button_up" from="bottom_bar/editor_bar/hbox/turrets" to="bottom_bar" method="_on_turrets_button_up"] +[connection signal="button_up" from="bottom_bar/editor_bar/hbox/path" to="bottom_bar" method="_on_path_button_up"] +[connection signal="button_up" from="bottom_bar/editor_bar/hbox/attach" to="bottom_bar" method="_on_attach_button_up"] +[connection signal="button_up" from="bottom_bar/editor_bar/hbox/voxel" to="bottom_bar" method="_on_voxel_button_up"] +[connection signal="button_up" from="bottom_bar/editor_bar/hbox/palette" to="bottom_bar" method="_on_palette_button_up"] diff --git a/scenes/gui/gui_button.tscn b/scenes/gui/gui_button.tscn new file mode 100644 index 0000000..e199560 --- /dev/null +++ b/scenes/gui/gui_button.tscn @@ -0,0 +1,74 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://scripts/gui_turret.gd" type="Script" id=1] +[ext_resource path="res://themes/snub_theme.tres" type="Theme" id=2] + +[sub_resource type="StyleBoxFlat" id=3] +bg_color = Color( 0.6, 0.6, 0.6, 0 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +shadow_offset = Vector2( 1, 1 ) + +[node name="gui_turret" type="TextureButton"] +margin_right = 100.0 +margin_bottom = 120.0 +rect_min_size = Vector2( 100, 120 ) +rect_pivot_offset = Vector2( 50, 50 ) +size_flags_horizontal = 9 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="color" type="ColorRect" parent="."] +margin_right = 100.0 +margin_bottom = 100.0 +mouse_filter = 2 +color = Color( 0, 0, 0, 0.227451 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="panel" type="Panel" parent="."] +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -20.0 +theme = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="hbox" type="HBoxContainer" parent="."] +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -20.0 +alignment = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="name_label" type="Label" parent="hbox"] +margin_left = 36.0 +margin_top = 1.0 +margin_right = 64.0 +margin_bottom = 19.0 +text = "name" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="border" type="Panel" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_styles/panel = SubResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/scripts/bullet.gd b/scripts/bullet.gd index 3716a4e..2a5df41 100644 --- a/scripts/bullet.gd +++ b/scripts/bullet.gd @@ -13,7 +13,7 @@ var bounce = false var hitlist = [] func _ready(): - _enemies_holder = get_tree().root.get_child(0).find_node("enemies") + _enemies_holder = get_tree().root.get_node("world").find_node("enemies") var _err = $Area.connect("body_entered", self, "collided") func _physics_process(delta): diff --git a/scripts/control.gd b/scripts/control.gd new file mode 100644 index 0000000..2e31667 --- /dev/null +++ b/scripts/control.gd @@ -0,0 +1,153 @@ +extends Node + +var ineditor = false +var state = Globals.PlayerState.PICK +var statetype = Globals.StateType.TURRET +var selected = "" +var editing_turret = "" + +var gui : Node +var pointer : Node +var turret_holder : Node +var load_turrets : Node +var path : Node +var world : VoxelMesh + +func fetch (): + if load_turrets != null: return + var root = get_tree().root.get_node("world") + gui = root.get_node("gui") + pointer = root.get_node("pointer") + world = root.get_node("world") + path = root.get_node("path") + turret_holder = root.get_node("turrets") + var saveload = root.get_node("saveload") + load_turrets = saveload.get_node("load_turrets") + if !load_turrets.loaded: yield(load_turrets, "done_loading") + +func _ready (): + fetch() + _refresh() + build_option (state, statetype) + +func build_option (st, sttype): + var opts = [] + match st: + Globals.PlayerState.PICK, Globals.PlayerState.PLACE: + match sttype: + Globals.StateType.TURRET: + for t in load_turrets.get_base_turrets(): + opts += [ { "type": "turret buy", "name": t.name } ] + Globals.StateType.ATTACH: + opts += [ { "type": "text", "name": "attach" } ] + Globals.StateType.PATH: + opts += [ { "type": "text", "name": "start path" } ] + opts += [ { "type": "text", "name": "path" } ] + opts += [ { "type": "text", "name": "end path" } ] + Globals.StateType.VOXEL: + for i in world.voxel_set.size(): + var details = world.voxel_set.get_voxel(i) + var color = Color(1, 0, 1) + if details.has("color"): + color = details.color + opts += [ { "type": "color", "name": i, "color": color} ] + + Globals.PlayerState.EDIT: + match sttype: + Globals.StateType.TURRET: + var tname = turret_holder.get_node(editing_turret).info.name + for t in load_turrets.get_upg_turrets(tname): + opts += [ { "type": "turret upg", "name": t.name } ] + opts += [ { "type": "text", "name": "sell" } ] + opts += [ { "type": "text", "name": "priority" } ] + opts += [ { "type": "text", "name": "modules" } ] + opts += [ { "type": "text", "name": "back" } ] + + gui.bottom_bar.picker.build(opts) + +func _refresh (): + gui.refresh(ineditor) + pointer.refresh(state, statetype, selected) + +func to_pick (): + selected = "" + editing_turret = "" + state = Globals.PlayerState.PICK + build_option(state, statetype) + +func do (action, par = {}): + print(str(action) + " " + str(par)) + fetch() + match state: + Globals.PlayerState.PICK: + match action: + Globals.PlayerActions.PICK: + selected = par.selected + state = Globals.PlayerState.PLACE + + Globals.PlayerActions.SELECT: + match statetype: + Globals.StateType.TURRET: + selected = "" + editing_turret = par.selected + state = Globals.PlayerState.EDIT + build_option(state, statetype) + _: to_pick() + + Globals.PlayerActions.CHANGE_TYPE: + selected = "" + editing_turret = "" + state = Globals.PlayerState.PICK + statetype = par.statetype + build_option(state, statetype) + + Globals.PlayerState.PLACE: + match action: + Globals.PlayerActions.PLACE: + match statetype: + Globals.StateType.TURRET: + editing_turret = par.placed + state = Globals.PlayerState.EDIT + build_option(state, statetype) + + Globals.PlayerActions.DELETE: pass + Globals.PlayerActions.CANCEL: to_pick() + + Globals.PlayerActions.CHANGE_TYPE: + selected = "" + editing_turret = "" + state = Globals.PlayerState.PICK + statetype = par.statetype + build_option(state, statetype) + + Globals.PlayerState.EDIT: + match action: + Globals.PlayerActions.PICK: + match statetype: + Globals.StateType.TURRET: + selected = par.selected + match par.selected: + "back": + to_pick() + _: to_pick() + + Globals.PlayerActions.CANCEL: to_pick() + + Globals.PlayerActions.CHANGE_TYPE: + selected = "" + editing_turret = "" + state = Globals.PlayerState.PICK + statetype = par.statetype + build_option(state, statetype) + _refresh() + + +func gui_editor_toggle_event (): + ineditor = !ineditor + gui.refresh(ineditor) + path.refresh_path(ineditor) + +func gui_start_wave_event (): + path.refresh_path(ineditor) + #_enemies.spawn() + gui.refresh(ineditor) diff --git a/scripts/enemies.gd b/scripts/enemies.gd index 37c1f6b..62c64ea 100644 --- a/scripts/enemies.gd +++ b/scripts/enemies.gd @@ -30,7 +30,7 @@ var colors = [ func _ready(): - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") _fx_holder = root.get_node("fx") _path = root.get_node("path") _resources = root.get_node("player").get_node("resources") diff --git a/scripts/globals.gd b/scripts/globals.gd new file mode 100644 index 0000000..8c66f03 --- /dev/null +++ b/scripts/globals.gd @@ -0,0 +1,24 @@ +extends Node + +enum PlayerState { + PICK, + PLACE, + EDIT +} + +enum StateType { + TURRET, + ATTACH, + PATH, + VOXEL, + VOXEL_PALETTE +} + +enum PlayerActions { + CHANGE_TYPE, + PICK, + PLACE, + SELECT, + DELETE, + CANCEL +} diff --git a/scripts/gui.gd b/scripts/gui.gd index 03a2e04..71eaf76 100644 --- a/scripts/gui.gd +++ b/scripts/gui.gd @@ -1,21 +1,21 @@ extends Control var player : Node -var _in_editor : bool +var control : Node var bottom_bar : Control var top_bar : Control func _fetch (): - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") player = root.get_node("player") + control = player.get_node("control") if bottom_bar == null: bottom_bar = get_node("bottom_bar") if top_bar == null: top_bar = get_node("top_bar") func _ready(): _fetch() - bottom_bar.build() func refresh (in_editor : bool): _fetch() diff --git a/scripts/gui_bottom_bar.gd b/scripts/gui_bottom_bar.gd index 0a7b7b8..bd63a51 100644 --- a/scripts/gui_bottom_bar.gd +++ b/scripts/gui_bottom_bar.gd @@ -1,41 +1,41 @@ extends Control -var _in_editor : bool -var voxel_picker : Control -var map_tool_picker : Control -var turret_picker : Control - -var _load_turrets : Node +var editor_bar : Control +var picker : Control var gui : Control func _fetch (): if gui == null: gui = get_parent() - if voxel_picker == null: voxel_picker = $voxels - if map_tool_picker == null: map_tool_picker = $map_tools - if turret_picker == null: turret_picker = $turrets - - var root = get_tree().root.get_child(0) - if _load_turrets == null: - _load_turrets = root.get_node("saveload").get_node("load_turrets") - -func build (): - _fetch() - turret_picker.build(_load_turrets.get_base_turrets()) - voxel_picker.build() - map_tool_picker.build() + if editor_bar == null: editor_bar = $editor_bar + if picker == null: picker = $picker func refresh (in_editor : bool): _fetch() - _in_editor = in_editor - if _in_editor: - voxel_picker.visible = true - map_tool_picker.visible = true + if in_editor: + editor_bar.visible = true else: - voxel_picker.visible = false - map_tool_picker.visible = false + editor_bar.visible = false - turret_picker.refresh(gui.player.sel) - voxel_picker.refresh(gui.player.sel) - map_tool_picker.refresh(gui.player.sel) + picker.refresh() + +func _on_turrets_button_up(): + gui.control.do(Globals.PlayerActions.CHANGE_TYPE, + { "statetype": Globals.StateType.TURRET }) + +func _on_path_button_up(): + gui.control.do(Globals.PlayerActions.CHANGE_TYPE, + { "statetype": Globals.StateType.PATH }) + +func _on_attach_button_up(): + gui.control.do(Globals.PlayerActions.CHANGE_TYPE, + { "statetype": Globals.StateType.ATTACH }) + +func _on_voxel_button_up(): + gui.control.do(Globals.PlayerActions.CHANGE_TYPE, + { "statetype": Globals.StateType.VOXEL }) + +func _on_palette_button_up(): + gui.control.do(Globals.PlayerActions.CHANGE_TYPE, + { "statetype": Globals.StateType.VOXEL_PALETTE }) diff --git a/scripts/gui_picker.gd b/scripts/gui_picker.gd index 21f6b4c..7a20842 100644 --- a/scripts/gui_picker.gd +++ b/scripts/gui_picker.gd @@ -1,7 +1,8 @@ extends Panel var _hbox : HBoxContainer -var _gui_button : Resource = load("res://scenes/gui/gui_turret.tscn") +var _gui_button : Resource = load("res://scenes/gui/gui_button.tscn") +var _gui_turret_button : Resource = load("res://scenes/gui/gui_turret.tscn") var _options = [] @@ -15,37 +16,57 @@ func _fetch (): func build (options : Array = []): _fetch() + hovering = "" - if options.size() > 0: - for n in _hbox.get_children(): n.queue_free() + for child in _hbox.get_children(): + child.disconnect("mouse_entered", self, "_on_gui_turret_mouse_entered") + child.disconnect("mouse_exited", self, "_on_gui_turret_mouse_exited") + child.disconnect("pressed", self, "_on_gui_turret_pressed") + child.queue_free() - _options = options - for t in _options: - var gt : TextureButton = _gui_button.instance() - gt.name = t.name - _hbox.add_child(gt) - gt.init(t) + _options = options + for opt in _options: + var button = null + if opt.type == "turret buy": + button = _gui_turret_button.instance() + _hbox.add_child(button) + button.init(opt.name) + if opt.type == "turret upg": + button = _gui_turret_button.instance() + _hbox.add_child(button) + button.init(opt.name) + if opt.type == "text": + button = _gui_button.instance() + _hbox.add_child(button) + button.get_node("hbox").get_node("name_label").text = opt.name + if opt.type == "color": + button = _gui_button.instance() + _hbox.add_child(button) + button.get_node("hbox").get_node("name_label").text = "" + button.get_node("color").color = opt.color + + if button != null: + button.option = opt.name + else: print("no option for " + str(opt)) for child in _hbox.get_children(): - if child.get_signal_connection_list("pressed").size() == 0: - child.connect("mouse_entered", self, "_on_gui_turret_mouse_entered", [child.name]) - child.connect("mouse_exited", self, "_on_gui_turret_mouse_exited", [child.name]) - child.connect("pressed", self, "_on_gui_turret_pressed", [child.name]) + child.connect("mouse_entered", self, "_on_gui_turret_mouse_entered", [child.option]) + child.connect("mouse_exited", self, "_on_gui_turret_mouse_exited", [child.option]) + child.connect("pressed", self, "_on_gui_turret_pressed", [child.option]) -func refresh (sel): +func refresh (): _fetch() - if sel.type == "idle": + if gui.control.state == Globals.PlayerState.PICK: for child in _hbox.get_children(): child.picked = false - if sel.type == name: + if gui.control.selected == name: for child in _hbox.get_children(): - child.picked = child.name == sel.name + child.picked = child.name == gui.control.selected -func _on_gui_turret_mouse_entered(name : String): - hovering = name; +func _on_gui_turret_mouse_entered(option : String): + hovering = option; -func _on_gui_turret_mouse_exited(name : String): +func _on_gui_turret_mouse_exited(option : String): hovering = "" -func _on_gui_turret_pressed(name : String): - print(self.name + ' ' + name) - gui.player.selected_event(name, self.name) +func _on_gui_turret_pressed(option : String): + gui.control.do(Globals.PlayerActions.PICK, { "selected": option }) diff --git a/scripts/gui_top_bar.gd b/scripts/gui_top_bar.gd index a002e87..6c086ce 100644 --- a/scripts/gui_top_bar.gd +++ b/scripts/gui_top_bar.gd @@ -1,6 +1,5 @@ extends Control -var _in_editor : bool var _editor_button : Button var _hbox : HBoxContainer @@ -8,16 +7,14 @@ var _resources : Node var _gui : Control func refresh (in_editor : bool): - _in_editor = in_editor - - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") _resources = root.get_node("player").get_node("resources") if _gui == null: _gui = get_parent() if _hbox == null: _hbox = $panel/resources/HBoxContainer if _editor_button == null: _editor_button = $panel/editor_button - if _in_editor: _editor_button.text = "Editor" + if in_editor: _editor_button.text = "Editor" else: _editor_button.text = "Playmode" func _process (_delta): @@ -25,7 +22,7 @@ func _process (_delta): _hbox.get_node(r).text = str(_resources[r]) + r func _on_editor_button_down(): - _gui.player.gui_editor_toggle_event() + _gui.control.gui_editor_toggle_event() func _on_wave_button_pressed(): - _gui.player.gui_start_wave_event() + _gui.control.gui_start_wave_event() diff --git a/scripts/gui_turret.gd b/scripts/gui_turret.gd index 9faeb7a..55e3f5a 100644 --- a/scripts/gui_turret.gd +++ b/scripts/gui_turret.gd @@ -1,6 +1,8 @@ extends TextureButton -var _turret : Dictionary +var option : String + +var info : Dictionary var _color_rect : ColorRect var _name_label : Label @@ -17,23 +19,25 @@ var enabled : bool = false var _rotate_timer : float -func init (turret : Dictionary): - _turret = turret +func init (turret_name : String): + var root = get_tree().root.get_node("world") + var saveload = root.get_node("saveload") + var load_turrets = saveload.get_node("load_turrets") + if !load_turrets.loaded: yield(load_turrets, "done_loading") + info = load_turrets.info[turret_name] + _color_rect = $ColorRect _name_label = $hbox/name_label _cash_label = $cash_label _viewport = $viewport _spinner = $viewport/spinner - var root = get_tree().root.get_child(0) _resources = root.get_node("player").get_node("resources") - _name_label.text = turret.name - _cash_label.text = _resources.dict_to_str(turret.cost) + _name_label.text = turret_name + _cash_label.text = _resources.dict_to_str(info.cost) - var load_turrets = root.get_node("saveload").get_node("load_turrets") - if !load_turrets.loaded: yield(load_turrets, "done_loading") - var model = load_turrets.models[turret.model_name] + var model = load_turrets.models[info.model_name] _mesh = model.instance() _spinner.add_child(_mesh) @@ -44,10 +48,10 @@ func _process(delta): if _spinner == null: _spinner = $viewport/spinner if _spinner != null: if _resources == null: - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") _resources = root.get_node("player").get_node("resources") - var afforded = _resources.greater_than(_turret.cost) + var afforded = _resources.greater_than(info.cost) if afforded: _color_rect.color = Color(0,0,0,0) else: _color_rect.color = Color(0,0,0,0.5) diff --git a/scripts/gui_turret_detail.gd b/scripts/gui_turret_detail.gd index df89c14..f895a6e 100644 --- a/scripts/gui_turret_detail.gd +++ b/scripts/gui_turret_detail.gd @@ -2,6 +2,7 @@ extends Panel var hbox_labels var hbox_global +var _turret_holder : Node var _turret_values : Resource = load("res://scenes/gui/gui_turret_values.tscn") var load_turrets : Node @@ -9,11 +10,14 @@ var gui : Control func _fetch (): if gui == null: gui = get_parent() - if hbox_labels != null: return; + if load_turrets != null: return; + + var root = get_tree().root.get_node("world") + _turret_holder = root.get_node("turrets") + hbox_labels = $"hbox_global/hbox_labels" hbox_global = $"hbox_global" - var root = get_tree().root.get_child(0) load_turrets = root.get_node("saveload").get_node("load_turrets") if !load_turrets.loaded: yield(load_turrets, "done_loading") @@ -46,12 +50,29 @@ func _process(delta): var info = null; - var hovering = gui.bottom_bar.turret_picker.hovering - if gui.player.highlight != null: - info = gui.player.highlight.info - elif gui.player.sel.type == "turrets": - info = load_turrets.info[gui.player.sel.name] - elif hovering != "": + var hovering = null + if gui.control.state == Globals.PlayerState.PICK and \ + gui.control.statetype == Globals.StateType.TURRET and \ + gui.bottom_bar.picker.hovering != "": + hovering = gui.bottom_bar.picker.hovering + + var highlight = null + if gui.control.state == Globals.PlayerState.EDIT and \ + gui.control.statetype == Globals.StateType.TURRET: + var turret_name = gui.control.editing_turret + highlight = _turret_holder.get_node(turret_name) + + var placing = null + if gui.control.state == Globals.PlayerState.PLACE and \ + gui.control.statetype == Globals.StateType.TURRET and \ + gui.control.selected != "": + placing = gui.control.selected + + if highlight != null: + info = highlight.info + elif placing != null: + info = load_turrets.info[placing] + elif hovering != null: info = load_turrets.info[hovering] elif gui.player.placer.colliding \ and "turrets" in gui.player.placer.colliding_group: diff --git a/scripts/load_map.gd b/scripts/load_map.gd index 8130997..1e4405c 100644 --- a/scripts/load_map.gd +++ b/scripts/load_map.gd @@ -10,7 +10,7 @@ func _ready(): map_load() func fetch (): - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") if _world == null: _world = root.get_node("world") if _path_holder == null: @@ -105,6 +105,8 @@ func map_load(): set_map_state(state) print("loaded") + _path_holder.refresh_path(false) + func _process(_delta): if Input.is_action_just_released("save"): diff --git a/scripts/load_shapes.gd b/scripts/load_shapes.gd index f3de4ae..308f111 100644 --- a/scripts/load_shapes.gd +++ b/scripts/load_shapes.gd @@ -1,11 +1,13 @@ extends Node -var loaded = false var saveload : Node var models : Dictionary + +var loaded = false +signal done_loading func get_saveload(): - if saveload == null: saveload = get_tree().root.get_child(0).get_node("saveload") + if saveload == null: saveload = get_tree().root.get_node("world").get_node("saveload") func _ready(): get_saveload() diff --git a/scripts/load_turrets.gd b/scripts/load_turrets.gd index 2b96652..ddb7800 100644 --- a/scripts/load_turrets.gd +++ b/scripts/load_turrets.gd @@ -17,7 +17,13 @@ func _ready(): loaded = true func get_saveload(): - if saveload == null: saveload = get_tree().root.get_child(0).get_node("saveload") + if saveload == null: saveload = get_tree().root.get_node("world").get_node("saveload") + +func get_upg_turrets(turret_name): + var results = [] + for turr in info[turret_name].get("upgrades", []): + results += [info[turr]] + return results func get_base_turrets(): var results = [] diff --git a/scripts/movement.gd b/scripts/movement.gd index 3247a2f..51deffd 100644 --- a/scripts/movement.gd +++ b/scripts/movement.gd @@ -1,7 +1,5 @@ extends KinematicBody -var in_editor : bool = false - var vel = Vector3() var camera = Camera @@ -15,78 +13,22 @@ var _pivot var _pivot_dist var _orbit_timer -var _world : VoxelMesh - -var _gui : Control - var _turret_holder : Node var _attach_point_holder : Node var path_holder : Node var load_turrets : Node -var ptr : Node var _enemies : Node -var sel = { - "type": "idle", - "name": "" -} - -var highlight : Spatial - func _ready(): camera = $camera placer = $placer - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") path_holder = root.get_node("path") - _gui = root.get_node("gui") _enemies = root.get_node("enemies") - ptr = root.find_node("pointer"); - - var saveload = root.get_node("saveload") - load_turrets = saveload.get_node("load_turrets") - - _gui.refresh(in_editor) - - refresh_path() - -func refresh_gui(): - _gui.refresh(in_editor) - -func gui_editor_toggle_event (): - in_editor = !in_editor - _gui.refresh(in_editor) - refresh_path() - -func gui_start_wave_event (): - refresh_path() - _enemies.spawn() - _gui.refresh(in_editor) - -func refresh_path(): - if in_editor: - path_holder.show() - else: - var _res = path_holder.load_nodes() - path_holder.hide() - -func selected_event (sel_name, sel_type): - sel.name = sel_name - sel.type = sel_type - _gui.refresh(in_editor) - - if sel_type == "turrets": - for child in ptr.get_children(): - if child.name != "base": child.queue_free(); - var info = load_turrets.info[sel.name] - var model = load_turrets.models[info.model_name] - var instance_model = model.instance() - instance_model.name = "preview" - ptr.add_child(instance_model) - elif sel_type != "": - ptr.get_node("base").visible = true + func look_free (m): self.transform.basis = self.transform.basis.rotated(Vector3.UP, m.x) diff --git a/scripts/path.gd b/scripts/path.gd index f8c0fb7..3774bfe 100644 --- a/scripts/path.gd +++ b/scripts/path.gd @@ -8,6 +8,14 @@ const dirs = [ var nodes = [] + +func refresh_path (vis): + if vis: + show() + else: + var _res = load_nodes() + hide() + func next_node (node, dir): var pos : Vector3 = node.transform.origin diff --git a/scripts/placer.gd b/scripts/placer.gd index dbff4d7..6547d02 100644 --- a/scripts/placer.gd +++ b/scripts/placer.gd @@ -1,5 +1,6 @@ extends Spatial +var control : Node var player : Spatial var world : VoxelMesh var turret_holder : Node @@ -19,9 +20,10 @@ var collision_point : Vector3 func _ready (): player = get_parent() + control = player.get_node("control") resources = get_parent().get_node("resources") - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") world = root.get_node("world") turret_holder = root.get_node("turrets") attach_point_holder = root.get_node("attach") @@ -47,11 +49,12 @@ func check_overlap_pointer(): var shape = BoxShape.new() shape.extents = Vector3(0.24, 0.24, 0.24) - var info = load_turrets.info[player.sel.name] - if info.has("collider"): - if info.collider == "sphere": - shape = SphereShape.new() - shape.radius = 0.24 + if control.statetype == Globals.StateType.TURRET: + var info = load_turrets.info[control.selected] + if info.has("collider"): + if info.collider == "sphere": + shape = SphereShape.new() + shape.radius = 0.24 var params: = PhysicsShapeQueryParameters.new() params.set_shape(shape) @@ -90,7 +93,7 @@ func _inst_turret (pos, rot): instance.transform.basis = Basis(rot); instance.refresh_normal() - var info = load_turrets.info[player.sel.name] + var info = load_turrets.info[control.selected] var model = load_turrets.models[info.model_name] var instance_model = model.instance() instance_model.name = "model" @@ -114,12 +117,14 @@ func _inst_turret (pos, rot): sb.get_node("CollisionShapeSphere").disabled = false; else: sb.get_node("CollisionShapeSphere").queue_free(); + return instance func _inst_path_start (pos, rot): var instance = load_scenes.path_start.instance() path_holder.add_child(instance) instance.transform.origin = pos + normal * 0.25; instance.transform.basis = Basis(rot); + return instance func _inst_path (pos, rot): var instance = load_scenes.path.instance() @@ -128,12 +133,14 @@ func _inst_path (pos, rot): instance.transform.basis = Basis(rot); instance.set_name("path") colliding_node.transform.basis = Basis(rot); + return instance func _inst_path_end (pos, rot): var instance = load_scenes.path_end.instance() path_holder.add_child(instance) instance.transform.origin = pos + normal * 0.25 instance.transform.basis = Basis(rot); + return instance func _inst_attach (pos, rot): var instance = load_scenes.attach_point.instance() @@ -143,23 +150,24 @@ func _inst_attach (pos, rot): return instance func place (group, inst : FuncRef): - if Input.is_action_just_pressed("use"): - if colliding && group in colliding_group: - var overlap = check_overlap_pointer() - print(overlap) - if overlap == "clear": - inst.call_func(ptr.transform.origin, ptr.transform.basis.get_rotation_quat()) - return "ok" + if colliding && group in colliding_group: + var overlap = check_overlap_pointer() + if overlap == "clear": + var obj = inst.call_func( + ptr.transform.origin, + ptr.transform.basis.get_rotation_quat()) + return obj + return null func delete (group): - if Input.is_action_just_pressed("cancel"): - if colliding && group in colliding_group: - colliding_node.queue_free() - + if colliding && group in colliding_group: + colliding_node.queue_free() + return true + return false func _pointer (): - if player.sel.name == "" or player.sel.type == "": ptr.visible = false - else: ptr.visible = true + if control.state == Globals.PlayerState.PLACE: ptr.visible = true + else: ptr.visible = false var space: PhysicsDirectSpaceState = get_world().direct_space_state as PhysicsDirectSpaceState var mouse2d = get_viewport().get_mouse_position() @@ -169,7 +177,7 @@ func _pointer (): ptr.transform.origin = to var mask = 0b1101 - if player.sel.name.find("path") != -1: mask = 0b1111 + if control.statetype == Globals.StateType.PATH: mask = 0b1111 var voxelpos = null; @@ -203,47 +211,57 @@ func _pointer (): colliding_group = [] ptr.visible = false - var placed = "not ok" - match player.sel.type: - "map_tools": - match player.sel.name: - "start path": - place("path", funcref(self, "_inst_path_start")) - delete("path") - "path": - place("path", funcref(self, "_inst_path")) - delete("path") - "end path": - place("path", funcref(self, "_inst_path_end")) - delete("path") - "attach": - place("voxels", funcref(self, "_inst_attach")) - delete("attach") - "voxels": - if voxelpos != null: - var pos = Voxel.world_to_grid(voxelpos) + if control.state == Globals.PlayerState.PICK: + match control.statetype: + Globals.StateType.TURRET: if Input.is_action_just_pressed("use"): - world.set_voxel(pos + normal, int(player.sel.name)) - world.update_mesh() - if Input.is_action_just_pressed("cancel"): - world.erase_voxel(pos) - world.update_mesh() - "turrets": - placed = place("attach", funcref(self, "_inst_turret")) - if placed == "ok" and !player.in_editor: - resources.sub(load_turrets.info[player.sel.name].cost) - delete("turret") - - "idle": - if Input.is_action_just_pressed("use"): - if "turrets" in colliding_group: - player.highlight = colliding_node - else: player.highlight = null - + if "turrets" in colliding_group: + control.do(Globals.PlayerActions.SELECT, + { "selected": colliding_node.name }) - if placed == "ok": - player.sel.name = "" - player.sel.type = "idle" - if ptr.has_node("preview"): - ptr.get_node("preview").queue_free() - player.refresh_gui() + if control.state == Globals.PlayerState.PLACE: + var inst = null + var g = null + match control.statetype: + Globals.StateType.TURRET: + g = "attach" + inst = funcref(self, "_inst_turret") + Globals.StateType.ATTACH: + g = "voxels" + inst = funcref(self, "_inst_attach") + Globals.StateType.VOXEL: + if voxelpos != null: + var pos = Voxel.world_to_grid(voxelpos) + if Input.is_action_just_pressed("use"): + var overlap = check_overlap_pointer() + if overlap == "clear": + world.set_voxel(pos + normal, int(control.selected)) + world.update_mesh() + control.do(Globals.PlayerActions.PLACE) + if Input.is_action_just_pressed("cancel"): + world.erase_voxel(pos) + world.update_mesh() + control.do(Globals.PlayerActions.DELETE) + Globals.StateType.PATH: + g = "path" + match control.selected: + "start path": + g = "voxel" + inst = funcref(self, "_inst_path_start") + "path": inst = funcref(self, "_inst_path") + "end path": inst = funcref(self, "_inst_path_end") + + if inst != null: + if Input.is_action_just_pressed("use"): + var placed = place(g, inst); + if placed != null: + control.do(Globals.PlayerActions.PLACE, + { "placed": placed.name }) + else: + control.do(Globals.PlayerActions.CANCEL) + if Input.is_action_just_pressed("cancel"): + var has_deleted = delete(g) + if has_deleted: + control.do(Globals.PlayerActions.DELETE) + else: + control.do(Globals.PlayerActions.CANCEL) diff --git a/scripts/pointer.gd b/scripts/pointer.gd new file mode 100644 index 0000000..8401ec6 --- /dev/null +++ b/scripts/pointer.gd @@ -0,0 +1,28 @@ +extends Spatial + +var load_turrets : Node + +func fetch (): + if load_turrets != null: return + var root = get_tree().root.get_node("world") + + load_turrets = root.get_node("saveload").get_node("load_turrets") + if !load_turrets.loaded: yield(load_turrets, "done_loading") + +func refresh (state, statetype, turret_name : String = ""): + fetch() + for child in get_children(): + if child.name != "base": child.queue_free(); + get_node("base").visible = false + + if state == Globals.PlayerState.PLACE: + if statetype == Globals.StateType.TURRET: + if turret_name != "": + var info = load_turrets.info[turret_name] + var model = load_turrets.models[info.model_name] + var instance_model = model.instance() + instance_model.name = "preview" + add_child(instance_model) + get_node("base").visible = false + else: + get_node("base").visible = true diff --git a/scripts/turret.gd b/scripts/turret.gd index 59d6146..6fbddeb 100644 --- a/scripts/turret.gd +++ b/scripts/turret.gd @@ -21,7 +21,7 @@ var info : Dictionary var cooldown_timer = 0 func _ready(): - var root = get_tree().root.get_child(0) + var root = get_tree().root.get_node("world") _path = root.get_node("path") _enemies = root.get_node("enemies") _projectiles_holder = root.get_node("projectiles") diff --git a/world.tscn b/world.tscn index fc3a557..c9f59f2 100644 --- a/world.tscn +++ b/world.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=21 format=2] +[gd_scene load_steps=23 format=2] [ext_resource path="res://scripts/movement.gd" type="Script" id=1] [ext_resource path="res://scripts/enemies.gd" type="Script" id=2] @@ -14,6 +14,8 @@ [ext_resource path="res://scripts/resources.gd" type="Script" id=12] [ext_resource path="res://scripts/placer.gd" type="Script" id=13] [ext_resource path="res://scripts/load_shapes.gd" type="Script" id=14] +[ext_resource path="res://scripts/control.gd" type="Script" id=15] +[ext_resource path="res://scripts/pointer.gd" type="Script" id=16] [sub_resource type="SphereShape" id=1] @@ -22,17 +24,17 @@ vertex_color_use_as_albedo = true [sub_resource type="ArrayMesh" id=7] surfaces/0 = { -"aabb": AABB( 0, 0, 0, 2.5, 1, 2.5 ), -"array_data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255 ), -"array_index_data": PoolByteArray( 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 2, 0, 4, 0, 5, 0, 6, 0, 5, 0, 7, 0, 6, 0, 8, 0, 9, 0, 10, 0, 9, 0, 11, 0, 10, 0, 12, 0, 13, 0, 14, 0, 13, 0, 15, 0, 14, 0, 16, 0, 17, 0, 18, 0, 17, 0, 19, 0, 18, 0, 20, 0, 21, 0, 22, 0, 21, 0, 23, 0, 22, 0, 24, 0, 25, 0, 26, 0, 25, 0, 27, 0, 26, 0, 28, 0, 29, 0, 30, 0, 29, 0, 31, 0, 30, 0, 32, 0, 33, 0, 34, 0, 33, 0, 35, 0, 34, 0, 36, 0, 37, 0, 38, 0, 37, 0, 39, 0, 38, 0, 40, 0, 41, 0, 42, 0, 41, 0, 43, 0, 42, 0, 44, 0, 45, 0, 46, 0, 45, 0, 47, 0, 46, 0, 48, 0, 49, 0, 50, 0, 49, 0, 51, 0, 50, 0, 52, 0, 53, 0, 54, 0, 53, 0, 55, 0, 54, 0, 56, 0, 57, 0, 58, 0, 57, 0, 59, 0, 58, 0, 60, 0, 61, 0, 62, 0, 61, 0, 63, 0, 62, 0, 64, 0, 65, 0, 66, 0, 65, 0, 67, 0, 66, 0, 68, 0, 69, 0, 70, 0, 69, 0, 71, 0, 70, 0, 72, 0, 73, 0, 74, 0, 73, 0, 75, 0, 74, 0, 76, 0, 77, 0, 78, 0, 77, 0, 79, 0, 78, 0, 80, 0, 81, 0, 82, 0, 81, 0, 83, 0, 82, 0, 84, 0, 85, 0, 86, 0, 85, 0, 87, 0, 86, 0, 88, 0, 89, 0, 90, 0, 89, 0, 91, 0, 90, 0, 92, 0, 93, 0, 94, 0, 93, 0, 95, 0, 94, 0, 96, 0, 97, 0, 98, 0, 97, 0, 99, 0, 98, 0, 100, 0, 101, 0, 102, 0, 101, 0, 103, 0, 102, 0, 104, 0, 105, 0, 106, 0, 105, 0, 107, 0, 106, 0, 108, 0, 109, 0, 110, 0, 109, 0, 111, 0, 110, 0, 112, 0, 113, 0, 114, 0, 113, 0, 115, 0, 114, 0, 116, 0, 117, 0, 118, 0, 117, 0, 119, 0, 118, 0, 120, 0, 121, 0, 122, 0, 121, 0, 123, 0, 122, 0, 124, 0, 125, 0, 126, 0, 125, 0, 127, 0, 126, 0, 128, 0, 129, 0, 130, 0, 129, 0, 131, 0, 130, 0, 132, 0, 133, 0, 134, 0, 133, 0, 135, 0, 134, 0, 136, 0, 137, 0, 138, 0, 137, 0, 139, 0, 138, 0, 140, 0, 141, 0, 142, 0, 141, 0, 143, 0, 142, 0, 144, 0, 145, 0, 146, 0, 145, 0, 147, 0, 146, 0, 148, 0, 149, 0, 150, 0, 149, 0, 151, 0, 150, 0, 152, 0, 153, 0, 154, 0, 153, 0, 155, 0, 154, 0, 156, 0, 157, 0, 158, 0, 157, 0, 159, 0, 158, 0, 160, 0, 161, 0, 162, 0, 161, 0, 163, 0, 162, 0, 164, 0, 165, 0, 166, 0, 165, 0, 167, 0, 166, 0, 168, 0, 169, 0, 170, 0, 169, 0, 171, 0, 170, 0, 172, 0, 173, 0, 174, 0, 173, 0, 175, 0, 174, 0, 176, 0, 177, 0, 178, 0, 177, 0, 179, 0, 178, 0, 180, 0, 181, 0, 182, 0, 181, 0, 183, 0, 182, 0, 184, 0, 185, 0, 186, 0, 185, 0, 187, 0, 186, 0, 188, 0, 189, 0, 190, 0, 189, 0, 191, 0, 190, 0, 192, 0, 193, 0, 194, 0, 193, 0, 195, 0, 194, 0, 196, 0, 197, 0, 198, 0, 197, 0, 199, 0, 198, 0, 200, 0, 201, 0, 202, 0, 201, 0, 203, 0, 202, 0, 204, 0, 205, 0, 206, 0, 205, 0, 207, 0, 206, 0, 208, 0, 209, 0, 210, 0, 209, 0, 211, 0, 210, 0, 212, 0, 213, 0, 214, 0, 213, 0, 215, 0, 214, 0, 216, 0, 217, 0, 218, 0, 217, 0, 219, 0, 218, 0, 220, 0, 221, 0, 222, 0, 221, 0, 223, 0, 222, 0, 224, 0, 225, 0, 226, 0, 225, 0, 227, 0, 226, 0, 228, 0, 229, 0, 230, 0, 229, 0, 231, 0, 230, 0 ), +"aabb": AABB( -1.5, 0, 0, 4, 1, 2.5 ), +"array_data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 255, 255, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 192, 63, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 192, 63, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 1, 128, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 255, 127, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 192, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 98, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 32, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 63, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 192, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 128, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 128, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 128, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 63, 255, 127, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 0, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 0, 255, 127, 255, 127, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 0, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 63, 0, 0, 0, 63, 1, 128, 0, 0, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 1, 128, 28, 0, 255, 255, 0, 0, 192, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 28, 0, 255, 255 ), +"array_index_data": PoolByteArray( 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 2, 0, 4, 0, 5, 0, 6, 0, 5, 0, 7, 0, 6, 0, 8, 0, 9, 0, 10, 0, 9, 0, 11, 0, 10, 0, 12, 0, 13, 0, 14, 0, 13, 0, 15, 0, 14, 0, 16, 0, 17, 0, 18, 0, 17, 0, 19, 0, 18, 0, 20, 0, 21, 0, 22, 0, 21, 0, 23, 0, 22, 0, 24, 0, 25, 0, 26, 0, 25, 0, 27, 0, 26, 0, 28, 0, 29, 0, 30, 0, 29, 0, 31, 0, 30, 0, 32, 0, 33, 0, 34, 0, 33, 0, 35, 0, 34, 0, 36, 0, 37, 0, 38, 0, 37, 0, 39, 0, 38, 0, 40, 0, 41, 0, 42, 0, 41, 0, 43, 0, 42, 0, 44, 0, 45, 0, 46, 0, 45, 0, 47, 0, 46, 0, 48, 0, 49, 0, 50, 0, 49, 0, 51, 0, 50, 0, 52, 0, 53, 0, 54, 0, 53, 0, 55, 0, 54, 0, 56, 0, 57, 0, 58, 0, 57, 0, 59, 0, 58, 0, 60, 0, 61, 0, 62, 0, 61, 0, 63, 0, 62, 0, 64, 0, 65, 0, 66, 0, 65, 0, 67, 0, 66, 0, 68, 0, 69, 0, 70, 0, 69, 0, 71, 0, 70, 0, 72, 0, 73, 0, 74, 0, 73, 0, 75, 0, 74, 0, 76, 0, 77, 0, 78, 0, 77, 0, 79, 0, 78, 0, 80, 0, 81, 0, 82, 0, 81, 0, 83, 0, 82, 0, 84, 0, 85, 0, 86, 0, 85, 0, 87, 0, 86, 0, 88, 0, 89, 0, 90, 0, 89, 0, 91, 0, 90, 0, 92, 0, 93, 0, 94, 0, 93, 0, 95, 0, 94, 0, 96, 0, 97, 0, 98, 0, 97, 0, 99, 0, 98, 0, 100, 0, 101, 0, 102, 0, 101, 0, 103, 0, 102, 0, 104, 0, 105, 0, 106, 0, 105, 0, 107, 0, 106, 0, 108, 0, 109, 0, 110, 0, 109, 0, 111, 0, 110, 0, 112, 0, 113, 0, 114, 0, 113, 0, 115, 0, 114, 0, 116, 0, 117, 0, 118, 0, 117, 0, 119, 0, 118, 0, 120, 0, 121, 0, 122, 0, 121, 0, 123, 0, 122, 0, 124, 0, 125, 0, 126, 0, 125, 0, 127, 0, 126, 0, 128, 0, 129, 0, 130, 0, 129, 0, 131, 0, 130, 0, 132, 0, 133, 0, 134, 0, 133, 0, 135, 0, 134, 0, 136, 0, 137, 0, 138, 0, 137, 0, 139, 0, 138, 0, 140, 0, 141, 0, 142, 0, 141, 0, 143, 0, 142, 0, 144, 0, 145, 0, 146, 0, 145, 0, 147, 0, 146, 0, 148, 0, 149, 0, 150, 0, 149, 0, 151, 0, 150, 0, 152, 0, 153, 0, 154, 0, 153, 0, 155, 0, 154, 0, 156, 0, 157, 0, 158, 0, 157, 0, 159, 0, 158, 0, 160, 0, 161, 0, 162, 0, 161, 0, 163, 0, 162, 0, 164, 0, 165, 0, 166, 0, 165, 0, 167, 0, 166, 0, 168, 0, 169, 0, 170, 0, 169, 0, 171, 0, 170, 0, 172, 0, 173, 0, 174, 0, 173, 0, 175, 0, 174, 0, 176, 0, 177, 0, 178, 0, 177, 0, 179, 0, 178, 0, 180, 0, 181, 0, 182, 0, 181, 0, 183, 0, 182, 0, 184, 0, 185, 0, 186, 0, 185, 0, 187, 0, 186, 0, 188, 0, 189, 0, 190, 0, 189, 0, 191, 0, 190, 0, 192, 0, 193, 0, 194, 0, 193, 0, 195, 0, 194, 0, 196, 0, 197, 0, 198, 0, 197, 0, 199, 0, 198, 0, 200, 0, 201, 0, 202, 0, 201, 0, 203, 0, 202, 0, 204, 0, 205, 0, 206, 0, 205, 0, 207, 0, 206, 0, 208, 0, 209, 0, 210, 0, 209, 0, 211, 0, 210, 0, 212, 0, 213, 0, 214, 0, 213, 0, 215, 0, 214, 0, 216, 0, 217, 0, 218, 0, 217, 0, 219, 0, 218, 0, 220, 0, 221, 0, 222, 0, 221, 0, 223, 0, 222, 0, 224, 0, 225, 0, 226, 0, 225, 0, 227, 0, 226, 0, 228, 0, 229, 0, 230, 0, 229, 0, 231, 0, 230, 0, 232, 0, 233, 0, 234, 0, 233, 0, 235, 0, 234, 0, 236, 0, 237, 0, 238, 0, 237, 0, 239, 0, 238, 0, 240, 0, 241, 0, 242, 0, 241, 0, 243, 0, 242, 0, 244, 0, 245, 0, 246, 0, 245, 0, 247, 0, 246, 0, 248, 0, 249, 0, 250, 0, 249, 0, 251, 0, 250, 0, 252, 0, 253, 0, 254, 0, 253, 0, 255, 0, 254, 0, 0, 1, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 4, 1, 5, 1, 6, 1, 5, 1, 7, 1, 6, 1, 8, 1, 9, 1, 10, 1, 9, 1, 11, 1, 10, 1, 12, 1, 13, 1, 14, 1, 13, 1, 15, 1, 14, 1 ), "blend_shape_data": [ ], "format": 2194699, -"index_count": 348, +"index_count": 408, "material": SubResource( 6 ), "name": "0,0.5,1,0,1,1,1,1", "primitive": 4, "skeleton_aabb": [ ], -"vertex_count": 232 +"vertex_count": 272 } [sub_resource type="SpatialMaterial" id=4] @@ -50,7 +52,7 @@ VOXELS = [ { } ] [sub_resource type="ConcavePolygonShape" id=8] -data = PoolVector3Array( 0, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 0, 0, 0.5, 0, 0.5, 0.5, 0, 0, 1, 0, 0.5, 0.5, 0, 0.5, 1, 0, 0, 1, 0.5, 0, 1, 0.5, 0, 0.5, 0, 0, 1, 0.5, 0, 0.5, 0, 0, 0.5, 0, 0, 1, 0.5, 0.5, 1, 0.5, 0, 1, 0.5, 0.5, 1.5, 0.5, 0, 1, 0.5, 0, 1.5, 0.5, 0.5, 1.5, 0, 0, 1, 0, 0.5, 1, 0, 0, 1.5, 0, 0.5, 1, 0, 0.5, 1.5, 0, 0, 1.5, 0.5, 0, 1.5, 0.5, 0, 1, 0, 0, 1.5, 0.5, 0, 1, 0, 0, 1, 0, 0, 1.5, 0.5, 0.5, 1.5, 0.5, 0, 1.5, 0, 0.5, 1.5, 0.5, 0, 1.5, 0, 0, 1.5, 0, 0.5, 1.5, 1, 0.5, 0, 1, 0, 0, 1, 0.5, 0.5, 1, 0, 0, 1, 0, 0.5, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 1, 0.5, 0.5, 0.5, 0.5, 0, 1, 0.5, 0, 1, 0.5, 0.5, 1, 0, 0, 1, 0.5, 0, 0.5, 0, 0, 1, 0.5, 0, 0.5, 0.5, 0, 0.5, 0, 0, 1, 0, 0.5, 1, 0, 0, 0.5, 0, 0.5, 1, 0, 0, 0.5, 0, 0, 0.5, 0, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 0.5, 1, 0.5, 1, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 1, 0.5, 1, 1, 0, 1, 1, 0, 0.5, 0.5, 0, 1, 1, 0, 0.5, 0.5, 0, 0.5, 0.5, 0, 1, 1, 0.5, 1, 1, 0, 1, 0.5, 0.5, 1, 1, 0, 1, 0.5, 0, 1, 0.5, 0.5, 1, 1, 0.5, 1, 1, 0.5, 0.5, 1.5, 0.5, 1, 1, 0.5, 0.5, 1.5, 0.5, 0.5, 1.5, 0.5, 1, 1.5, 0, 0.5, 1.5, 0.5, 0.5, 1, 0, 0.5, 1.5, 0.5, 0.5, 1, 0.5, 0.5, 1, 0, 0.5, 1.5, 0, 1, 1.5, 0, 0.5, 1, 0, 1, 1.5, 0, 0.5, 1, 0, 0.5, 1, 0, 1, 1, 0.5, 1.5, 1, 0.5, 1, 1.5, 0.5, 1.5, 1, 0.5, 1, 1.5, 0.5, 1, 1.5, 0.5, 1.5, 1, 0, 1, 1, 0.5, 1, 1, 0, 1.5, 1, 0.5, 1, 1, 0.5, 1.5, 1, 0, 1.5, 1.5, 0, 1.5, 1.5, 0, 1, 1, 0, 1.5, 1.5, 0, 1, 1, 0, 1, 1, 0, 1.5, 1, 0, 1.5, 1, 0.5, 1.5, 1, 0, 2, 1, 0.5, 1.5, 1, 0.5, 2, 1, 0, 2, 1.5, 0, 2, 1.5, 0, 1.5, 1, 0, 2, 1.5, 0, 1.5, 1, 0, 1.5, 1, 0, 2, 1.5, 0.5, 2, 1.5, 0, 2, 1.5, 0.5, 2.5, 1.5, 0, 2, 1.5, 0, 2.5, 1.5, 0.5, 2.5, 1, 0.5, 2.5, 1, 0.5, 2, 1.5, 0.5, 2.5, 1, 0.5, 2, 1.5, 0.5, 2, 1.5, 0.5, 2.5, 1, 0, 2, 1, 0.5, 2, 1, 0, 2.5, 1, 0.5, 2, 1, 0.5, 2.5, 1, 0, 2.5, 1.5, 0, 2.5, 1.5, 0, 2, 1, 0, 2.5, 1.5, 0, 2, 1, 0, 2, 1, 0, 2.5, 1.5, 0.5, 2.5, 1.5, 0, 2.5, 1, 0.5, 2.5, 1.5, 0, 2.5, 1, 0, 2.5, 1, 0.5, 2.5, 1.5, 1, 1.5, 1.5, 0.5, 1.5, 1.5, 1, 2, 1.5, 0.5, 1.5, 1.5, 0.5, 2, 1.5, 1, 2, 1, 1, 2, 1, 1, 1.5, 1.5, 1, 2, 1, 1, 1.5, 1.5, 1, 1.5, 1.5, 1, 2, 1.5, 0.5, 1.5, 1.5, 1, 1.5, 1, 0.5, 1.5, 1.5, 1, 1.5, 1, 1, 1.5, 1, 0.5, 1.5, 1, 0.5, 1.5, 1, 1, 1.5, 1, 0.5, 2, 1, 1, 1.5, 1, 1, 2, 1, 0.5, 2, 1.5, 1, 2, 1.5, 0.5, 2, 1, 1, 2, 1.5, 0.5, 2, 1, 0.5, 2, 1, 1, 2, 1.5, 0.5, 1.5, 1.5, 0.5, 1, 2, 0.5, 1.5, 1.5, 0.5, 1, 2, 0.5, 1, 2, 0.5, 1.5, 2, 0, 1.5, 2, 0, 1, 1.5, 0, 1.5, 2, 0, 1, 1.5, 0, 1, 1.5, 0, 1.5, 2, 0.5, 1.5, 2, 0, 1.5, 2, 0.5, 2, 2, 0, 1.5, 2, 0, 2, 2, 0.5, 2, 1.5, 0.5, 2, 1.5, 0.5, 1.5, 2, 0.5, 2, 1.5, 0.5, 1.5, 2, 0.5, 1.5, 2, 0.5, 2, 2, 0, 2, 2, 0, 1.5, 1.5, 0, 2, 2, 0, 1.5, 1.5, 0, 1.5, 1.5, 0, 2, 2, 0.5, 2, 2, 0, 2, 1.5, 0.5, 2, 2, 0, 2, 1.5, 0, 2, 1.5, 0.5, 2, 1.5, 0.5, 1, 1.5, 0.5, 0.5, 2, 0.5, 1, 1.5, 0.5, 0.5, 2, 0.5, 0.5, 2, 0.5, 1, 2, 0, 0.5, 2, 0.5, 0.5, 1.5, 0, 0.5, 2, 0.5, 0.5, 1.5, 0.5, 0.5, 1.5, 0, 0.5, 2, 0, 1, 2, 0, 0.5, 1.5, 0, 1, 2, 0, 0.5, 1.5, 0, 0.5, 1.5, 0, 1, 2.5, 0.5, 1, 2.5, 0, 1, 2.5, 0.5, 1.5, 2.5, 0, 1, 2.5, 0, 1.5, 2.5, 0.5, 1.5, 2, 0.5, 1.5, 2, 0.5, 1, 2.5, 0.5, 1.5, 2, 0.5, 1, 2.5, 0.5, 1, 2.5, 0.5, 1.5, 2.5, 0, 1.5, 2.5, 0, 1, 2, 0, 1.5, 2.5, 0, 1, 2, 0, 1, 2, 0, 1.5, 2.5, 0.5, 1.5, 2.5, 0, 1.5, 2, 0.5, 1.5, 2.5, 0, 1.5, 2, 0, 1.5, 2, 0.5, 1.5, 2.5, 0.5, 0.5, 2.5, 0, 0.5, 2.5, 0.5, 1, 2.5, 0, 0.5, 2.5, 0, 1, 2.5, 0.5, 1, 2, 0.5, 1, 2, 0.5, 0.5, 2.5, 0.5, 1, 2, 0.5, 0.5, 2.5, 0.5, 0.5, 2.5, 0.5, 1, 2.5, 0, 0.5, 2.5, 0.5, 0.5, 2, 0, 0.5, 2.5, 0.5, 0.5, 2, 0.5, 0.5, 2, 0, 0.5, 2.5, 0, 1, 2.5, 0, 0.5, 2, 0, 1, 2.5, 0, 0.5, 2, 0, 0.5, 2, 0, 1, 0.5, 1, 1, 0.5, 0.5, 1, 0.5, 1, 1.5, 0.5, 0.5, 1, 0.5, 0.5, 1.5, 0.5, 1, 1.5, 0, 1, 1.5, 0, 1, 1, 0.5, 1, 1.5, 0, 1, 1, 0.5, 1, 1, 0.5, 1, 1.5, 0.5, 0.5, 1, 0.5, 1, 1, 0, 0.5, 1, 0.5, 1, 1, 0, 1, 1, 0, 0.5, 1, 0, 0.5, 1, 0, 1, 1, 0, 0.5, 1.5, 0, 1, 1, 0, 1, 1.5, 0, 0.5, 1.5, 0.5, 1, 1.5, 0.5, 0.5, 1.5, 0, 1, 1.5, 0.5, 0.5, 1.5, 0, 0.5, 1.5, 0, 1, 1.5 ) +data = PoolVector3Array( 0, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 1, 0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 0, 0, 0.5, 0, 0.5, 0.5, 0, 0, 1, 0, 0.5, 0.5, 0, 0.5, 1, 0, 0, 1, 0.5, 0, 1, 0.5, 0, 0.5, 0, 0, 1, 0.5, 0, 0.5, 0, 0, 0.5, 0, 0, 1, 0.5, 0.5, 1, 0.5, 0, 1, 0.5, 0.5, 1.5, 0.5, 0, 1, 0.5, 0, 1.5, 0.5, 0.5, 1.5, 0, 0, 1, 0, 0.5, 1, 0, 0, 1.5, 0, 0.5, 1, 0, 0.5, 1.5, 0, 0, 1.5, 0.5, 0, 1.5, 0.5, 0, 1, 0, 0, 1.5, 0.5, 0, 1, 0, 0, 1, 0, 0, 1.5, 0.5, 0.5, 1.5, 0.5, 0, 1.5, 0, 0.5, 1.5, 0.5, 0, 1.5, 0, 0, 1.5, 0, 0.5, 1.5, 0.5, 1, 1, 0.5, 0.5, 1, 0.5, 1, 1.5, 0.5, 0.5, 1, 0.5, 0.5, 1.5, 0.5, 1, 1.5, 0, 1, 1.5, 0, 1, 1, 0.5, 1, 1.5, 0, 1, 1, 0.5, 1, 1, 0.5, 1, 1.5, 0.5, 0.5, 1, 0.5, 1, 1, 0, 0.5, 1, 0.5, 1, 1, 0, 1, 1, 0, 0.5, 1, 0, 0.5, 1, 0, 1, 1, 0, 0.5, 1.5, 0, 1, 1, 0, 1, 1.5, 0, 0.5, 1.5, 0.5, 1, 1.5, 0.5, 0.5, 1.5, 0, 1, 1.5, 0.5, 0.5, 1.5, 0, 0.5, 1.5, 0, 1, 1.5, 1, 0.5, 0, 1, 0, 0, 1, 0.5, 0.5, 1, 0, 0, 1, 0, 0.5, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 1, 0.5, 0.5, 0.5, 0.5, 0, 1, 0.5, 0, 1, 0.5, 0.5, 1, 0, 0, 1, 0.5, 0, 0.5, 0, 0, 1, 0.5, 0, 0.5, 0.5, 0, 0.5, 0, 0, 1, 0, 0.5, 1, 0, 0, 0.5, 0, 0.5, 1, 0, 0, 0.5, 0, 0, 0.5, 0, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 0.5, 1, 0.5, 1, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 1, 0.5, 1, 1, 0, 1, 1, 0, 0.5, 0.5, 0, 1, 1, 0, 0.5, 0.5, 0, 0.5, 0.5, 0, 1, 1, 0.5, 1, 1, 0, 1, 0.5, 0.5, 1, 1, 0, 1, 0.5, 0, 1, 0.5, 0.5, 1, 1, 0.5, 1, 1, 0.5, 0.5, 1.5, 0.5, 1, 1, 0.5, 0.5, 1.5, 0.5, 0.5, 1.5, 0.5, 1, 1.5, 0, 0.5, 1.5, 0.5, 0.5, 1, 0, 0.5, 1.5, 0.5, 0.5, 1, 0.5, 0.5, 1, 0, 0.5, 1.5, 0, 1, 1.5, 0, 0.5, 1, 0, 1, 1.5, 0, 0.5, 1, 0, 0.5, 1, 0, 1, 1, 0.5, 1.5, 1, 0.5, 1, 1.5, 0.5, 1.5, 1, 0.5, 1, 1.5, 0.5, 1, 1.5, 0.5, 1.5, 1, 0, 1, 1, 0.5, 1, 1, 0, 1.5, 1, 0.5, 1, 1, 0.5, 1.5, 1, 0, 1.5, 1.5, 0, 1.5, 1.5, 0, 1, 1, 0, 1.5, 1.5, 0, 1, 1, 0, 1, 1, 0, 1.5, 1, 0, 1.5, 1, 0.5, 1.5, 1, 0, 2, 1, 0.5, 1.5, 1, 0.5, 2, 1, 0, 2, 1.5, 0, 2, 1.5, 0, 1.5, 1, 0, 2, 1.5, 0, 1.5, 1, 0, 1.5, 1, 0, 2, 1.5, 0.5, 2, 1.5, 0, 2, 1.5, 0.5, 2.5, 1.5, 0, 2, 1.5, 0, 2.5, 1.5, 0.5, 2.5, 1, 0.5, 2.5, 1, 0.5, 2, 1.5, 0.5, 2.5, 1, 0.5, 2, 1.5, 0.5, 2, 1.5, 0.5, 2.5, 1, 0, 2, 1, 0.5, 2, 1, 0, 2.5, 1, 0.5, 2, 1, 0.5, 2.5, 1, 0, 2.5, 1.5, 0, 2.5, 1.5, 0, 2, 1, 0, 2.5, 1.5, 0, 2, 1, 0, 2, 1, 0, 2.5, 1.5, 0.5, 2.5, 1.5, 0, 2.5, 1, 0.5, 2.5, 1.5, 0, 2.5, 1, 0, 2.5, 1, 0.5, 2.5, 1.5, 1, 1.5, 1.5, 0.5, 1.5, 1.5, 1, 2, 1.5, 0.5, 1.5, 1.5, 0.5, 2, 1.5, 1, 2, 1, 1, 2, 1, 1, 1.5, 1.5, 1, 2, 1, 1, 1.5, 1.5, 1, 1.5, 1.5, 1, 2, 1.5, 0.5, 1.5, 1.5, 1, 1.5, 1, 0.5, 1.5, 1.5, 1, 1.5, 1, 1, 1.5, 1, 0.5, 1.5, 1, 0.5, 1.5, 1, 1, 1.5, 1, 0.5, 2, 1, 1, 1.5, 1, 1, 2, 1, 0.5, 2, 1.5, 1, 2, 1.5, 0.5, 2, 1, 1, 2, 1.5, 0.5, 2, 1, 0.5, 2, 1, 1, 2, 1.5, 0.5, 1, 1.5, 0.5, 0.5, 2, 0.5, 1, 1.5, 0.5, 0.5, 2, 0.5, 0.5, 2, 0.5, 1, 2, 0, 0.5, 2, 0.5, 0.5, 1.5, 0, 0.5, 2, 0.5, 0.5, 1.5, 0.5, 0.5, 1.5, 0, 0.5, 2, 0, 1, 2, 0, 0.5, 1.5, 0, 1, 2, 0, 0.5, 1.5, 0, 0.5, 1.5, 0, 1, 1.5, 0.5, 1.5, 1.5, 0.5, 1, 2, 0.5, 1.5, 1.5, 0.5, 1, 2, 0.5, 1, 2, 0.5, 1.5, 2, 0, 1.5, 2, 0, 1, 1.5, 0, 1.5, 2, 0, 1, 1.5, 0, 1, 1.5, 0, 1.5, 2, 0.5, 1.5, 2, 0, 1.5, 2, 0.5, 2, 2, 0, 1.5, 2, 0, 2, 2, 0.5, 2, 1.5, 0.5, 2, 1.5, 0.5, 1.5, 2, 0.5, 2, 1.5, 0.5, 1.5, 2, 0.5, 1.5, 2, 0.5, 2, 2, 0, 2, 2, 0, 1.5, 1.5, 0, 2, 2, 0, 1.5, 1.5, 0, 1.5, 1.5, 0, 2, 2, 0.5, 2, 2, 0, 2, 1.5, 0.5, 2, 2, 0, 2, 1.5, 0, 2, 1.5, 0.5, 2, 2.5, 0.5, 0.5, 2.5, 0, 0.5, 2.5, 0.5, 1, 2.5, 0, 0.5, 2.5, 0, 1, 2.5, 0.5, 1, 2, 0.5, 1, 2, 0.5, 0.5, 2.5, 0.5, 1, 2, 0.5, 0.5, 2.5, 0.5, 0.5, 2.5, 0.5, 1, 2.5, 0, 0.5, 2.5, 0.5, 0.5, 2, 0, 0.5, 2.5, 0.5, 0.5, 2, 0.5, 0.5, 2, 0, 0.5, 2.5, 0, 1, 2.5, 0, 0.5, 2, 0, 1, 2.5, 0, 0.5, 2, 0, 0.5, 2, 0, 1, 2.5, 0.5, 1, 2.5, 0, 1, 2.5, 0.5, 1.5, 2.5, 0, 1, 2.5, 0, 1.5, 2.5, 0.5, 1.5, 2, 0.5, 1.5, 2, 0.5, 1, 2.5, 0.5, 1.5, 2, 0.5, 1, 2.5, 0.5, 1, 2.5, 0.5, 1.5, 2.5, 0, 1.5, 2.5, 0, 1, 2, 0, 1.5, 2.5, 0, 1, 2, 0, 1, 2, 0, 1.5, 2.5, 0.5, 1.5, 2.5, 0, 1.5, 2, 0.5, 1.5, 2.5, 0, 1.5, 2, 0, 1.5, 2, 0.5, 1.5, -1, 0.5, 0.5, -1, 0, 0.5, -1, 0.5, 1, -1, 0, 0.5, -1, 0, 1, -1, 0.5, 1, -1.5, 0.5, 1, -1.5, 0.5, 0.5, -1, 0.5, 1, -1.5, 0.5, 0.5, -1, 0.5, 0.5, -1, 0.5, 1, -1.5, 0, 0.5, -1.5, 0.5, 0.5, -1.5, 0, 1, -1.5, 0.5, 0.5, -1.5, 0.5, 1, -1.5, 0, 1, -1, 0, 1, -1, 0, 0.5, -1.5, 0, 1, -1, 0, 0.5, -1.5, 0, 0.5, -1.5, 0, 1, -1, 0.5, 1, -1, 0, 1, -1.5, 0.5, 1, -1, 0, 1, -1.5, 0, 1, -1.5, 0.5, 1, -1, 0.5, 0, -1, 0, 0, -1, 0.5, 0.5, -1, 0, 0, -1, 0, 0.5, -1, 0.5, 0.5, -1.5, 0.5, 0.5, -1.5, 0.5, 0, -1, 0.5, 0.5, -1.5, 0.5, 0, -1, 0.5, 0, -1, 0.5, 0.5, -1, 0, 0, -1, 0.5, 0, -1.5, 0, 0, -1, 0.5, 0, -1.5, 0.5, 0, -1.5, 0, 0, -1.5, 0, 0, -1.5, 0.5, 0, -1.5, 0, 0.5, -1.5, 0.5, 0, -1.5, 0.5, 0.5, -1.5, 0, 0.5, -1, 0, 0.5, -1, 0, 0, -1.5, 0, 0.5, -1, 0, 0, -1.5, 0, 0, -1.5, 0, 0.5 ) [node name="world" type="Spatial"] @@ -97,7 +99,11 @@ script = ExtResource( 12 ) [node name="placer" type="Spatial" parent="player"] script = ExtResource( 13 ) +[node name="control" type="Node" parent="player"] +script = ExtResource( 15 ) + [node name="pointer" type="Spatial" parent="."] +script = ExtResource( 16 ) [node name="base" type="MeshInstance" parent="pointer"] visible = false @@ -111,6 +117,8 @@ script = ExtResource( 4 ) static_body = true voxel_set = SubResource( 5 ) VOXELS = { +Vector3( -3, 0, 0 ): 2, +Vector3( -3, 0, 1 ): 2, Vector3( 0, 0, 0 ): 0, Vector3( 0, 0, 1 ): 0, Vector3( 0, 0, 2 ): 0, -- cgit v1.2.3-54-g00ecf