diff --git a/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.md5 b/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.md5 new file mode 100644 index 0000000..3dffaf2 --- /dev/null +++ b/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.md5 @@ -0,0 +1,3 @@ +source_md5="8aa11b5093dfa6e5ad8586cfd48b6e88" +dest_md5="1922a2eba76828665cd680a720666fe8" + diff --git a/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.stex b/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.stex new file mode 100644 index 0000000..70d73cc Binary files /dev/null and b/client/.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.stex differ diff --git a/client/art/entities/player/dev_player.aseprite b/client/art/entities/player/dev_player.aseprite new file mode 100644 index 0000000..cc40d82 Binary files /dev/null and b/client/art/entities/player/dev_player.aseprite differ diff --git a/client/art/entities/player/dev_player.png b/client/art/entities/player/dev_player.png new file mode 100644 index 0000000..c1b36ab Binary files /dev/null and b/client/art/entities/player/dev_player.png differ diff --git a/client/art/entities/player/dev_player.png.import b/client/art/entities/player/dev_player.png.import new file mode 100644 index 0000000..6d18a87 --- /dev/null +++ b/client/art/entities/player/dev_player.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/entities/player/dev_player.png" +dest_files=[ "res://.import/dev_player.png-a3e490acef445550df71bca0ea3173dc.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/client/export_presets.cfg b/client/export_presets.cfg index 06c0264..8caa6c9 100644 --- a/client/export_presets.cfg +++ b/client/export_presets.cfg @@ -7,7 +7,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="" +export_path="builds/Family.x86_64" patch_list=PoolStringArray( ) script_export_mode=1 script_encryption_key="" diff --git a/client/nodes/Systems/PlayerPuppeteer.tscn b/client/nodes/Systems/PlayerPuppeteer.tscn new file mode 100644 index 0000000..14cb190 --- /dev/null +++ b/client/nodes/Systems/PlayerPuppeteer.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://scripts/systems/PlayerPuppeteer.gd" type="Script" id=1] +[ext_resource path="res://nodes/entities/PlayerPuppet.tscn" type="PackedScene" id=2] + +[node name="PlayerPuppeteer" type="Node2D"] +script = ExtResource( 1 ) +puppet_template = ExtResource( 2 ) diff --git a/client/nodes/entities/Player.tscn b/client/nodes/entities/Player.tscn new file mode 100644 index 0000000..2d47461 --- /dev/null +++ b/client/nodes/entities/Player.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://art/entities/player/dev_player.png" type="Texture" id=1] +[ext_resource path="res://scripts/entities/Player.gd" type="Script" id=2] + +[node name="Player" type="KinematicBody2D"] +script = ExtResource( 2 ) +__meta__ = { +"_edit_group_": true +} + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) + +[node name="Camera2D" type="Camera2D" parent="."] +current = true +zoom = Vector2( 0.5, 0.5 ) + +[node name="Line2D" type="Line2D" parent="."] +width = 4.0 +default_color = Color( 1, 0, 0, 1 ) diff --git a/client/nodes/entities/PlayerPuppet.tscn b/client/nodes/entities/PlayerPuppet.tscn new file mode 100644 index 0000000..1a0d40b --- /dev/null +++ b/client/nodes/entities/PlayerPuppet.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://art/entities/player/dev_player.png" type="Texture" id=1] + +[node name="PlayerPuppet" type="Sprite"] +texture = ExtResource( 1 ) diff --git a/client/nodes/tileset.tres b/client/nodes/tileset.tres index c7fb33a..0e36416 100644 --- a/client/nodes/tileset.tres +++ b/client/nodes/tileset.tres @@ -1,4 +1,4 @@ -[gd_resource type="TileSet" load_steps=14 format=2] +[gd_resource type="TileSet" load_steps=391 format=2] [ext_resource path="res://art/tiles/ground/grass.png" type="Texture" id=1] [ext_resource path="res://art/tiles/ground/dirt.png" type="Texture" id=2] @@ -14,6 +14,1514 @@ [ext_resource path="res://art/tiles/floor/black_stone_floor.png" type="Texture" id=12] [ext_resource path="res://art/tiles/floor/sandstone_stairs.png" type="Texture" id=13] +[sub_resource type="NavigationPolygon" id=1] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=2] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=3] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=11] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=4] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=5] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=6] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=12] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=7] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=8] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=13] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=14] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=10] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=15] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=16] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=17] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=18] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=19] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=20] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=21] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=22] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=23] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=24] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=25] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=26] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=27] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=28] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=29] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=30] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=31] +vertices = PoolVector2Array( 0, 32, 32, 32, 32, 0, 0, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=32] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=33] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=34] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=35] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=36] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=37] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=38] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=39] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=40] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=41] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=42] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=43] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=44] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=45] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=46] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=47] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=48] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=49] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=238] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=239] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=240] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=241] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=242] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=243] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=244] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=245] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=246] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=247] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=248] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=249] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=250] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=251] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=252] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=253] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=254] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=255] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=256] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=257] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=258] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=259] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=260] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=261] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=262] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=263] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=264] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=265] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=266] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=267] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=268] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=269] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=270] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=271] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=272] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=273] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=274] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=275] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=276] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=277] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=278] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=279] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=280] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=281] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=282] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=283] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=284] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=285] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=286] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=287] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=288] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=289] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=290] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=291] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=292] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=293] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=294] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=295] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=296] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=297] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=298] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=299] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=300] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=301] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=302] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=303] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=304] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=305] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=306] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=307] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=308] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=309] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=310] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=311] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=312] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=313] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=314] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=315] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=316] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=317] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=318] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=319] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=320] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=321] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=322] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=323] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=324] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=325] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=326] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=327] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=328] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=329] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=330] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=331] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=332] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=333] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=334] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=335] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=336] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=337] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=338] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=339] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=340] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=341] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=342] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=343] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=344] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=345] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=346] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=347] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=348] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=349] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=350] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=351] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=352] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=353] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=354] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=355] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=356] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=357] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=358] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=359] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=360] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=361] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=362] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=363] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=364] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=365] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=366] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=367] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=368] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=369] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=370] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=371] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=372] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=373] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=374] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=375] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=376] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=377] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=378] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=50] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=51] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=52] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=53] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=54] +vertices = PoolVector2Array( 32, 32, 0, 32, 0, 0, 32, 0 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=55] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=56] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=57] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=58] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=59] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=60] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=61] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=62] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=63] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=64] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=65] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=66] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=67] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=68] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=69] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=70] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=71] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=72] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=73] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=74] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=75] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=76] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=77] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=78] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=79] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=80] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=81] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=82] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=83] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=84] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=85] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=86] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=87] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=88] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=89] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=90] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=91] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=92] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=93] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=94] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=95] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=96] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=97] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=98] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=99] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=100] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=101] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=102] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=103] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=104] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=105] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=106] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=107] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=108] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=109] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=110] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=111] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=112] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=113] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=114] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=115] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=116] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=117] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=118] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=119] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=120] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=121] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=122] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=123] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=124] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=125] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=126] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=127] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=128] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=129] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=130] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=131] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=132] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=133] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=134] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=135] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=136] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=137] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=138] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=139] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=140] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=141] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=142] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=143] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=144] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=145] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=146] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=147] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=148] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=149] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=150] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=151] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=152] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=153] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=154] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=155] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=156] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=157] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=158] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=159] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=160] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=161] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=162] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=163] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=164] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=165] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=166] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=167] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=168] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=169] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=170] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=171] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=172] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=173] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=174] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=175] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=176] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=177] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=178] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=179] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=180] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=181] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=182] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=183] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=184] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=185] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=186] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=187] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=188] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=189] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=190] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=191] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=192] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=193] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=194] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=195] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=196] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=197] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=198] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=199] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=200] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=201] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=202] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=203] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=204] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=205] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=206] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=207] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=208] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=209] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=210] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=211] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=212] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=213] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=214] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=215] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=216] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=217] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=218] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=219] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=220] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=221] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=222] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=223] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=224] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=225] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=226] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=227] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=228] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=229] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=230] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=231] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=232] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=233] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=234] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=235] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=236] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + +[sub_resource type="NavigationPolygon" id=237] +vertices = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ) ] + [resource] 0/name = "grass.png 0" 0/texture = ExtResource( 1 ) @@ -27,7 +1535,7 @@ 0/autotile/tile_size = Vector2( 32, 32 ) 0/autotile/spacing = 0 0/autotile/occluder_map = [ ] -0/autotile/navpoly_map = [ ] +0/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 1 ), Vector2( 0, 1 ), SubResource( 2 ), Vector2( 0, 2 ), SubResource( 3 ), Vector2( 0, 3 ), SubResource( 11 ), Vector2( 1, 0 ), SubResource( 4 ), Vector2( 1, 1 ), SubResource( 5 ), Vector2( 1, 2 ), SubResource( 6 ), Vector2( 1, 3 ), SubResource( 12 ), Vector2( 2, 0 ), SubResource( 7 ), Vector2( 2, 1 ), SubResource( 8 ), Vector2( 2, 2 ), SubResource( 13 ), Vector2( 2, 3 ), SubResource( 14 ), Vector2( 3, 0 ), SubResource( 10 ), Vector2( 3, 1 ), SubResource( 15 ), Vector2( 3, 2 ), SubResource( 16 ), Vector2( 3, 3 ), SubResource( 17 ), Vector2( 4, 0 ), SubResource( 18 ), Vector2( 4, 1 ), SubResource( 19 ), Vector2( 4, 2 ), SubResource( 20 ), Vector2( 4, 3 ), SubResource( 21 ), Vector2( 4, 4 ), SubResource( 22 ), Vector2( 5, 0 ), SubResource( 23 ), Vector2( 5, 1 ), SubResource( 24 ), Vector2( 5, 2 ), SubResource( 25 ), Vector2( 5, 3 ), SubResource( 26 ), Vector2( 5, 4 ), SubResource( 27 ), Vector2( 6, 0 ), SubResource( 28 ), Vector2( 6, 1 ), SubResource( 29 ), Vector2( 6, 2 ), SubResource( 30 ), Vector2( 6, 3 ), SubResource( 31 ), Vector2( 6, 4 ), SubResource( 32 ), Vector2( 7, 0 ), SubResource( 33 ), Vector2( 7, 1 ), SubResource( 34 ), Vector2( 7, 2 ), SubResource( 35 ), Vector2( 7, 3 ), SubResource( 36 ), Vector2( 7, 4 ), SubResource( 37 ), Vector2( 8, 0 ), SubResource( 38 ), Vector2( 8, 1 ), SubResource( 39 ), Vector2( 8, 2 ), SubResource( 40 ), Vector2( 8, 3 ), SubResource( 41 ), Vector2( 8, 4 ), SubResource( 42 ), Vector2( 9, 0 ), SubResource( 43 ), Vector2( 9, 1 ), SubResource( 44 ), Vector2( 9, 2 ), SubResource( 45 ), Vector2( 9, 3 ), SubResource( 46 ), Vector2( 10, 2 ), SubResource( 47 ), Vector2( 10, 3 ), SubResource( 48 ) ] 0/autotile/priority_map = [ ] 0/autotile/z_index_map = [ ] 0/occluder_offset = Vector2( 0, 0 ) @@ -46,6 +1554,7 @@ 1/tile_mode = 0 1/occluder_offset = Vector2( 0, 0 ) 1/navigation_offset = Vector2( 0, 0 ) +1/navigation = SubResource( 49 ) 1/shape_offset = Vector2( 0, 0 ) 1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 1/shape_one_way = false @@ -64,7 +1573,7 @@ 2/autotile/tile_size = Vector2( 32, 32 ) 2/autotile/spacing = 0 2/autotile/occluder_map = [ ] -2/autotile/navpoly_map = [ ] +2/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 50 ), Vector2( 0, 1 ), SubResource( 51 ), Vector2( 0, 2 ), SubResource( 52 ), Vector2( 0, 3 ), SubResource( 53 ), Vector2( 1, 0 ), SubResource( 54 ), Vector2( 1, 1 ), SubResource( 55 ), Vector2( 1, 2 ), SubResource( 56 ), Vector2( 1, 3 ), SubResource( 57 ), Vector2( 2, 0 ), SubResource( 58 ), Vector2( 2, 1 ), SubResource( 59 ), Vector2( 2, 2 ), SubResource( 60 ), Vector2( 2, 3 ), SubResource( 61 ), Vector2( 3, 0 ), SubResource( 62 ), Vector2( 3, 1 ), SubResource( 63 ), Vector2( 3, 2 ), SubResource( 64 ), Vector2( 3, 3 ), SubResource( 65 ), Vector2( 4, 0 ), SubResource( 66 ), Vector2( 4, 1 ), SubResource( 67 ), Vector2( 4, 2 ), SubResource( 68 ), Vector2( 4, 3 ), SubResource( 69 ), Vector2( 4, 4 ), SubResource( 70 ), Vector2( 5, 0 ), SubResource( 71 ), Vector2( 5, 1 ), SubResource( 72 ), Vector2( 5, 2 ), SubResource( 73 ), Vector2( 5, 3 ), SubResource( 74 ), Vector2( 5, 4 ), SubResource( 75 ), Vector2( 6, 0 ), SubResource( 76 ), Vector2( 6, 1 ), SubResource( 77 ), Vector2( 6, 2 ), SubResource( 78 ), Vector2( 6, 3 ), SubResource( 79 ), Vector2( 6, 4 ), SubResource( 80 ), Vector2( 7, 0 ), SubResource( 81 ), Vector2( 7, 1 ), SubResource( 82 ), Vector2( 7, 2 ), SubResource( 83 ), Vector2( 7, 3 ), SubResource( 84 ), Vector2( 7, 4 ), SubResource( 85 ), Vector2( 8, 0 ), SubResource( 86 ), Vector2( 8, 1 ), SubResource( 87 ), Vector2( 8, 2 ), SubResource( 88 ), Vector2( 8, 3 ), SubResource( 89 ), Vector2( 8, 4 ), SubResource( 90 ), Vector2( 9, 0 ), SubResource( 91 ), Vector2( 9, 1 ), SubResource( 92 ), Vector2( 9, 2 ), SubResource( 93 ), Vector2( 9, 3 ), SubResource( 94 ), Vector2( 10, 2 ), SubResource( 95 ), Vector2( 10, 3 ), SubResource( 96 ) ] 2/autotile/priority_map = [ ] 2/autotile/z_index_map = [ ] 2/occluder_offset = Vector2( 0, 0 ) @@ -87,7 +1596,7 @@ 3/autotile/tile_size = Vector2( 32, 32 ) 3/autotile/spacing = 0 3/autotile/occluder_map = [ ] -3/autotile/navpoly_map = [ ] +3/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 97 ), Vector2( 0, 1 ), SubResource( 98 ), Vector2( 0, 2 ), SubResource( 99 ), Vector2( 0, 3 ), SubResource( 100 ), Vector2( 1, 0 ), SubResource( 101 ), Vector2( 1, 1 ), SubResource( 102 ), Vector2( 1, 2 ), SubResource( 103 ), Vector2( 1, 3 ), SubResource( 104 ), Vector2( 2, 0 ), SubResource( 105 ), Vector2( 2, 1 ), SubResource( 106 ), Vector2( 2, 2 ), SubResource( 107 ), Vector2( 2, 3 ), SubResource( 108 ), Vector2( 3, 0 ), SubResource( 109 ), Vector2( 3, 1 ), SubResource( 110 ), Vector2( 3, 2 ), SubResource( 111 ), Vector2( 3, 3 ), SubResource( 112 ), Vector2( 4, 0 ), SubResource( 113 ), Vector2( 4, 1 ), SubResource( 114 ), Vector2( 4, 2 ), SubResource( 115 ), Vector2( 4, 3 ), SubResource( 116 ), Vector2( 4, 4 ), SubResource( 117 ), Vector2( 5, 0 ), SubResource( 118 ), Vector2( 5, 1 ), SubResource( 119 ), Vector2( 5, 2 ), SubResource( 120 ), Vector2( 5, 3 ), SubResource( 121 ), Vector2( 5, 4 ), SubResource( 122 ), Vector2( 6, 0 ), SubResource( 123 ), Vector2( 6, 1 ), SubResource( 124 ), Vector2( 6, 2 ), SubResource( 125 ), Vector2( 6, 3 ), SubResource( 126 ), Vector2( 6, 4 ), SubResource( 127 ), Vector2( 7, 0 ), SubResource( 128 ), Vector2( 7, 1 ), SubResource( 129 ), Vector2( 7, 2 ), SubResource( 130 ), Vector2( 7, 3 ), SubResource( 131 ), Vector2( 7, 4 ), SubResource( 132 ), Vector2( 8, 0 ), SubResource( 133 ), Vector2( 8, 1 ), SubResource( 134 ), Vector2( 8, 2 ), SubResource( 135 ), Vector2( 8, 3 ), SubResource( 136 ), Vector2( 8, 4 ), SubResource( 137 ), Vector2( 9, 0 ), SubResource( 138 ), Vector2( 9, 1 ), SubResource( 139 ), Vector2( 9, 2 ), SubResource( 140 ), Vector2( 9, 3 ), SubResource( 141 ), Vector2( 10, 2 ), SubResource( 142 ), Vector2( 10, 3 ), SubResource( 143 ) ] 3/autotile/priority_map = [ ] 3/autotile/z_index_map = [ ] 3/occluder_offset = Vector2( 0, 0 ) @@ -110,7 +1619,7 @@ 4/autotile/tile_size = Vector2( 32, 32 ) 4/autotile/spacing = 0 4/autotile/occluder_map = [ ] -4/autotile/navpoly_map = [ ] +4/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 144 ), Vector2( 0, 1 ), SubResource( 145 ), Vector2( 0, 2 ), SubResource( 146 ), Vector2( 0, 3 ), SubResource( 147 ), Vector2( 1, 0 ), SubResource( 148 ), Vector2( 1, 1 ), SubResource( 149 ), Vector2( 1, 2 ), SubResource( 150 ), Vector2( 1, 3 ), SubResource( 151 ), Vector2( 2, 0 ), SubResource( 152 ), Vector2( 2, 1 ), SubResource( 153 ), Vector2( 2, 2 ), SubResource( 154 ), Vector2( 2, 3 ), SubResource( 155 ), Vector2( 3, 0 ), SubResource( 156 ), Vector2( 3, 1 ), SubResource( 157 ), Vector2( 3, 2 ), SubResource( 158 ), Vector2( 3, 3 ), SubResource( 159 ), Vector2( 4, 0 ), SubResource( 160 ), Vector2( 4, 1 ), SubResource( 161 ), Vector2( 4, 2 ), SubResource( 162 ), Vector2( 4, 3 ), SubResource( 163 ), Vector2( 4, 4 ), SubResource( 164 ), Vector2( 5, 0 ), SubResource( 165 ), Vector2( 5, 1 ), SubResource( 166 ), Vector2( 5, 2 ), SubResource( 167 ), Vector2( 5, 3 ), SubResource( 168 ), Vector2( 5, 4 ), SubResource( 169 ), Vector2( 6, 0 ), SubResource( 170 ), Vector2( 6, 1 ), SubResource( 171 ), Vector2( 6, 2 ), SubResource( 172 ), Vector2( 6, 3 ), SubResource( 173 ), Vector2( 6, 4 ), SubResource( 174 ), Vector2( 7, 0 ), SubResource( 175 ), Vector2( 7, 1 ), SubResource( 176 ), Vector2( 7, 2 ), SubResource( 177 ), Vector2( 7, 3 ), SubResource( 178 ), Vector2( 7, 4 ), SubResource( 179 ), Vector2( 8, 0 ), SubResource( 180 ), Vector2( 8, 1 ), SubResource( 181 ), Vector2( 8, 2 ), SubResource( 182 ), Vector2( 8, 3 ), SubResource( 183 ), Vector2( 8, 4 ), SubResource( 184 ), Vector2( 9, 0 ), SubResource( 185 ), Vector2( 9, 1 ), SubResource( 186 ), Vector2( 9, 2 ), SubResource( 187 ), Vector2( 9, 3 ), SubResource( 188 ), Vector2( 10, 2 ), SubResource( 189 ), Vector2( 10, 3 ), SubResource( 190 ) ] 4/autotile/priority_map = [ ] 4/autotile/z_index_map = [ ] 4/occluder_offset = Vector2( 0, 0 ) @@ -225,7 +1734,7 @@ 9/autotile/tile_size = Vector2( 32, 32 ) 9/autotile/spacing = 0 9/autotile/occluder_map = [ ] -9/autotile/navpoly_map = [ ] +9/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 191 ), Vector2( 0, 1 ), SubResource( 192 ), Vector2( 0, 2 ), SubResource( 193 ), Vector2( 0, 3 ), SubResource( 194 ), Vector2( 1, 0 ), SubResource( 195 ), Vector2( 1, 1 ), SubResource( 196 ), Vector2( 1, 2 ), SubResource( 197 ), Vector2( 1, 3 ), SubResource( 198 ), Vector2( 2, 0 ), SubResource( 199 ), Vector2( 2, 1 ), SubResource( 200 ), Vector2( 2, 2 ), SubResource( 201 ), Vector2( 2, 3 ), SubResource( 202 ), Vector2( 3, 0 ), SubResource( 203 ), Vector2( 3, 1 ), SubResource( 204 ), Vector2( 3, 2 ), SubResource( 205 ), Vector2( 3, 3 ), SubResource( 206 ), Vector2( 4, 0 ), SubResource( 207 ), Vector2( 4, 1 ), SubResource( 208 ), Vector2( 4, 2 ), SubResource( 209 ), Vector2( 4, 3 ), SubResource( 210 ), Vector2( 4, 4 ), SubResource( 211 ), Vector2( 5, 0 ), SubResource( 212 ), Vector2( 5, 1 ), SubResource( 213 ), Vector2( 5, 2 ), SubResource( 214 ), Vector2( 5, 3 ), SubResource( 215 ), Vector2( 5, 4 ), SubResource( 216 ), Vector2( 6, 0 ), SubResource( 217 ), Vector2( 6, 1 ), SubResource( 218 ), Vector2( 6, 2 ), SubResource( 219 ), Vector2( 6, 3 ), SubResource( 220 ), Vector2( 6, 4 ), SubResource( 221 ), Vector2( 7, 0 ), SubResource( 222 ), Vector2( 7, 1 ), SubResource( 223 ), Vector2( 7, 2 ), SubResource( 224 ), Vector2( 7, 3 ), SubResource( 225 ), Vector2( 7, 4 ), SubResource( 226 ), Vector2( 8, 0 ), SubResource( 227 ), Vector2( 8, 1 ), SubResource( 228 ), Vector2( 8, 2 ), SubResource( 229 ), Vector2( 8, 3 ), SubResource( 230 ), Vector2( 8, 4 ), SubResource( 231 ), Vector2( 9, 0 ), SubResource( 232 ), Vector2( 9, 1 ), SubResource( 233 ), Vector2( 9, 2 ), SubResource( 234 ), Vector2( 9, 3 ), SubResource( 235 ), Vector2( 10, 2 ), SubResource( 236 ), Vector2( 10, 3 ), SubResource( 237 ) ] 9/autotile/priority_map = [ ] 9/autotile/z_index_map = [ ] 9/occluder_offset = Vector2( 0, 0 ) @@ -248,7 +1757,7 @@ 10/autotile/tile_size = Vector2( 32, 32 ) 10/autotile/spacing = 0 10/autotile/occluder_map = [ ] -10/autotile/navpoly_map = [ ] +10/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 238 ), Vector2( 0, 1 ), SubResource( 239 ), Vector2( 0, 2 ), SubResource( 240 ), Vector2( 0, 3 ), SubResource( 241 ), Vector2( 1, 0 ), SubResource( 242 ), Vector2( 1, 1 ), SubResource( 243 ), Vector2( 1, 2 ), SubResource( 244 ), Vector2( 1, 3 ), SubResource( 245 ), Vector2( 2, 0 ), SubResource( 246 ), Vector2( 2, 1 ), SubResource( 247 ), Vector2( 2, 2 ), SubResource( 248 ), Vector2( 2, 3 ), SubResource( 249 ), Vector2( 3, 0 ), SubResource( 250 ), Vector2( 3, 1 ), SubResource( 251 ), Vector2( 3, 2 ), SubResource( 252 ), Vector2( 3, 3 ), SubResource( 253 ), Vector2( 4, 0 ), SubResource( 254 ), Vector2( 4, 1 ), SubResource( 255 ), Vector2( 4, 2 ), SubResource( 256 ), Vector2( 4, 3 ), SubResource( 257 ), Vector2( 4, 4 ), SubResource( 258 ), Vector2( 5, 0 ), SubResource( 259 ), Vector2( 5, 1 ), SubResource( 260 ), Vector2( 5, 2 ), SubResource( 261 ), Vector2( 5, 3 ), SubResource( 262 ), Vector2( 5, 4 ), SubResource( 263 ), Vector2( 6, 0 ), SubResource( 264 ), Vector2( 6, 1 ), SubResource( 265 ), Vector2( 6, 2 ), SubResource( 266 ), Vector2( 6, 3 ), SubResource( 267 ), Vector2( 6, 4 ), SubResource( 268 ), Vector2( 7, 0 ), SubResource( 269 ), Vector2( 7, 1 ), SubResource( 270 ), Vector2( 7, 2 ), SubResource( 271 ), Vector2( 7, 3 ), SubResource( 272 ), Vector2( 7, 4 ), SubResource( 273 ), Vector2( 8, 0 ), SubResource( 274 ), Vector2( 8, 1 ), SubResource( 275 ), Vector2( 8, 2 ), SubResource( 276 ), Vector2( 8, 3 ), SubResource( 277 ), Vector2( 8, 4 ), SubResource( 278 ), Vector2( 9, 0 ), SubResource( 279 ), Vector2( 9, 1 ), SubResource( 280 ), Vector2( 9, 2 ), SubResource( 281 ), Vector2( 9, 3 ), SubResource( 282 ), Vector2( 10, 2 ), SubResource( 283 ), Vector2( 10, 3 ), SubResource( 284 ) ] 10/autotile/priority_map = [ ] 10/autotile/z_index_map = [ ] 10/occluder_offset = Vector2( 0, 0 ) @@ -271,7 +1780,7 @@ 11/autotile/tile_size = Vector2( 32, 32 ) 11/autotile/spacing = 0 11/autotile/occluder_map = [ ] -11/autotile/navpoly_map = [ ] +11/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 285 ), Vector2( 0, 1 ), SubResource( 286 ), Vector2( 0, 2 ), SubResource( 287 ), Vector2( 0, 3 ), SubResource( 288 ), Vector2( 1, 0 ), SubResource( 289 ), Vector2( 1, 1 ), SubResource( 290 ), Vector2( 1, 2 ), SubResource( 291 ), Vector2( 1, 3 ), SubResource( 292 ), Vector2( 2, 0 ), SubResource( 293 ), Vector2( 2, 1 ), SubResource( 294 ), Vector2( 2, 2 ), SubResource( 295 ), Vector2( 2, 3 ), SubResource( 296 ), Vector2( 3, 0 ), SubResource( 297 ), Vector2( 3, 1 ), SubResource( 298 ), Vector2( 3, 2 ), SubResource( 299 ), Vector2( 3, 3 ), SubResource( 300 ), Vector2( 4, 0 ), SubResource( 301 ), Vector2( 4, 1 ), SubResource( 302 ), Vector2( 4, 2 ), SubResource( 303 ), Vector2( 4, 3 ), SubResource( 304 ), Vector2( 4, 4 ), SubResource( 305 ), Vector2( 5, 0 ), SubResource( 306 ), Vector2( 5, 1 ), SubResource( 307 ), Vector2( 5, 2 ), SubResource( 308 ), Vector2( 5, 3 ), SubResource( 309 ), Vector2( 5, 4 ), SubResource( 310 ), Vector2( 6, 0 ), SubResource( 311 ), Vector2( 6, 1 ), SubResource( 312 ), Vector2( 6, 2 ), SubResource( 313 ), Vector2( 6, 3 ), SubResource( 314 ), Vector2( 6, 4 ), SubResource( 315 ), Vector2( 7, 0 ), SubResource( 316 ), Vector2( 7, 1 ), SubResource( 317 ), Vector2( 7, 2 ), SubResource( 318 ), Vector2( 7, 3 ), SubResource( 319 ), Vector2( 7, 4 ), SubResource( 320 ), Vector2( 8, 0 ), SubResource( 321 ), Vector2( 8, 1 ), SubResource( 322 ), Vector2( 8, 2 ), SubResource( 323 ), Vector2( 8, 3 ), SubResource( 324 ), Vector2( 8, 4 ), SubResource( 325 ), Vector2( 9, 0 ), SubResource( 326 ), Vector2( 9, 1 ), SubResource( 327 ), Vector2( 9, 2 ), SubResource( 328 ), Vector2( 9, 3 ), SubResource( 329 ), Vector2( 10, 2 ), SubResource( 330 ), Vector2( 10, 3 ), SubResource( 331 ) ] 11/autotile/priority_map = [ ] 11/autotile/z_index_map = [ ] 11/occluder_offset = Vector2( 0, 0 ) @@ -294,7 +1803,7 @@ 12/autotile/tile_size = Vector2( 32, 32 ) 12/autotile/spacing = 0 12/autotile/occluder_map = [ ] -12/autotile/navpoly_map = [ ] +12/autotile/navpoly_map = [ Vector2( 0, 0 ), SubResource( 332 ), Vector2( 0, 1 ), SubResource( 333 ), Vector2( 0, 2 ), SubResource( 334 ), Vector2( 0, 3 ), SubResource( 335 ), Vector2( 1, 0 ), SubResource( 336 ), Vector2( 1, 1 ), SubResource( 337 ), Vector2( 1, 2 ), SubResource( 338 ), Vector2( 1, 3 ), SubResource( 339 ), Vector2( 2, 0 ), SubResource( 340 ), Vector2( 2, 1 ), SubResource( 341 ), Vector2( 2, 2 ), SubResource( 342 ), Vector2( 2, 3 ), SubResource( 343 ), Vector2( 3, 0 ), SubResource( 344 ), Vector2( 3, 1 ), SubResource( 345 ), Vector2( 3, 2 ), SubResource( 346 ), Vector2( 3, 3 ), SubResource( 347 ), Vector2( 4, 0 ), SubResource( 348 ), Vector2( 4, 1 ), SubResource( 349 ), Vector2( 4, 2 ), SubResource( 350 ), Vector2( 4, 3 ), SubResource( 351 ), Vector2( 4, 4 ), SubResource( 352 ), Vector2( 5, 0 ), SubResource( 353 ), Vector2( 5, 1 ), SubResource( 354 ), Vector2( 5, 2 ), SubResource( 355 ), Vector2( 5, 3 ), SubResource( 356 ), Vector2( 5, 4 ), SubResource( 357 ), Vector2( 6, 0 ), SubResource( 358 ), Vector2( 6, 1 ), SubResource( 359 ), Vector2( 6, 2 ), SubResource( 360 ), Vector2( 6, 3 ), SubResource( 361 ), Vector2( 6, 4 ), SubResource( 362 ), Vector2( 7, 0 ), SubResource( 363 ), Vector2( 7, 1 ), SubResource( 364 ), Vector2( 7, 2 ), SubResource( 365 ), Vector2( 7, 3 ), SubResource( 366 ), Vector2( 7, 4 ), SubResource( 367 ), Vector2( 8, 0 ), SubResource( 368 ), Vector2( 8, 1 ), SubResource( 369 ), Vector2( 8, 2 ), SubResource( 370 ), Vector2( 8, 3 ), SubResource( 371 ), Vector2( 8, 4 ), SubResource( 372 ), Vector2( 9, 0 ), SubResource( 373 ), Vector2( 9, 1 ), SubResource( 374 ), Vector2( 9, 2 ), SubResource( 375 ), Vector2( 9, 3 ), SubResource( 376 ), Vector2( 10, 2 ), SubResource( 377 ), Vector2( 10, 3 ), SubResource( 378 ) ] 12/autotile/priority_map = [ ] 12/autotile/z_index_map = [ ] 12/occluder_offset = Vector2( 0, 0 ) diff --git a/client/project.godot b/client/project.godot index 8291ada..9620efe 100644 --- a/client/project.godot +++ b/client/project.godot @@ -107,6 +107,14 @@ config/icon="res://icon.png" Nakama="*res://addons/com.heroiclabs.nakama/Nakama.gd" ServerConnection="*res://scripts/singletons/ServerConnection.gd" +[input] + +move_to_cursor={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) + ] +} + [rendering] quality/driver/driver_name="GLES2" diff --git a/client/scenes/World.tscn b/client/scenes/World.tscn index b4328e8..6d459ac 100644 --- a/client/scenes/World.tscn +++ b/client/scenes/World.tscn @@ -1,14 +1,25 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://nodes/tileset.tres" type="TileSet" id=1] [ext_resource path="res://scripts/singletons/WorldManager.gd" type="Script" id=2] +[ext_resource path="res://nodes/entities/Player.tscn" type="PackedScene" id=3] +[ext_resource path="res://nodes/Systems/PlayerPuppeteer.tscn" type="PackedScene" id=4] -[node name="World" type="Node2D"] +[node name="World" type="Navigation2D"] script = ExtResource( 2 ) tilemapPath = NodePath("TileMap") [node name="TileMap" type="TileMap" parent="."] +z_index = -15 +z_as_relative = false tile_set = ExtResource( 1 ) cell_size = Vector2( 32, 32 ) format = 1 tile_data = PoolIntArray( -393216, 2, 0, -393215, 2, 5, -393214, 2, 196609, -393213, 2, 196609, -393212, 2, 196609, -393211, 2, 6, -393210, 2, 1, -393209, 2, 1, -393208, 2, 1, -393207, 2, 1, -393206, 2, 1, -393205, 2, 1, -393204, 2, 1, -393203, 2, 1, -393202, 2, 1, -393201, 2, 2, -393200, 4, 0, -393199, 4, 1, -393198, 4, 1, -393197, 4, 1, -393196, 4, 1, -393195, 4, 1, -393194, 4, 1, -393193, 4, 1, -393192, 4, 1, -393191, 4, 1, -393190, 4, 1, -393189, 4, 1, -393188, 4, 1, -393187, 4, 1, -393186, 4, 1, -393185, 4, 1, -393184, 4, 1, -393183, 4, 2, -327680, 2, 65536, -327679, 2, 65538, -327678, 8, 4, -327677, 8, 196609, -327676, 8, 7, -327675, 2, 65536, -327674, 2, 65541, -327673, 2, 131073, -327672, 2, 131073, -327671, 2, 131073, -327670, 2, 131073, -327669, 2, 131073, -327668, 2, 131073, -327667, 2, 131073, -327666, 2, 131073, -327665, 2, 131074, -327664, 4, 131072, -327663, 4, 131073, -327662, 4, 131073, -327661, 4, 131073, -327660, 4, 131073, -327659, 4, 131073, -327658, 4, 131073, -327657, 4, 131073, -327656, 4, 131073, -327655, 4, 65542, -327654, 4, 65537, -327653, 4, 65537, -327652, 4, 65537, -327651, 4, 65537, -327650, 4, 65537, -327649, 4, 65537, -327648, 4, 65537, -327647, 4, 65538, -262144, 2, 65536, -262143, 2, 65538, -262142, 8, 65539, -262141, 9, 3, -262140, 8, 65539, -262139, 2, 65536, -262138, 2, 65538, -262137, 1, 0, -262136, 1, 0, -262135, 1, 0, -262134, 1, 0, -262133, 1, 0, -262132, 1, 0, -262131, 1, 0, -262130, 1, 0, -262129, 1, 0, -262128, 1, 0, -262127, 1, 0, -262126, 1, 0, -262125, 1, 0, -262124, 1, 0, -262123, 1, 0, -262122, 1, 0, -262121, 1, 0, -262120, 1, 0, -262119, 4, 65536, -262118, 4, 65537, -262117, 4, 65537, -262116, 4, 65537, -262115, 4, 65537, -262114, 4, 65537, -262113, 4, 65537, -262112, 4, 65537, -262111, 4, 65538, -196608, 2, 65536, -196607, 2, 65538, -196606, 8, 131075, -196605, 9, 131075, -196604, 8, 131075, -196603, 2, 65536, -196602, 2, 65538, -196601, 1, 0, -196600, 1, 0, -196599, 1, 0, -196598, 1, 0, -196597, 1, 0, -196596, 1, 0, -196595, 1, 0, -196594, 1, 0, -196593, 1, 0, -196592, 1, 0, -196591, 1, 0, -196590, 1, 0, -196589, 1, 0, -196588, 1, 0, -196587, 1, 0, -196586, 1, 0, -196585, 1, 0, -196584, 1, 0, -196583, 4, 65536, -196582, 4, 65537, -196581, 4, 65537, -196580, 4, 65537, -196579, 4, 65537, -196578, 4, 65537, -196577, 4, 65537, -196576, 4, 65537, -196575, 4, 65538, -131072, 2, 65536, -131071, 2, 131077, -131070, 2, 1, -131069, 2, 1, -131068, 2, 1, -131067, 2, 131078, -131066, 2, 65538, -131065, 1, 0, -131064, 1, 0, -131063, 2, 0, -131062, 2, 1, -131061, 2, 1, -131060, 2, 1, -131059, 2, 1, -131058, 2, 1, -131057, 2, 2, -131056, 4, 0, -131055, 4, 1, -131054, 4, 1, -131053, 4, 1, -131052, 4, 1, -131051, 4, 1, -131050, 4, 2, -131049, 1, 0, -131048, 1, 0, -131047, 4, 65536, -131046, 4, 65537, -131045, 4, 65537, -131044, 4, 65537, -131043, 4, 65537, -131042, 4, 65537, -131041, 4, 65537, -131040, 4, 65537, -131039, 4, 65538, -65536, 2, 131072, -65535, 2, 131073, -65534, 2, 131073, -65533, 2, 131073, -65532, 2, 131073, -65531, 2, 131073, -65530, 2, 131074, -65529, 1, 0, -65528, 1, 0, -65527, 2, 131072, -65526, 2, 131073, -65525, 2, 131073, -65524, 2, 131073, -65523, 2, 131073, -65522, 2, 131073, -65521, 2, 131074, -65520, 4, 65536, -65519, 4, 65537, -65518, 4, 65537, -65517, 4, 65537, -65516, 4, 65537, -65515, 4, 65537, -65514, 4, 65538, -65513, 1, 0, -65512, 1, 0, -65511, 4, 65536, -65510, 4, 65537, -65509, 4, 65537, -65508, 4, 65537, -65507, 4, 65537, -65506, 4, 65537, -65505, 4, 65537, -65504, 4, 65537, -65503, 4, 65538, 0, 0, 0, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 1, 6, 0, 2, 7, 1, 0, 8, 1, 0, 9, 0, 0, 10, 0, 1, 11, 0, 1, 12, 0, 1, 13, 0, 1, 14, 0, 1, 15, 0, 2, 16, 4, 65540, 17, 4, 131073, 18, 4, 131073, 19, 4, 131073, 20, 4, 131073, 21, 4, 131073, 22, 4, 65543, 23, 1, 0, 24, 1, 0, 25, 4, 65540, 26, 4, 131073, 27, 4, 131073, 28, 4, 131073, 29, 4, 131073, 30, 4, 131073, 31, 4, 65542, 32, 4, 65537, 33, 4, 65538, 65536, 0, 65540, 65537, 0, 131073, 65538, 0, 131073, 65539, 0, 131073, 65540, 0, 131073, 65541, 0, 131073, 65542, 0, 65543, 65543, 1, 0, 65544, 1, 0, 65545, 0, 65536, 65546, 0, 65537, 65547, 0, 65537, 65548, 0, 65537, 65549, 0, 65537, 65550, 0, 65537, 65551, 0, 65538, 65552, 4, 65539, 65553, 5, 4, 65554, 5, 196609, 65555, 5, 196609, 65556, 5, 196609, 65557, 5, 7, 65558, 4, 131075, 65559, 1, 0, 65560, 1, 0, 65561, 4, 131075, 65562, 5, 4, 65563, 5, 196609, 65564, 5, 196609, 65565, 5, 196609, 65566, 5, 7, 65567, 4, 65536, 65568, 4, 65537, 65569, 4, 65538, 131072, 0, 65539, 131073, 7, 4, 131074, 7, 196609, 131075, 7, 196609, 131076, 7, 196609, 131077, 7, 7, 131078, 0, 65539, 131079, 1, 0, 131080, 1, 0, 131081, 0, 65536, 131082, 0, 65537, 131083, 0, 65537, 131084, 0, 65537, 131085, 0, 65537, 131086, 0, 65537, 131087, 0, 65538, 131088, 4, 65539, 131089, 5, 65539, 131090, 11, 0, 131091, 11, 1, 131092, 11, 2, 131093, 5, 196612, 131094, 5, 196610, 131095, 1, 0, 131096, 1, 0, 131097, 5, 196608, 131098, 5, 196615, 131099, 11, 0, 131100, 11, 1, 131101, 11, 2, 131102, 5, 65539, 131103, 4, 65536, 131104, 4, 65537, 131105, 4, 65538, 196608, 0, 65539, 196609, 7, 65539, 196610, 10, 0, 196611, 10, 1, 196612, 10, 2, 196613, 7, 65539, 196614, 0, 65539, 196615, 1, 0, 196616, 1, 0, 196617, 0, 65536, 196618, 0, 65537, 196619, 0, 65537, 196620, 0, 65537, 196621, 0, 65537, 196622, 0, 65537, 196623, 0, 65538, 196624, 4, 65539, 196625, 5, 65539, 196626, 11, 65536, 196627, 11, 65537, 196628, 11, 262149, 196629, 11, 196610, 196630, 1, 0, 196631, 1, 0, 196632, 1, 0, 196633, 1, 0, 196634, 11, 196608, 196635, 11, 262150, 196636, 11, 65537, 196637, 11, 65538, 196638, 5, 65539, 196639, 4, 65536, 196640, 4, 65537, 196641, 4, 65538, 262144, 0, 65539, 262145, 7, 65539, 262146, 10, 65540, 262147, 10, 131073, 262148, 10, 131074, 262149, 7, 65539, 262150, 0, 65539, 262151, 1, 0, 262152, 1, 0, 262153, 0, 65536, 262154, 0, 65537, 262155, 0, 65537, 262156, 0, 65537, 262157, 0, 65537, 262158, 0, 65537, 262159, 0, 65538, 262160, 4, 65539, 262161, 5, 65539, 262162, 11, 131072, 262163, 11, 65544, 262164, 11, 131074, 262165, 5, 4, 262166, 5, 196610, 262167, 1, 0, 262168, 1, 0, 262169, 5, 196608, 262170, 5, 7, 262171, 11, 131072, 262172, 11, 65544, 262173, 11, 131074, 262174, 5, 65539, 262175, 4, 65536, 262176, 4, 65537, 262177, 4, 65538, 327680, 0, 65539, 327681, 7, 131075, 327682, 10, 131075, 327683, 7, 196608, 327684, 7, 196609, 327685, 7, 196615, 327686, 0, 65539, 327687, 1, 0, 327688, 1, 0, 327689, 0, 65536, 327690, 0, 65537, 327691, 0, 65537, 327692, 0, 65537, 327693, 0, 65537, 327694, 0, 65537, 327695, 0, 65538, 327696, 4, 65539, 327697, 5, 196612, 327698, 5, 7, 327699, 11, 131075, 327700, 5, 4, 327701, 5, 196615, 327702, 1, 0, 327703, 1, 0, 327704, 1, 0, 327705, 1, 0, 327706, 5, 196612, 327707, 5, 7, 327708, 11, 65539, 327709, 5, 4, 327710, 5, 196615, 327711, 4, 65536, 327712, 4, 65537, 327713, 4, 65538, 393216, 0, 262148, 393217, 0, 196609, 393218, 0, 196609, 393219, 0, 196609, 393220, 0, 196609, 393221, 0, 196609, 393222, 0, 196615, 393223, 1, 0, 393224, 1, 0, 393225, 0, 131072, 393226, 0, 131073, 393227, 0, 131073, 393228, 0, 131073, 393229, 0, 131073, 393230, 0, 131073, 393231, 0, 131074, 393232, 4, 196612, 393233, 4, 196610, 393234, 5, 131075, 393235, 1, 0, 393236, 5, 131075, 393237, 1, 0, 393238, 1, 0, 393239, 1, 0, 393240, 1, 0, 393241, 1, 0, 393242, 1, 0, 393243, 5, 65539, 393244, 11, 65539, 393245, 5, 65539, 393246, 4, 0, 393247, 4, 131078, 393248, 4, 65537, 393249, 4, 65538, 458752, 0, 65539, 458753, 1, 0, 458754, 1, 0, 458755, 1, 0, 458756, 1, 0, 458757, 1, 0, 458758, 1, 0, 458759, 1, 0, 458760, 1, 0, 458761, 1, 0, 458762, 1, 0, 458763, 1, 0, 458764, 1, 0, 458765, 1, 0, 458766, 1, 0, 458767, 1, 0, 458768, 1, 0, 458769, 1, 0, 458770, 1, 0, 458771, 1, 0, 458772, 1, 0, 458773, 1, 0, 458774, 1, 0, 458775, 1, 0, 458776, 1, 0, 458777, 1, 0, 458778, 1, 0, 458779, 5, 65539, 458780, 11, 65539, 458781, 5, 65539, 458782, 4, 65536, 458783, 4, 65537, 458784, 4, 65537, 458785, 4, 65538, 524288, 0, 65539, 524289, 1, 0, 524290, 1, 0, 524291, 1, 0, 524292, 1, 0, 524293, 1, 0, 524294, 1, 0, 524295, 1, 0, 524296, 1, 0, 524297, 1, 0, 524298, 1, 0, 524299, 1, 0, 524300, 1, 0, 524301, 1, 0, 524302, 1, 0, 524303, 1, 0, 524304, 1, 0, 524305, 1, 0, 524306, 1, 0, 524307, 1, 0, 524308, 1, 0, 524309, 1, 0, 524310, 1, 0, 524311, 1, 0, 524312, 1, 0, 524313, 1, 0, 524314, 1, 0, 524315, 5, 65539, 524316, 11, 65539, 524317, 5, 65539, 524318, 4, 65536, 524319, 4, 65537, 524320, 4, 65537, 524321, 4, 65538, 589824, 0, 131076, 589825, 0, 1, 589826, 0, 1, 589827, 0, 1, 589828, 0, 1, 589829, 0, 1, 589830, 0, 2, 589831, 1, 0, 589832, 1, 0, 589833, 0, 0, 589834, 0, 1, 589835, 0, 1, 589836, 0, 1, 589837, 0, 1, 589838, 0, 1, 589839, 0, 2, 589840, 4, 4, 589841, 4, 196610, 589842, 5, 3, 589843, 1, 0, 589844, 5, 3, 589845, 1, 0, 589846, 1, 0, 589847, 1, 0, 589848, 1, 0, 589849, 1, 0, 589850, 1, 0, 589851, 5, 65539, 589852, 11, 65539, 589853, 5, 65539, 589854, 4, 131072, 589855, 4, 65542, 589856, 4, 65537, 589857, 4, 65538, 655360, 0, 65536, 655361, 0, 65537, 655362, 0, 65537, 655363, 0, 65537, 655364, 0, 65537, 655365, 0, 65537, 655366, 0, 65538, 655367, 1, 0, 655368, 1, 0, 655369, 0, 65536, 655370, 0, 65537, 655371, 0, 65537, 655372, 0, 65537, 655373, 0, 65537, 655374, 0, 65537, 655375, 0, 65538, 655376, 4, 65539, 655377, 5, 4, 655378, 5, 196615, 655379, 11, 3, 655380, 5, 196612, 655381, 5, 7, 655382, 1, 0, 655383, 1, 0, 655384, 1, 0, 655385, 1, 0, 655386, 5, 4, 655387, 5, 196615, 655388, 11, 65539, 655389, 5, 196612, 655390, 5, 7, 655391, 4, 65536, 655392, 4, 65537, 655393, 4, 65538, 720896, 0, 65536, 720897, 0, 65537, 720898, 0, 65537, 720899, 0, 65537, 720900, 0, 65537, 720901, 0, 65537, 720902, 0, 65538, 720903, 1, 0, 720904, 1, 0, 720905, 0, 65536, 720906, 0, 65537, 720907, 0, 65537, 720908, 0, 65537, 720909, 0, 65537, 720910, 0, 65537, 720911, 0, 65538, 720912, 4, 65539, 720913, 5, 65539, 720914, 11, 0, 720915, 11, 131080, 720916, 11, 2, 720917, 5, 196612, 720918, 5, 196609, 720919, 5, 196609, 720920, 5, 196609, 720921, 5, 196609, 720922, 5, 196615, 720923, 11, 0, 720924, 11, 131080, 720925, 11, 2, 720926, 5, 65539, 720927, 4, 65536, 720928, 4, 65537, 720929, 4, 65538, 786432, 0, 65536, 786433, 0, 65537, 786434, 0, 65537, 786435, 0, 65537, 786436, 0, 65537, 786437, 0, 65537, 786438, 0, 65538, 786439, 1, 0, 786440, 1, 0, 786441, 0, 65536, 786442, 0, 65537, 786443, 0, 65537, 786444, 0, 65537, 786445, 0, 65537, 786446, 0, 65537, 786447, 0, 65538, 786448, 4, 65539, 786449, 5, 65539, 786450, 11, 65536, 786451, 11, 65537, 786452, 11, 262149, 786453, 11, 196609, 786454, 11, 196609, 786455, 11, 196609, 786456, 11, 196609, 786457, 11, 196609, 786458, 11, 196609, 786459, 11, 262150, 786460, 11, 65537, 786461, 11, 65538, 786462, 5, 65539, 786463, 4, 65536, 786464, 4, 65537, 786465, 4, 65538, 851968, 0, 65536, 851969, 0, 65537, 851970, 0, 65537, 851971, 0, 65537, 851972, 0, 65537, 851973, 0, 65537, 851974, 0, 65538, 851975, 1, 0, 851976, 1, 0, 851977, 0, 65536, 851978, 0, 65537, 851979, 0, 65537, 851980, 0, 65537, 851981, 0, 65537, 851982, 0, 65537, 851983, 0, 65538, 851984, 4, 65539, 851985, 5, 65539, 851986, 11, 131072, 851987, 11, 131073, 851988, 11, 131074, 851989, 5, 4, 851990, 5, 196609, 851991, 5, 196609, 851992, 5, 196609, 851993, 5, 196609, 851994, 5, 7, 851995, 11, 131072, 851996, 11, 131073, 851997, 11, 131074, 851998, 5, 65539, 851999, 4, 65536, 852000, 4, 65537, 852001, 4, 65538, 917504, 0, 65536, 917505, 0, 65537, 917506, 0, 65537, 917507, 0, 65537, 917508, 0, 65537, 917509, 0, 65537, 917510, 0, 65538, 917511, 1, 0, 917512, 1, 0, 917513, 0, 65536, 917514, 0, 65537, 917515, 0, 65537, 917516, 0, 65537, 917517, 0, 65537, 917518, 0, 65537, 917519, 0, 65538, 917520, 4, 65539, 917521, 5, 196612, 917522, 5, 196609, 917523, 5, 196609, 917524, 5, 196609, 917525, 5, 196615, 917526, 4, 0, 917527, 4, 1, 917528, 4, 1, 917529, 4, 2, 917530, 5, 196612, 917531, 5, 196609, 917532, 5, 196609, 917533, 5, 196609, 917534, 5, 196615, 917535, 4, 65536, 917536, 4, 65537, 917537, 4, 65538, 983040, 0, 131072, 983041, 0, 131073, 983042, 0, 131073, 983043, 0, 131073, 983044, 0, 131073, 983045, 0, 131073, 983046, 0, 131074, 983047, 1, 0, 983048, 1, 0, 983049, 0, 131072, 983050, 0, 131073, 983051, 0, 131073, 983052, 0, 131073, 983053, 0, 131073, 983054, 0, 131073, 983055, 0, 131074, 983056, 4, 131076, 983057, 4, 1, 983058, 4, 1, 983059, 4, 1, 983060, 4, 1, 983061, 4, 1, 983062, 4, 131078, 983063, 4, 65537, 983064, 4, 65537, 983065, 4, 131077, 983066, 4, 1, 983067, 4, 1, 983068, 4, 1, 983069, 4, 1, 983070, 4, 1, 983071, 4, 131078, 983072, 4, 65537, 983073, 4, 65538, 1048576, 3, 0, 1048577, 3, 1, 1048578, 3, 1, 1048579, 3, 1, 1048580, 3, 1, 1048581, 3, 1, 1048582, 3, 2, 1048583, 1, 0, 1048584, 1, 0, 1048585, 3, 0, 1048586, 3, 1, 1048587, 3, 1, 1048588, 3, 1, 1048589, 3, 1, 1048590, 3, 1, 1048591, 3, 2, 1048592, 4, 65536, 1048593, 4, 65537, 1048594, 4, 65537, 1048595, 4, 65537, 1048596, 4, 65537, 1048597, 4, 65537, 1048598, 4, 65537, 1048599, 4, 65537, 1048600, 4, 65537, 1048601, 4, 65537, 1048602, 4, 65537, 1048603, 4, 65537, 1048604, 4, 65537, 1048605, 4, 65537, 1048606, 4, 65537, 1048607, 4, 65537, 1048608, 4, 65537, 1048609, 4, 65538, 1114112, 3, 65536, 1114113, 3, 65541, 1114114, 3, 131073, 1114115, 3, 131073, 1114116, 3, 131073, 1114117, 3, 65542, 1114118, 3, 65538, 1114119, 1, 0, 1114120, 1, 0, 1114121, 3, 65536, 1114122, 3, 65541, 1114123, 3, 131073, 1114124, 3, 131073, 1114125, 3, 131073, 1114126, 3, 65542, 1114127, 3, 65538, 1114128, 4, 65536, 1114129, 4, 65537, 1114130, 4, 65537, 1114131, 4, 65537, 1114132, 4, 65537, 1114133, 4, 65537, 1114134, 4, 65537, 1114135, 4, 65537, 1114136, 4, 65537, 1114137, 4, 65537, 1114138, 4, 65537, 1114139, 4, 65537, 1114140, 4, 65537, 1114141, 4, 65537, 1114142, 4, 65537, 1114143, 4, 65537, 1114144, 4, 65537, 1114145, 4, 65538, 1179648, 3, 65536, 1179649, 3, 65538, 1179650, 6, 4, 1179651, 6, 196609, 1179652, 6, 7, 1179653, 3, 65536, 1179654, 3, 65538, 1179655, 1, 0, 1179656, 1, 0, 1179657, 3, 65536, 1179658, 3, 65538, 1179659, 6, 4, 1179660, 6, 196609, 1179661, 6, 7, 1179662, 3, 65536, 1179663, 3, 65538, 1179664, 4, 65536, 1179665, 4, 65537, 1179666, 4, 65537, 1179667, 4, 65537, 1179668, 4, 65537, 1179669, 4, 65537, 1179670, 4, 65537, 1179671, 4, 65537, 1179672, 4, 65537, 1179673, 4, 65537, 1179674, 4, 65537, 1179675, 4, 65537, 1179676, 4, 65537, 1179677, 4, 65537, 1179678, 4, 65537, 1179679, 4, 65537, 1179680, 4, 65537, 1179681, 4, 65538, 1245184, 3, 65536, 1245185, 3, 65538, 1245186, 6, 65539, 1245187, 12, 3, 1245188, 6, 65539, 1245189, 3, 131072, 1245190, 3, 131074, 1245191, 1, 0, 1245192, 1, 0, 1245193, 3, 131072, 1245194, 3, 131074, 1245195, 6, 65539, 1245196, 12, 3, 1245197, 6, 65539, 1245198, 3, 65536, 1245199, 3, 65538, 1245200, 4, 65536, 1245201, 4, 65537, 1245202, 4, 65537, 1245203, 4, 65537, 1245204, 4, 65537, 1245205, 4, 65537, 1245206, 4, 65537, 1245207, 4, 65537, 1245208, 4, 65537, 1245209, 4, 65537, 1245210, 4, 65537, 1245211, 4, 65537, 1245212, 4, 65537, 1245213, 4, 65537, 1245214, 4, 65537, 1245215, 4, 65537, 1245216, 4, 65537, 1245217, 4, 65538, 1310720, 3, 65536, 1310721, 3, 65538, 1310722, 6, 65539, 1310723, 12, 65539, 1310724, 6, 196612, 1310725, 6, 196609, 1310726, 6, 196610, 1310727, 12, 0, 1310728, 12, 2, 1310729, 6, 196608, 1310730, 6, 196609, 1310731, 6, 196615, 1310732, 12, 65539, 1310733, 6, 65539, 1310734, 3, 65536, 1310735, 3, 65538, 1310736, 4, 131072, 1310737, 4, 131073, 1310738, 4, 131073, 1310739, 4, 131073, 1310740, 4, 131073, 1310741, 4, 131073, 1310742, 4, 131073, 1310743, 4, 131073, 1310744, 4, 131073, 1310745, 4, 131073, 1310746, 4, 131073, 1310747, 4, 131073, 1310748, 4, 131073, 1310749, 4, 131073, 1310750, 4, 131073, 1310751, 4, 131073, 1310752, 4, 131073, 1310753, 4, 131074, 1376256, 3, 65536, 1376257, 3, 65538, 1376258, 6, 65539, 1376259, 12, 131076, 1376260, 12, 1, 1376261, 12, 1, 1376262, 12, 1, 1376263, 12, 131078, 1376264, 12, 131077, 1376265, 12, 1, 1376266, 12, 1, 1376267, 12, 1, 1376268, 12, 131079, 1376269, 6, 65539, 1376270, 3, 65536, 1376271, 3, 65538, 1441792, 3, 65536, 1441793, 3, 65538, 1441794, 6, 65539, 1441795, 12, 131072, 1441796, 12, 65542, 1441797, 12, 65537, 1441798, 12, 65537, 1441799, 12, 65537, 1441800, 12, 65537, 1441801, 12, 65537, 1441802, 12, 65541, 1441803, 12, 131073, 1441804, 12, 131074, 1441805, 6, 65539, 1441806, 3, 65536, 1441807, 3, 65538, 1507328, 3, 65536, 1507329, 3, 65538, 1507330, 6, 196612, 1507331, 6, 7, 1507332, 12, 65536, 1507333, 12, 65537, 1507334, 12, 65537, 1507335, 12, 65537, 1507336, 12, 65537, 1507337, 12, 65537, 1507338, 12, 65538, 1507339, 6, 4, 1507340, 6, 196609, 1507341, 6, 196615, 1507342, 3, 65536, 1507343, 3, 65538, 1572864, 3, 65536, 1572865, 3, 131077, 1572866, 3, 2, 1572867, 6, 65539, 1572868, 12, 131072, 1572869, 12, 65542, 1572870, 12, 65537, 1572871, 12, 65537, 1572872, 12, 65537, 1572873, 12, 65541, 1572874, 12, 131074, 1572875, 6, 65539, 1572876, 3, 0, 1572877, 3, 1, 1572878, 3, 131078, 1572879, 3, 65538, 1638400, 3, 65536, 1638401, 3, 65537, 1638402, 3, 65538, 1638403, 6, 196612, 1638404, 6, 7, 1638405, 12, 65536, 1638406, 12, 65537, 1638407, 12, 65537, 1638408, 12, 65537, 1638409, 12, 65538, 1638410, 6, 4, 1638411, 6, 196615, 1638412, 3, 65536, 1638413, 3, 65537, 1638414, 3, 65537, 1638415, 3, 65538, 1703936, 3, 65536, 1703937, 3, 65537, 1703938, 3, 131077, 1703939, 3, 2, 1703940, 6, 65539, 1703941, 12, 131072, 1703942, 12, 65542, 1703943, 12, 65537, 1703944, 12, 65541, 1703945, 12, 131074, 1703946, 6, 65539, 1703947, 3, 0, 1703948, 3, 131078, 1703949, 3, 65537, 1703950, 3, 65537, 1703951, 3, 65538, 1769472, 3, 65536, 1769473, 3, 65537, 1769474, 3, 65537, 1769475, 3, 65538, 1769476, 6, 196612, 1769477, 6, 7, 1769478, 12, 65536, 1769479, 12, 65537, 1769480, 12, 65538, 1769481, 6, 4, 1769482, 6, 196615, 1769483, 3, 65536, 1769484, 3, 65537, 1769485, 3, 65537, 1769486, 3, 65537, 1769487, 3, 65538, 1835008, 3, 65536, 1835009, 3, 65537, 1835010, 3, 65537, 1835011, 3, 131077, 1835012, 3, 2, 1835013, 6, 65539, 1835014, 12, 131072, 1835015, 12, 65544, 1835016, 12, 131074, 1835017, 6, 65539, 1835018, 3, 0, 1835019, 3, 131078, 1835020, 3, 65537, 1835021, 3, 65537, 1835022, 3, 65537, 1835023, 3, 65538, 1900544, 3, 65536, 1900545, 3, 65537, 1900546, 3, 65537, 1900547, 3, 65537, 1900548, 3, 65538, 1900549, 6, 196612, 1900550, 6, 7, 1900551, 12, 131075, 1900552, 6, 4, 1900553, 6, 196615, 1900554, 3, 65536, 1900555, 3, 65537, 1900556, 3, 65537, 1900557, 3, 65537, 1900558, 3, 65537, 1900559, 3, 65538, 1966080, 3, 65536, 1966081, 3, 65537, 1966082, 3, 65537, 1966083, 3, 65537, 1966084, 3, 131077, 1966085, 3, 2, 1966086, 6, 196612, 1966087, 6, 196609, 1966088, 6, 196615, 1966089, 3, 0, 1966090, 3, 131078, 1966091, 3, 65537, 1966092, 3, 65537, 1966093, 3, 65537, 1966094, 3, 65537, 1966095, 3, 65538, 2031616, 3, 65536, 2031617, 3, 65537, 2031618, 3, 65537, 2031619, 3, 65537, 2031620, 3, 65537, 2031621, 3, 131077, 2031622, 3, 1, 2031623, 3, 1, 2031624, 3, 1, 2031625, 3, 131078, 2031626, 3, 65537, 2031627, 3, 65537, 2031628, 3, 65537, 2031629, 3, 65537, 2031630, 3, 65537, 2031631, 3, 65538, 2097152, 3, 131072, 2097153, 3, 131073, 2097154, 3, 131073, 2097155, 3, 131073, 2097156, 3, 131073, 2097157, 3, 131073, 2097158, 3, 131073, 2097159, 3, 131073, 2097160, 3, 131073, 2097161, 3, 131073, 2097162, 3, 131073, 2097163, 3, 131073, 2097164, 3, 131073, 2097165, 3, 131073, 2097166, 3, 131073, 2097167, 3, 131074 ) + +[node name="Player" parent="." instance=ExtResource( 3 )] +position = Vector2( 269.901, 175.601 ) +world = NodePath("..") + +[node name="PlayerPuppeteer" parent="." instance=ExtResource( 4 )] +puppet_parent = NodePath("..") diff --git a/client/scripts/entities/Player.gd b/client/scripts/entities/Player.gd new file mode 100644 index 0000000..ce27962 --- /dev/null +++ b/client/scripts/entities/Player.gd @@ -0,0 +1,39 @@ +extends KinematicBody2D + +signal finished_moving + +export var base_movement_speed = 100 +export(NodePath) var world + +onready var navigation : Navigation2D = get_node(world) +var path : PoolVector2Array +var move : bool = false + +func _process(delta): + + # Click for movement target + if Input.is_action_just_pressed("move_to_cursor"): + path = navigation.get_simple_path(global_position, get_global_mouse_position()) + move = true + + if move: + move_along_path(base_movement_speed * delta) + ServerConnection.send_player_position(global_position) + +func move_along_path(distance : float): + var start_point := global_position + for i in range(path.size()): + var distance_to_next := start_point.distance_to(path[0]) + if distance <= distance_to_next and distance >= 0.0: + global_position = start_point.linear_interpolate(path[0], distance/distance_to_next) + break + elif distance < 0.0: + global_position = path[0] + emit_signal("finished_moving") + print("DONE") + move = false + break + distance -= distance_to_next + start_point = path[0] + path.remove(0) + diff --git a/client/scripts/singletons/ServerConnection.gd b/client/scripts/singletons/ServerConnection.gd index de594d1..413923c 100644 --- a/client/scripts/singletons/ServerConnection.gd +++ b/client/scripts/singletons/ServerConnection.gd @@ -1,6 +1,9 @@ extends Node signal tile_update(tile_data) +signal player_joined(user_id) +signal player_left(user_id) +signal player_pos_update(user_id, pos) const KEY := "defaultkey" const SERVER_ENDPOINT := "nakama.cloudsumu.com" @@ -9,9 +12,11 @@ var _session : NakamaSession var _client : NakamaClient = Nakama.create_client(KEY, SERVER_ENDPOINT, 7350, "http") var _socket : NakamaSocket var _precenses : Dictionary = {} +var _world_id enum OPCODE { - tile_update = 1 + tile_update = 1, + update_position = 2 } func authenticate_async(email : String, password : String) -> NakamaException: @@ -43,6 +48,7 @@ func connect_to_server_async() -> NakamaException: var result : NakamaAsyncResult = yield(_socket.connect_async(_session), "completed") if not result.is_exception(): _socket.connect("received_match_state", self, "_on_socket_received_match_state") + _socket.connect("received_match_presence", self, "_on_received_match_presence") _socket.connect("closed", self, "_on_socket_closed") return null return result.exception @@ -57,9 +63,12 @@ func join_world_async() -> Dictionary: if match_join_result.is_exception(): print("Join match error: %s - %s" % [match_join_result.exception.status_code, match_join_result.exception.message]) return {} + + _world_id = world.payload for precense in match_join_result.presences: _precenses[precense.user_id] = precense + emit_signal("player_joined", precense.user_id) print("Joined matched with %s other players!" % _precenses.size()) @@ -67,9 +76,26 @@ func join_world_async() -> Dictionary: func _on_socket_closed(): _socket = null - + +func _on_received_match_presence(match_precense : NakamaRTAPI.MatchPresenceEvent): + for precense in match_precense.joins: + print("%s joined the game!" % precense.username) + _precenses[precense.user_id] = precense + emit_signal("player_joined", precense.user_id) + + for precense in match_precense.leaves: + print("%s left the game!" % precense.username) + _precenses.erase(precense.user_id) + emit_signal("player_left", precense.user_id) + func _on_socket_received_match_state(match_state: NakamaRTAPI.MatchData): match match_state.op_code: OPCODE.tile_update: emit_signal("tile_update", JSON.parse(match_state.data).result) + OPCODE.update_position: + var pos_data = JSON.parse(match_state.data).result + emit_signal("player_pos_update", pos_data["player"], Vector2(float(pos_data["x"]), float(pos_data["y"]))) + +func send_player_position(position : Vector2) -> void: + _socket.send_match_state_async(_world_id, OPCODE.update_position, JSON.print({X = str(position.x), Y = str(position.y)})) diff --git a/client/scripts/systems/PlayerPuppeteer.gd b/client/scripts/systems/PlayerPuppeteer.gd new file mode 100644 index 0000000..96bf07a --- /dev/null +++ b/client/scripts/systems/PlayerPuppeteer.gd @@ -0,0 +1,31 @@ +extends Node2D + +export(NodePath) var puppet_parent +export(Resource) var puppet_template + +onready var puppet_parent_node : Node = get_node(puppet_parent) + +var puppets : Dictionary = {} + +func _ready(): + ServerConnection.connect("player_joined", self, "on_player_join") + ServerConnection.connect("player_left", self, "on_player_leave") + ServerConnection.connect("player_pos_update", self, "on_player_pos_update") + + +func on_player_join(user_id): + if user_id != ServerConnection._session.user_id: + var new_puppet : Node = puppet_template.instance() + new_puppet.name = "Player: " + user_id + puppet_parent_node.add_child(new_puppet) + puppets[user_id] = new_puppet + +func on_player_leave(user_id): + if user_id != ServerConnection._session.user_id: + var player_puppet : Node = puppets[user_id] + player_puppet.queue_free() + +func on_player_pos_update(user_id, pos): + if user_id != ServerConnection._session.user_id: + var player_puppet : Node2D = puppets[user_id] + player_puppet.global_position = pos diff --git a/server/plugin/control/control.go b/server/plugin/control/control.go index 3aceab0..218fa4f 100644 --- a/server/plugin/control/control.go +++ b/server/plugin/control/control.go @@ -3,10 +3,14 @@ package control import ( "context" "database/sql" + "fmt" "github.com/heroiclabs/nakama-common/runtime" + "github.com/josephbmanley/family/server/plugin/entities" "github.com/josephbmanley/family/server/plugin/gamemap" ) +const maxRenderDistance int = 32 + // OpCode represents a enum for valid OpCodes // used by the match logic type OpCode int64 @@ -14,6 +18,8 @@ type OpCode int64 const ( // OpCodeTileUpdate is used for tile updates OpCodeTileUpdate = 1 + // OpCodeUpdatePosition is used for player position updates + OpCodeUpdatePosition = 2 ) // Match is the object registered @@ -24,20 +30,27 @@ type Match struct{} // Nakama match methods type MatchState struct { presences map[string]runtime.Presence + players map[string]entities.PlayerEntity inputs map[string]string - positions map[string]map[string]int - names map[string]string worldMap *gamemap.WorldMap } +// GetPrecenseList returns an array of current precenes in an array +func (state *MatchState) GetPrecenseList() []runtime.Presence { + precenseList := []runtime.Presence{} + for _, precense := range state.presences { + precenseList = append(precenseList, precense) + } + return precenseList +} + // MatchInit is called when a new match is created func (m *Match) MatchInit(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, params map[string]interface{}) (interface{}, int, string) { state := &MatchState{ presences: map[string]runtime.Presence{}, inputs: map[string]string{}, - positions: map[string]map[string]int{}, - names: map[string]string{}, + players: map[string]entities.PlayerEntity{}, worldMap: gamemap.IntializeMap(), } tickRate := 10 @@ -77,13 +90,24 @@ func (m *Match) MatchJoin(ctx context.Context, logger runtime.Logger, db *sql.DB // Add presence to map mState.presences[precense.GetUserId()] = precense - // Set player spawn pos - mState.positions[precense.GetUserId()] = map[string]int{"x": 16, "y": 16} + player := entities.PlayerEntity{ + X: 16, + Y: 16, + Presence: precense, + } - mState.names[precense.GetUserId()] = "User" + if jsonObj, err := player.GetPosJSON(); err != nil { + logger.Error(err.Error()) + } else { + if sendErr := dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObj, []runtime.Presence{precense}, player.Presence, true); sendErr != nil { + logger.Error(sendErr.Error()) + } + } + + mState.players[precense.GetUserId()] = player // Get intial tile data around player - if regionData, err := mState.worldMap.GetJSONRegionAround(16, 16, 8); err != nil { + if regionData, err := mState.worldMap.GetJSONRegionAround(player.X, player.Y, maxRenderDistance); err != nil { logger.Error(err.Error()) } else { @@ -92,6 +116,16 @@ func (m *Match) MatchJoin(ctx context.Context, logger runtime.Logger, db *sql.DB logger.Error(sendErr.Error()) } } + for _, otherPlayer := range mState.players { + // Broadcast player data to client + if jsonObj, err := otherPlayer.GetPosJSON(); err != nil { + logger.Error(err.Error()) + } else { + if sendErr := dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObj, []runtime.Presence{precense}, otherPlayer.Presence, true); sendErr != nil { + logger.Error(sendErr.Error()) + } + } + } } return mState } @@ -104,19 +138,41 @@ func (m *Match) MatchLeave(ctx context.Context, logger runtime.Logger, db *sql.D return state } for _, presence := range presences { - delete(mState.presences, presence.GetUserId()) + if _, ok := mState.presences[presence.GetUserId()]; ok { + delete(mState.presences, presence.GetUserId()) + } + if _, ok := mState.players[presence.GetUserId()]; ok { + delete(mState.players, presence.GetUserId()) + } } return mState } // MatchLoop is code that is executed every tick func (m *Match) MatchLoop(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, messages []runtime.MatchData) interface{} { - // Custom code to: - // - Process the messages received. - // - Update the match state based on the messages and time elapsed. - // - Broadcast new data messages to match participants. + mState, ok := state.(*MatchState) + if !ok { + logger.Error("Invalid match state on leave!") + return state + } + for _, message := range messages { + if message.GetOpCode() == OpCodeUpdatePosition { + player := mState.players[message.GetUserId()] - return state + if response, err := player.ParsePositionRequest(message.GetData()); err == nil { + player.UpdateBasedOnResponse(response) + if jsonObject, err := player.GetPosJSON(); err == nil { + dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObject, mState.GetPrecenseList(), player.Presence, false) + logger.Info("Yes") + } else { + logger.Error(fmt.Sprintf("Failed to get player json: %s", err.Error)) + } + } else { + logger.Error(fmt.Sprintf("Failed to parse update pos request: %s", err.Error)) + } + } + } + return mState } // MatchTerminate is code that is executed when the match ends diff --git a/server/plugin/entities/entities.go b/server/plugin/entities/entities.go new file mode 100644 index 0000000..f27aacc --- /dev/null +++ b/server/plugin/entities/entities.go @@ -0,0 +1,55 @@ +package entities + +import ( + "encoding/json" + "fmt" + "github.com/heroiclabs/nakama-common/runtime" + "strconv" +) + +// PlayerEntity is the go struct representing the player's location +type PlayerEntity struct { + Presence runtime.Presence + X float64 + Y float64 +} + +// PlayerPosResponse struct that represents client data +type PlayerPosResponse struct { + X string + Y string +} + +// ParsePositionRequest parses data from client +func (p *PlayerEntity) ParsePositionRequest(data []byte) (PlayerPosResponse, error) { + var response PlayerPosResponse + err := json.Unmarshal(data, &response) + return response, err +} + +//UpdateBasedOnResponse updates the player object based on a response object +func (p *PlayerEntity) UpdateBasedOnResponse(response PlayerPosResponse) error { + if fx, err := strconv.ParseFloat(response.X, 64); err != nil { + return err + } else { + p.X = fx + if fy, err := strconv.ParseFloat(response.Y, 64); err != nil { + return err + } else { + p.Y = fy + } + } + + return nil +} + +// GetPosJSON returns the player's position as a JSON object +func (p *PlayerEntity) GetPosJSON() ([]byte, error) { + playerMap := map[string]string{ + "player": p.Presence.GetUserId(), + "x": fmt.Sprintf("%f", p.X), + "y": fmt.Sprintf("%f", p.Y), + } + jsonData, err := json.Marshal(playerMap) + return jsonData, err +} diff --git a/server/plugin/gamemap/gamemap.go b/server/plugin/gamemap/gamemap.go index 55bc45a..a8db826 100644 --- a/server/plugin/gamemap/gamemap.go +++ b/server/plugin/gamemap/gamemap.go @@ -7,14 +7,14 @@ import ( // WorldMap is the data structure used game world type WorldMap struct { - data [64][64]int + data [256][256]int max_x int max_y int } // GetTile method is used to grab a tile value with error checking func (m WorldMap) GetTile(x int, y int) (int, error) { - if x > m.max_x || y > m.max_y { + if x > m.max_x || y > m.max_y || x < 0 || y < 0 { return -1, fmt.Errorf("Map out of bounds error: %d, %d", x, y) } return m.data[x][y], nil @@ -27,11 +27,10 @@ func (m WorldMap) GetJSONRegion(startX, endX, startY, endY int) ([]byte, error) for x := startX; x < endX; x++ { regionMap[x] = map[int]int{} for y := startY; y < endY; y++ { - if result, err := m.GetTile(x, y); err != nil { - return nil, err - } else { - regionMap[x][y] = result - } + + // GetTile and ignore out of bounds errors + result, _ := m.GetTile(x, y) + regionMap[x][y] = result } } @@ -40,8 +39,10 @@ func (m WorldMap) GetJSONRegion(startX, endX, startY, endY int) ([]byte, error) } // GetJSONRegionAround returns a JSON object of tile data from a center point -func (m WorldMap) GetJSONRegionAround(centerX, centerY, regionRadius int) ([]byte, error) { - jsonString, err := m.GetJSONRegion(centerX-regionRadius, centerX+regionRadius, centerY-regionRadius, centerY+regionRadius) +func (m WorldMap) GetJSONRegionAround(centerX float64, centerY float64, regionRadius int) ([]byte, error) { + var xCenter int = int(centerX) + var yCenter int = int(centerY) + jsonString, err := m.GetJSONRegion(xCenter-regionRadius, xCenter+regionRadius, yCenter-regionRadius, yCenter+regionRadius) return jsonString, err } @@ -49,9 +50,9 @@ func (m WorldMap) GetJSONRegionAround(centerX, centerY, regionRadius int) ([]byt // generate WorldMap objects func IntializeMap() *WorldMap { worldMap := new(WorldMap) - worldMap.max_x = 64 - worldMap.max_y = 64 - worldMap.data = [64][64]int{} + worldMap.max_x = 256 + worldMap.max_y = 256 + worldMap.data = [256][256]int{} for x := 0; x < worldMap.max_x; x++ { for y := 0; y < worldMap.max_y; y++ { worldMap.data[x][y] = 0