diff --git a/BoundingBoxes/CameraBounds.cs b/BoundingBoxes/CameraBounds.cs index 75d679c..56da93e 100644 --- a/BoundingBoxes/CameraBounds.cs +++ b/BoundingBoxes/CameraBounds.cs @@ -18,8 +18,8 @@ public partial class CameraBounds : Node2D public override void _Ready() { - Trigger.BodyEntered += OnBodyEntered; - Trigger.BodyExited += OnBodyExited; + //Trigger.BodyEntered += OnBodyEntered; + //Trigger.BodyExited += OnBodyExited; } private void OnBodyEntered(Node2D body) diff --git a/Characters/Player.cs b/Characters/Player.cs index 8ac0f73..6ec59d4 100644 --- a/Characters/Player.cs +++ b/Characters/Player.cs @@ -36,6 +36,9 @@ public sealed partial class Player : Character [Export] public PlayerCamera Camera { get; set; } + [Export] + public GodotObject PCamera { get; set; } + [Export] public Marker2D DirectionMarker { get; private set; } diff --git a/Characters/Player.tscn b/Characters/Player.tscn index eb4cfdc..b1d2c62 100644 --- a/Characters/Player.tscn +++ b/Characters/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=74 format=3 uid="uid://b2254pup8k161"] +[gd_scene load_steps=77 format=3 uid="uid://b2254pup8k161"] [ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"] @@ -33,6 +33,8 @@ [ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"] [ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="22_uefct"] [ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="27_mndpv"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="28_6gq8l"] [ext_resource type="Script" path="res://Items/PlayerInventory.cs" id="30_y2wmw"] [ext_resource type="PackedScene" uid="uid://cgg0sfm2qeiwn" path="res://Items/Weapons/Bow.tscn" id="31_mofvy"] [ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="31_ql4as"] @@ -44,6 +46,12 @@ shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 +[sub_resource type="Resource" id="Resource_535hq"] +script = ExtResource("28_6gq8l") +duration = 1.0 +transition = 0 +ease = 2 + [sub_resource type="Animation" id="Animation_imqdv"] length = 0.001 tracks/0/type = "value" @@ -594,6 +602,15 @@ StateMachine = NodePath("StateMachine") Hurtbox = NodePath("Hurtbox") Faction = 1 +[node name="PCamera" type="Node2D" parent="."] +script = ExtResource("27_mndpv") +priority = 1 +follow_mode = 2 +zoom = Vector2(4, 4) +tween_resource = SubResource("Resource_535hq") +tween_on_load = false +draw_limits = true + [node name="Stats" type="Node" parent="."] script = ExtResource("4_06oya") @@ -765,6 +782,7 @@ stream = ExtResource("12_vvem5") unique_name_in_owner = true [node name="Camera2D" parent="." instance=ExtResource("4_ym125")] +enabled = false zoom = Vector2(4, 4) position_smoothing_speed = 8.0 diff --git a/Scenes/Level.tscn b/Scenes/Level.tscn index 72cdf09..8fddea8 100644 --- a/Scenes/Level.tscn +++ b/Scenes/Level.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://1pb3mpmrl7lc"] +[gd_scene load_steps=4 format=3 uid="uid://1pb3mpmrl7lc"] [ext_resource type="Script" path="res://Utils/World.cs" id="1_1k6ew"] [ext_resource type="PackedScene" uid="uid://c271rdjhd1gfo" path="res://UI/Base.tscn" id="2_mm0qt"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="3_ge4f0"] [node name="World" type="Node2D" node_paths=PackedStringArray("MusicPlayer")] process_mode = 3 @@ -24,3 +25,8 @@ mouse_filter = 2 [node name="MusicPlayer" type="AudioStreamPlayer" parent="."] bus = &"Music" + +[node name="Camera2D" type="Camera2D" parent="."] + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("3_ge4f0") diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png new file mode 100644 index 0000000..3082789 Binary files /dev/null and b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png differ diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import new file mode 100644 index 0000000..ad3a214 --- /dev/null +++ b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://censw3w53gldn" +path="res://.godot/imported/PhantomCameraBtnPrimaryDefault.png-fcf3696b583a82b1078609a5bfd648f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png" +dest_files=["res://.godot/imported/PhantomCameraBtnPrimaryDefault.png-fcf3696b583a82b1078609a5bfd648f5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png new file mode 100644 index 0000000..1e0c31a Binary files /dev/null and b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png differ diff --git a/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import new file mode 100644 index 0000000..dd6f1a4 --- /dev/null +++ b/addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://pvr8mbvl1onm" +path="res://.godot/imported/PhantomCameraBtnPrimaryHover.png-3d2e4d225f6a86ce8a9c981ee7926a16.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png" +dest_files=["res://.godot/imported/PhantomCameraBtnPrimaryHover.png-3d2e4d225f6a86ce8a9c981ee7926a16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/examples/credits.txt b/addons/phantom_camera/examples/credits.txt new file mode 100644 index 0000000..d5e949a --- /dev/null +++ b/addons/phantom_camera/examples/credits.txt @@ -0,0 +1,7 @@ +##################### +EXAMPLE ASSET CREDITS +##################### + +# level_spritesheet +https://opengameart.org/content/a-platformer-in-the-forest +https://opengameart.org/users/buch diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn new file mode 100644 index 0000000..5234e31 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=12 format=3 uid="uid://ohwjxojqcj63"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_foq54"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_kmt5y"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_1cmgi"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="4_4dx73"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="5_w68mw"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_i3g4f"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="7_j2i8l"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_ytjsp"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_o4c4h"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_foq54") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D2" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_kmt5y")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_1cmgi")] +unique_name_in_owner = true +visible = false + +[node name="Controls" type="Label" parent="."] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("4_4dx73") +text = "[WASD] to move +[Space] to jump" + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +zoom = Vector2(1.5, 1.5) +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("5_w68mw") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +process_priority = -1 +position = Vector2(227, -28) +script = ExtResource("6_i3g4f") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(1.5, 1.5) +frame_preview = false +tween_resource = ExtResource("7_j2i8l") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_ytjsp")] +position = Vector2(227, -28) +script = ExtResource("9_o4c4h") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..df284df --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_framed_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=12 format=3 uid="uid://dg1tuoxd3b4tw"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_nf5bo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_5oggv"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_aku7q"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_j3ux0"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_uwr6r"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_4l0c3"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_briql"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_i4m1d"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_m3lnd"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_nf5bo") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -345.0 +offset_top = -143.0 +offset_right = 947.0 +offset_bottom = 578.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_5oggv")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_aku7q")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(282, -29) +zoom = Vector2(2, 2) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_j3ux0") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(282, -29) +script = ExtResource("5_uwr6r") +priority = 5 +follow_mode = 5 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(2, 2) +tween_resource = ExtResource("6_4l0c3") +tween_on_load = false +follow_damping = true +dead_zone_width = 0.416 +dead_zone_height = 0.63 +show_viewfinder_in_play = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_briql") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_i4m1d")] +position = Vector2(282, -29) +script = ExtResource("9_m3lnd") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn new file mode 100644 index 0000000..143e8d6 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_group_example_scene.tscn @@ -0,0 +1,648 @@ +[gd_scene load_steps=14 format=3 uid="uid://bio6mao7gtru2"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_8rflf"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_tafwr"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_37c7w"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_dxiro"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="5_gaaip"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_ojk83"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_awenl"] +[ext_resource type="Texture2D" uid="uid://cwep0on2tthn7" path="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" id="8_ys0m4"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="9_witv0"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="10_aivri"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_8rflf") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_spy00"] +script = ExtResource("7_awenl") +duration = 0.3 +transition = 4 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_tafwr")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_37c7w")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(107, -172.5) +position_smoothing_speed = 8.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_dxiro") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_gaaip") +text = "[WASD] to move +[Space] to jump" + +[node name="PhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_targets")] +position = Vector2(107, -172.5) +script = ExtResource("6_ojk83") +priority = 10 +follow_mode = 3 +follow_targets = [NodePath("../GroupNPCSprite"), NodePath("../CharacterBody2D")] +tween_resource = SubResource("Resource_spy00") +tween_on_load = false +follow_damping = true +auto_zoom = true +auto_zoom_margin = Vector4(200, 0, 200, 0) +draw_limits = true + +[node name="GroupNPCSprite" type="Sprite2D" parent="."] +unique_name_in_owner = true +position = Vector2(107, -316) +texture = ExtResource("8_ys0m4") + +[node name="CharacterBody2D" parent="." instance=ExtResource("9_witv0")] +position = Vector2(265, -29) +script = ExtResource("10_aivri") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn new file mode 100644 index 0000000..260aa31 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_follow_path_example_scene.tscn @@ -0,0 +1,659 @@ +[gd_scene load_steps=13 format=3 uid="uid://b75giavcvh1mv"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_t003o"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_4ncqd"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_tpji3"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_w0rat"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="5_q77r4"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_y6hoa"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="7_wd55r"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_fy81j"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_u6ygl"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_t003o") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Curve2D" id="Curve2D_usrhf"] +_data = { +"points": PackedVector2Array(-96.4111, 42.3785, 0, 0, 222, 0, 0, 0, 0, 0, 1550, 0) +} +point_count = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -65509, 720896, 3, -65510, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6, -196569, 720896, 4, -131033, 720896, 5, -65497, 720896, 5, 39, 720896, 5, 65575, 720896, 5, 131111, 720896, 5, 196647, 720896, 5, 262183, 720896, 5, 327719, 720896, 5, 393255, 720896, 5, 458791, 720896, 5, 524327, 720896, 5, 589863, 720896, 5, 655399, 720896, 6, -262104, 917504, 6, -196568, 786432, 4, -131032, 786432, 5, -65496, 655360, 6, 40, 786432, 5, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, 524328, 655360, 6, 589864, 786432, 5, 655400, 786432, 6, -262103, 983040, 5, -196567, 786432, 4, -131031, 786432, 5, -65495, 786432, 5, 41, 589824, 6, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, 524329, 786432, 5, 589865, 786432, 5, 655401, 786432, 6, -262102, 720896, 3, -196566, 786432, 4, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 655360, 6, 327722, 786432, 5, 393258, 786432, 5, 458794, 786432, 5, 524330, 786432, 5, 589866, 786432, 5, 655402, 786432, 6, -262101, 1048576, 6, -196565, 786432, 4, -131029, 786432, 5, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, 393259, 655360, 6, 458795, 655360, 6, 524331, 786432, 5, 589867, 786432, 5, 655403, 786432, 6, -262100, 720896, 3, -196564, 786432, 4, -131028, 786432, 5, -65492, 786432, 5, 44, 786432, 5, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, 524332, 786432, 5, 589868, 786432, 5, 655404, 786432, 6, -262099, 983040, 6, -196563, 786432, 4, -131027, 786432, 5, -65491, 786432, 5, 45, 589824, 6, 65581, 655360, 6, 131117, 655360, 6, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, 524333, 786432, 5, 589869, 655360, 6, 655405, 786432, 6, -196562, 786432, 4, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 786432, 5, 524334, 786432, 5, 589870, 786432, 5, 655406, 786432, 6, -196561, 851968, 4, -131025, 851968, 5, -65489, 851968, 5, 47, 851968, 5, 65583, 851968, 5, 131119, 851968, 5, 196655, 851968, 5, 262191, 851968, 5, 327727, 851968, 5, 393263, 851968, 5, 458799, 851968, 5, 524335, 851968, 5, 589871, 851968, 5, 655407, 851968, 6, -131042, 720896, 4, -65506, 720896, 5, 30, 720896, 5, 65566, 720896, 5, 131102, 720896, 5, 196638, 720896, 5, 262174, 720896, 5, 327710, 720896, 5, 393246, 720896, 5, 458782, 720896, 5, 524318, 720896, 5, -196577, 917504, 6, -131041, 786432, 4, -65505, 786432, 5, 31, 655360, 6, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 786432, 5, 458783, 786432, 5, 524319, 786432, 5, -196576, 983040, 5, -131040, 786432, 4, -65504, 786432, 5, 32, 786432, 5, 65568, 589824, 6, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 524320, 786432, 5, -196575, 720896, 3, -131039, 786432, 4, -65503, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 655360, 6, 393249, 786432, 5, 458785, 786432, 5, 524321, 786432, 5, -196574, 1048576, 6, -131038, 786432, 4, -65502, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 393250, 786432, 5, 458786, 655360, 6, 524322, 655360, 6, -196573, 720896, 3, -131037, 786432, 4, -65501, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 524323, 786432, 5, -196572, 983040, 6, -131036, 786432, 4, -65500, 786432, 5, 36, 786432, 5, 65572, 589824, 6, 131108, 655360, 6, 196644, 655360, 6, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 786432, 5, 524324, 786432, 5, -131035, 786432, 4, -65499, 786432, 5, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524325, 786432, 5, -131034, 851968, 4, -65498, 851968, 5, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 524326, 851968, 5, 589854, 720896, 5, 655390, 720896, 5, 720926, 720896, 6, 589855, 655360, 6, 655391, 786432, 5, 720927, 786432, 6, 589856, 786432, 5, 655392, 786432, 5, 720928, 786432, 6, 589857, 786432, 5, 655393, 786432, 5, 720929, 786432, 6, 589858, 786432, 5, 655394, 786432, 5, 720930, 786432, 6, 589859, 786432, 5, 655395, 786432, 5, 720931, 786432, 6, 589860, 786432, 5, 655396, 655360, 6, 720932, 786432, 6, 589861, 786432, 5, 655397, 786432, 5, 720933, 786432, 6, 589862, 851968, 5, 655398, 851968, 5, 720934, 851968, 6, -458704, 720896, 4, -393168, 720896, 5, -327632, 720896, 5, -262096, 720896, 5, -196560, 720896, 5, -131024, 720896, 5, -65488, 720896, 5, 48, 720896, 5, 65584, 720896, 5, 131120, 720896, 5, 196656, 720896, 5, 262192, 720896, 5, 327728, 720896, 5, 393264, 720896, 6, -524239, 917504, 6, -458703, 786432, 4, -393167, 786432, 5, -327631, 655360, 6, -262095, 786432, 5, -196559, 786432, 5, -131023, 786432, 5, -65487, 786432, 5, 49, 786432, 5, 65585, 786432, 5, 131121, 786432, 5, 196657, 786432, 5, 262193, 655360, 6, 327729, 786432, 5, 393265, 786432, 6, -524238, 983040, 5, -458702, 786432, 4, -393166, 786432, 5, -327630, 786432, 5, -262094, 589824, 6, -196558, 786432, 5, -131022, 786432, 5, -65486, 786432, 5, 50, 786432, 5, 65586, 786432, 5, 131122, 786432, 5, 196658, 786432, 5, 262194, 786432, 5, 327730, 786432, 5, 393266, 786432, 6, -524237, 720896, 3, -458701, 786432, 4, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 655360, 6, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, 393267, 786432, 6, -524236, 1048576, 6, -458700, 786432, 4, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 655360, 6, 196660, 655360, 6, 262196, 786432, 5, 327732, 786432, 5, 393268, 786432, 6, -524235, 720896, 3, -458699, 786432, 4, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, 393269, 786432, 6, -524234, 983040, 6, -458698, 786432, 4, -393162, 786432, 5, -327626, 786432, 5, -262090, 589824, 6, -196554, 655360, 6, -131018, 655360, 6, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 655360, 6, 393270, 786432, 6, -458697, 786432, 4, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, 393271, 786432, 6, -458696, 851968, 4, -393160, 851968, 5, -327624, 851968, 5, -262088, 851968, 5, -196552, 851968, 5, -131016, 851968, 5, -65480, 851968, 5, 56, 851968, 5, 65592, 851968, 5, 131128, 851968, 5, 196664, 851968, 5, 262200, 851968, 5, 327736, 851968, 5, 393272, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_4ncqd")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_tpji3")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(374, -216) +zoom = Vector2(1.5, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_w0rat") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_q77r4") +text = "[WASD] to move +[Space] to jump" + +[node name="Player" type="Node" parent="."] + +[node name="Label" type="Label" parent="Player"] +visible = false +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("5_q77r4") +text = "[WASD] to move +[Space] to jump" + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target", "follow_path")] +unique_name_in_owner = true +position = Vector2(374, -216) +script = ExtResource("6_y6hoa") +priority = 10 +follow_mode = 4 +follow_target = NodePath("../CharacterBody2D") +follow_path = NodePath("../Path2D") +zoom = Vector2(1.5, 1.5) +tween_resource = ExtResource("7_wd55r") +tween_on_load = false +draw_limits = true + +[node name="Path2D" type="Path2D" parent="."] +position = Vector2(152, -216) +curve = SubResource("Curve2D_usrhf") + +[node name="CharacterBody2D" parent="." instance=ExtResource("8_fy81j")] +position = Vector2(225, -28) +script = ExtResource("9_u6ygl") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn new file mode 100644 index 0000000..d34057f --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_limit_example_scene.tscn @@ -0,0 +1,718 @@ +[gd_scene load_steps=17 format=3 uid="uid://0ox7hgdpwpqp"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd" id="1_bwr3f"] +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="2_f03of"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="3_cysy4"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="4_qqut6"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="5_yv8tn"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_2n5r1"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="6_68ewj"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_ne05h"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="8_hulu3"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("2_f03of") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_ct1eh"] +script = ExtResource("7_ne05h") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xmxri"] +size = Vector2(790, 410) + +[sub_resource type="Resource" id="Resource_exr3j"] +script = ExtResource("7_ne05h") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wtfjw"] +size = Vector2(1530, 700) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_daeuh"] +size = Vector2(1027.5, 610.5) + +[node name="ExampleScene2D" type="Node2D"] +script = ExtResource("1_bwr3f") + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) +metadata/_edit_lock_ = true + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +position = Vector2(-97, 0) +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-458743, 851968, 6, -458744, 786432, 6, -458745, 786432, 6, -458746, 786432, 6, -458747, 786432, 6, -458748, 786432, 6, -458749, 786432, 6, -458750, 786432, 6, -458751, 786432, 6, -393218, 786432, 6, -393219, 786432, 6, -393220, 786432, 6, -393221, 720896, 6, -458752, 786432, 6, -393217, 786432, 6, -524279, 851968, 5, -589815, 851968, 5, -655351, 851968, 5, -720887, 851968, 4, -720888, 786432, 4, -720889, 786432, 4, -720890, 786432, 4, -720891, 786432, 4, -720892, 786432, 4, -720893, 786432, 4, -720894, 786432, 4, -720895, 786432, 4, -720896, 786432, 4, -655361, 786432, 4, -655362, 786432, 4, -655363, 786432, 4, -655364, 786432, 4, -655365, 720896, 4, -589829, 720896, 5, -524293, 720896, 5, -458757, 720896, 5, -589828, 786432, 5, -524292, 786432, 5, -458756, 786432, 5, -589827, 786432, 5, -524291, 786432, 5, -458755, 786432, 5, -589826, 786432, 5, -524290, 786432, 5, -458754, 786432, 5, -589825, 786432, 5, -524289, 786432, 5, -458753, 786432, 5, -655360, 786432, 5, -589824, 786432, 5, -524288, 786432, 5, -655359, 786432, 5, -589823, 786432, 5, -524287, 786432, 5, -655358, 786432, 5, -589822, 786432, 5, -524286, 786432, 5, -655357, 786432, 5, -589821, 786432, 5, -524285, 786432, 5, -655356, 786432, 5, -589820, 786432, 5, -524284, 786432, 5, -655355, 786432, 5, -589819, 786432, 5, -524283, 786432, 5, -655354, 786432, 5, -589818, 786432, 5, -524282, 786432, 5, -655353, 786432, 5, -589817, 786432, 5, -524281, 786432, 5, -655352, 786432, 5, -589816, 786432, 5, -524280, 786432, 5) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(65533, 720896, 0, 65534, 720896, 0, 65535, 720896, 0, 0, 720896, 0, 1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65532, 720896, 0, 65531, 655360, 0, 131067, 655360, 1, 196603, 655360, 1, 262139, 655360, 1, 327675, 655360, 1, 393211, 655360, 1, 131068, 720896, 1, 196604, 720896, 1, 262140, 720896, 1, 327676, 720896, 1, 393212, 720896, 1, 131069, 720896, 1, 196605, 720896, 1, 262141, 720896, 1, 327677, 720896, 1, 393213, 720896, 1, 131070, 720896, 1, 196606, 720896, 1, 262142, 720896, 1, 327678, 720896, 1, 393214, 720896, 1, 131071, 720896, 1, 196607, 720896, 1, 262143, 720896, 1, 327679, 720896, 1, 393215, 720896, 1, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 720896, 1, 327681, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 65540, 720896, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 720896, 1, 327685, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 720896, 1, 262152, 720896, 1, 327688, 720896, 1, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1) + +[node name="TileMap2" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(8, 786432, 4, 9, 786432, 4, 10, 786432, 4, 11, 786432, 4, 12, 786432, 4, 13, 786432, 4, 14, 786432, 4, 65528, 851968, 5, 65527, 786432, 5, 65526, 786432, 5, 65525, 786432, 5, 65524, 786432, 5, 65523, 786432, 5, 65544, 786432, 5, 131080, 786432, 5, 196616, 786432, 5, 262152, 786432, 5, 65545, 786432, 5, 131081, 786432, 5, 196617, 786432, 5, 262153, 786432, 5, 65546, 786432, 5, 131082, 786432, 5, 196618, 786432, 5, 262154, 786432, 5, 65547, 786432, 5, 131083, 786432, 5, 196619, 786432, 5, 262155, 786432, 5, 65548, 786432, 5, 131084, 786432, 5, 196620, 786432, 5, 262156, 786432, 5, 65549, 786432, 5, 131085, 786432, 5, 196621, 786432, 5, 262157, 786432, 5, 65550, 786432, 5, 131086, 786432, 5, 196622, 786432, 5, 262158, 786432, 5, 327694, 786432, 5, 327693, 786432, 5, 327692, 786432, 5, 327691, 786432, 5, 327690, 786432, 5, 327689, 786432, 5, 327688, 786432, 5, -131089, 720896, 5, -65553, 720896, 5, -17, 720896, 5, 65519, 720896, 6, -131088, 786432, 5, -65552, 786432, 5, -16, 786432, 5, 65520, 786432, 5, -131087, 786432, 5, -65551, 786432, 5, -15, 786432, 5, 65521, 786432, 5, -131086, 786432, 5, -65550, 786432, 5, -14, 786432, 5, 65522, 786432, 5, -131085, 786432, 5, -65549, 786432, 5, -13, 786432, 5, -131084, 786432, 5, -65548, 786432, 5, -12, 786432, 5, -131083, 786432, 5, -65547, 786432, 5, -11, 786432, 5, -131082, 786432, 5, -65546, 786432, 5, -10, 786432, 5, -131081, 786432, 5, -65545, 786432, 5, -9, 786432, 5, -131080, 851968, 5, -65544, 851968, 5, -8, 851968, 5, 131064, 851968, 5, 196600, 851968, 5, 262136, 851968, 5, 327672, 851968, 5, 393208, 851968, 5, 131056, 786432, 5, 196592, 786432, 5, 262128, 786432, 5, 327664, 786432, 5, 393200, 786432, 5, 131057, 786432, 5, 196593, 786432, 5, 262129, 786432, 5, 327665, 786432, 5, 393201, 786432, 5, 131058, 786432, 5, 196594, 786432, 5, 262130, 786432, 5, 327666, 786432, 5, 393202, 786432, 5, 131059, 786432, 5, 196595, 786432, 5, 262131, 786432, 5, 327667, 786432, 5, 393203, 786432, 5, 131060, 786432, 5, 196596, 786432, 5, 262132, 786432, 5, 327668, 786432, 5, 393204, 786432, 5, 131061, 786432, 5, 196597, 786432, 5, 262133, 786432, 5, 327669, 786432, 5, 393205, 786432, 5, 131062, 786432, 5, 196598, 786432, 5, 262134, 786432, 5, 327670, 786432, 5, 393206, 786432, 5, 131063, 786432, 5, 196599, 786432, 5, 262135, 786432, 5, 327671, 786432, 5, 393207, 786432, 5, 17, 786432, 4, 65553, 786432, 5, 131089, 786432, 5, 196625, 786432, 5, 262161, 786432, 5, 327697, 786432, 5, 18, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 327698, 786432, 5, 15, 786432, 4, 65551, 786432, 5, 131087, 786432, 5, 196623, 786432, 5, 262159, 786432, 5, 327695, 786432, 5, 16, 786432, 4, 65552, 786432, 5, 131088, 786432, 5, 196624, 786432, 5, 262160, 786432, 5, 327696, 786432, 5, 19, 786432, 4, 65555, 786432, 5, 131091, 786432, 5, 196627, 786432, 5, 262163, 786432, 5, 327699, 786432, 5, -458769, 720896, 5, -393233, 720896, 5, -458768, 786432, 5, -393232, 786432, 5, -458767, 786432, 5, -393231, 786432, 5, -458766, 786432, 5, -393230, 786432, 5, -458765, 786432, 5, -393229, 786432, 5, -458764, 786432, 5, -393228, 786432, 5, -458763, 786432, 5, -393227, 786432, 5, -458762, 786432, 5, -393226, 786432, 5, -458761, 786432, 5, -393225, 786432, 5, -458760, 851968, 5, -393224, 851968, 5, -655377, 720896, 4, -589841, 720896, 5, -524305, 720896, 5, -655376, 786432, 4, -589840, 786432, 5, -524304, 786432, 5, -655375, 786432, 4, -589839, 786432, 5, -524303, 786432, 5, -655374, 786432, 4, -589838, 786432, 5, -524302, 786432, 5, -655373, 786432, 4, -589837, 786432, 5, -524301, 786432, 5, -655372, 786432, 4, -589836, 786432, 5, -524300, 786432, 5, -655371, 786432, 4, -589835, 786432, 5, -524299, 786432, 5, -655370, 786432, 4, -589834, 786432, 5, -524298, 786432, 5, -655369, 786432, 4, -589833, 786432, 5, -524297, 786432, 5, -655368, 851968, 4, -589832, 851968, 5, -524296, 851968, 5, -327697, 720896, 5, -327696, 786432, 5, -327695, 786432, 5, -327694, 786432, 5, -327693, 786432, 5, -327692, 786432, 5, -327691, 786432, 5, -327690, 786432, 5, -327689, 786432, 5, -327688, 851968, 5, -262161, 720896, 5, -262160, 786432, 5, -262159, 786432, 5, -262158, 786432, 5, -262157, 786432, 5, -262156, 786432, 5, -262155, 786432, 5, -262154, 786432, 5, -262153, 786432, 5, -262152, 851968, 5, -196625, 720896, 5, -196624, 786432, 5, -196623, 786432, 5, -196622, 786432, 5, -196621, 786432, 5, -196620, 786432, 5, -196619, 786432, 5, -196618, 786432, 5, -196617, 786432, 5, -196616, 851968, 5, 20, 786432, 4, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 327700, 786432, 5, 21, 786432, 4, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 327701, 786432, 5, 22, 786432, 4, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 786432, 5, 327702, 786432, 5, 23, 786432, 4, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327703, 786432, 5, 24, 786432, 4, 65560, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 25, 786432, 4, 65561, 786432, 5, 131097, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 26, 786432, 4, 65562, 786432, 5, 131098, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 27, 786432, 4, 65563, 786432, 5, 131099, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, -65498, 917504, 3, 38, 786432, 4, 65574, 786432, 5, 131110, 786432, 5, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 39, 786432, 4, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, -65496, 983040, 3, 40, 786432, 4, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, -65495, 983040, 3, 41, 786432, 4, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, -65494, 983040, 3, 42, 786432, 4, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, -65493, 983040, 3, 43, 786432, 4, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, -65492, 983040, 3, 44, 786432, 4, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, -65491, 983040, 3, 45, 786432, 4, 65581, 786432, 5, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, -65490, 983040, 3, 46, 786432, 4, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, -65489, 983040, 3, 47, 786432, 4, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, -65488, 1048576, 3, 48, 786432, 4, 65584, 786432, 5, 131120, 786432, 5, 196656, 786432, 5, 262192, 786432, 5, 327728, 786432, 5, 49, 851968, 4, 65585, 851968, 5, 131121, 851968, 5, 196657, 851968, 5, 262193, 851968, 5, 327729, 851968, 5, -65497, 983040, 3, -589774, 720896, 4, -524238, 720896, 5, -458702, 720896, 5, -393166, 720896, 5, -327630, 720896, 5, -262094, 720896, 5, -196558, 720896, 5, -131022, 720896, 5, -65486, 720896, 5, 50, 720896, 5, 65586, 720896, 5, 131122, 720896, 5, 196658, 720896, 5, 262194, 720896, 5, 327730, 720896, 5, -589773, 786432, 4, -524237, 786432, 5, -458701, 786432, 5, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 786432, 5, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, -589772, 786432, 4, -524236, 786432, 5, -458700, 786432, 5, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 786432, 5, 196660, 786432, 5, 262196, 786432, 5, 327732, 786432, 5, -589771, 786432, 4, -524235, 786432, 5, -458699, 786432, 5, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, -589770, 786432, 4, -524234, 786432, 5, -458698, 786432, 5, -393162, 786432, 5, -327626, 786432, 5, -262090, 786432, 5, -196554, 786432, 5, -131018, 786432, 5, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 786432, 5, -589769, 786432, 4, -524233, 786432, 5, -458697, 786432, 5, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, -589768, 786432, 4, -524232, 786432, 5, -458696, 786432, 5, -393160, 786432, 5, -327624, 786432, 5, -262088, 786432, 5, -196552, 786432, 5, -131016, 786432, 5, -65480, 786432, 5, 56, 786432, 5, 65592, 786432, 5, 131128, 786432, 5, 196664, 786432, 5, 262200, 786432, 5, 327736, 786432, 5, -589767, 786432, 4, -524231, 786432, 5, -458695, 786432, 5, -393159, 786432, 5, -327623, 786432, 5, -262087, 786432, 5, -196551, 786432, 5, -131015, 786432, 5, -65479, 786432, 5, 57, 786432, 5, 65593, 786432, 5, 131129, 786432, 5, 196665, 786432, 5, 262201, 786432, 5, 327737, 786432, 5, -589766, 786432, 4, -524230, 786432, 5, -458694, 786432, 5, -393158, 786432, 5, -327622, 786432, 5, -262086, 786432, 5, -196550, 786432, 5, -131014, 786432, 5, -65478, 786432, 5, 58, 786432, 5, 65594, 786432, 5, 131130, 786432, 5, 196666, 786432, 5, 262202, 786432, 5, 327738, 786432, 5, -589765, 851968, 4, -524229, 851968, 5, -458693, 851968, 5, -393157, 851968, 5, -327621, 851968, 5, -262085, 851968, 5, -196549, 851968, 5, -131013, 851968, 5, -65477, 851968, 5, 59, 851968, 5, 65595, 851968, 5, 131131, 851968, 5, 196667, 851968, 5, 262203, 851968, 5, 327739, 851968, 5, 28, 786432, 4, 65564, 786432, 5, 131100, 786432, 5, 196636, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 29, 786432, 4, 65565, 786432, 5, 131101, 786432, 5, 196637, 786432, 5, 262173, 786432, 5, 327709, 786432, 5, 30, 786432, 4, 65566, 786432, 5, 131102, 786432, 5, 196638, 786432, 5, 262174, 786432, 5, 327710, 786432, 5, 31, 786432, 4, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 32, 786432, 4, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 33, 786432, 4, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 34, 786432, 4, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 35, 786432, 4, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 36, 786432, 4, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 37, 786432, 4, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, -65487, 458752, 6, -131023, 458752, 5, -196559, 458752, 5, -262095, 458752, 5, -327631, 458752, 5, -393167, 458752, 5, -458703, 458752, 5, -524239, 458752, 5, -589775, 458752, 4) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("3_cysy4")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("4_qqut6")] +unique_name_in_owner = true +visible = false + +[node name="CharacterBody2D" parent="." instance=ExtResource("5_yv8tn")] +unique_name_in_owner = true +position = Vector2(66, -50) +script = ExtResource("6_68ewj") + +[node name="RoomLeftPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(66, -113.205) +script = ExtResource("6_2n5r1") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_ct1eh") +follow_offset = Vector2(0, -63.205) +follow_damping = true +draw_limits = true +limit_target = NodePath("../TileMap") +limit_margin = Vector4i(-50, 0, -50, 0) + +[node name="RoomLeftArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(117, -174) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomLeftArea2D"] +position = Vector2(-79, 43) +shape = SubResource("RectangleShape2D_xmxri") +debug_color = Color(0, 0.6, 0.701961, 0.0313726) + +[node name="RoomCentrePhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(1474, -149) +script = ExtResource("6_2n5r1") +follow_mode = 2 +zoom = Vector2(1.5, 1.5) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true +limit_target = NodePath("../RoomCentreArea2D/CollisionShape2D") + +[node name="RoomCentreArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(755, -179) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomCentreArea2D"] +position = Vector2(338, -28) +shape = SubResource("RectangleShape2D_wtfjw") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(2065, -160) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomRightArea2D"] +position = Vector2(255.75, -3.25) +shape = SubResource("RectangleShape2D_daeuh") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(2347, -156) +scale = Vector2(1.0024, 1) +script = ExtResource("6_2n5r1") +follow_mode = 2 +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(66, -113.205) +zoom = Vector2(2, 2) +limit_left = -387 +limit_top = -528 +limit_right = 433 +limit_bottom = 288 +position_smoothing_speed = 10.0 +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("8_hulu3") diff --git a/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn new file mode 100644 index 0000000..4831baf --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D-4.3/2d_tweening_example_scene.tscn @@ -0,0 +1,793 @@ +[gd_scene load_steps=20 format=3 uid="uid://bvpp5na5054jd"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_h1rbo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_1f2t2"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_o6nri"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_j7670"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_gvv7r"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_rwobr"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_ylx0h"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_ytsgf"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd" id="9_3r1pw"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd" id="9_5jy5e"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="10_guf2v"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_h1rbo") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_tgk1y"] +size = Vector2(140, 160) + +[sub_resource type="Resource" id="Resource_mtp70"] +script = ExtResource("10_guf2v") +duration = 0.6 +transition = 1 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_clm0y"] +size = Vector2(104, 160) + +[sub_resource type="Resource" id="Resource_8jg5c"] +script = ExtResource("10_guf2v") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uka0w"] +size = Vector2(560, 160) + +[sub_resource type="Resource" id="Resource_e4e41"] +script = ExtResource("10_guf2v") +duration = 1.2 +transition = 10 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 655360, 6, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 655360, 6, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524281, 720896, 5, 524285, 786432, 5, 524284, 786432, 5, 524283, 786432, 5, 524282, 786432, 5, 589818, 786432, 5, 589819, 786432, 5, 589820, 786432, 5, 655356, 786432, 5, 655357, 786432, 5, 589821, 786432, 5, 655355, 786432, 5, 655354, 786432, 5, 720890, 786432, 5, 720891, 786432, 5, 720892, 786432, 5, 720893, 786432, 5, 720894, 851968, 5, 786429, 786432, 5, 786428, 786432, 5, 786427, 786432, 5, 786426, 786432, 5, 851962, 786432, 5, 917498, 786432, 5, 917499, 786432, 5, 851964, 786432, 5, 851965, 786432, 5, 917501, 786432, 5, 917500, 786432, 5, 851963, 786432, 5, 589817, 720896, 5, 655353, 720896, 5, 720889, 720896, 5, 786425, 720896, 5, 851961, 720896, 5, 917497, 720896, 5, 524286, 851968, 5, 589822, 851968, 5, 655358, 851968, 5, 786430, 851968, 5, 851966, 851968, 5, 917502, 851968, 5, 589824, 720896, 1, 655360, 720896, 1, 720896, 720896, 1, 786432, 720896, 1, 851968, 720896, 1, 589825, 720896, 1, 655361, 720896, 1, 720897, 720896, 1, 786433, 720896, 1, 851969, 720896, 1, 589826, 720896, 1, 655362, 720896, 1, 720898, 720896, 1, 786434, 720896, 1, 851970, 720896, 1, 589827, 720896, 1, 655363, 720896, 1, 720899, 720896, 1, 786435, 720896, 1, 851971, 720896, 1, 589828, 720896, 1, 655364, 720896, 1, 720900, 720896, 1, 786436, 720896, 1, 851972, 720896, 1, 589829, 720896, 1, 655365, 720896, 1, 720901, 720896, 1, 786437, 720896, 1, 851973, 720896, 1, 589830, 720896, 1, 655366, 720896, 1, 720902, 720896, 1, 786438, 720896, 1, 851974, 720896, 1, 589831, 720896, 1, 655367, 720896, 1, 720903, 720896, 1, 786439, 720896, 1, 851975, 720896, 1, 589832, 720896, 1, 655368, 720896, 1, 720904, 720896, 1, 786440, 720896, 1, 851976, 720896, 1, 589833, 786432, 1, 655369, 786432, 1, 720905, 786432, 1, 786441, 786432, 1, 851977, 786432, 1, 655359, 655360, 1, 720895, 655360, 1, 786431, 655360, 1, 851967, 655360, 1, 917503, 655360, 1, 589834, 720896, 1, 655370, 720896, 1, 720906, 720896, 1, 786442, 720896, 1, 851978, 720896, 1, 589835, 720896, 1, 655371, 720896, 1, 720907, 720896, 1, 786443, 720896, 1, 851979, 720896, 1, 589836, 720896, 1, 655372, 720896, 1, 720908, 720896, 1, 786444, 720896, 1, 851980, 720896, 1, 589837, 720896, 1, 655373, 720896, 1, 720909, 720896, 1, 786445, 720896, 1, 851981, 720896, 1, 589838, 720896, 1, 655374, 720896, 1, 720910, 720896, 1, 786446, 720896, 1, 851982, 720896, 1, 589839, 720896, 1, 655375, 720896, 1, 720911, 720896, 1, 786447, 720896, 1, 851983, 720896, 1, 589840, 720896, 1, 655376, 720896, 1, 720912, 720896, 1, 786448, 720896, 1, 851984, 720896, 1, 851985, 720896, 6, 851986, 786432, 6, 851987, 786432, 6, 851988, 786432, 6, 851989, 786432, 6, 851990, 786432, 6, 851991, 786432, 6, 851992, 786432, 6, 851993, 786432, 6, 851994, 786432, 6, 851995, 786432, 6, 851996, 786432, 6, 851997, 851968, 6, 524306, 786432, 5, 589842, 786432, 5, 655378, 786432, 5, 720914, 786432, 5, 786450, 786432, 5, 524307, 786432, 5, 589843, 786432, 5, 655379, 786432, 5, 720915, 786432, 5, 786451, 786432, 5, 524308, 786432, 5, 589844, 786432, 5, 655380, 786432, 5, 720916, 786432, 5, 786452, 786432, 5, 524309, 786432, 5, 589845, 786432, 5, 655381, 786432, 5, 720917, 786432, 5, 786453, 786432, 5, 524310, 786432, 5, 589846, 786432, 5, 655382, 786432, 5, 720918, 786432, 5, 786454, 786432, 5, 524311, 786432, 5, 589847, 786432, 5, 655383, 786432, 5, 720919, 786432, 5, 786455, 786432, 5, 524312, 786432, 5, 589848, 786432, 5, 655384, 786432, 5, 720920, 786432, 5, 786456, 786432, 5, 524313, 786432, 5, 589849, 786432, 5, 655385, 786432, 5, 720921, 786432, 5, 786457, 786432, 5, 524314, 786432, 5, 589850, 786432, 5, 655386, 786432, 5, 720922, 786432, 5, 786458, 786432, 5, 524315, 786432, 5, 589851, 786432, 5, 655387, 786432, 5, 720923, 786432, 5, 786459, 786432, 5, 524316, 786432, 5, 589852, 786432, 5, 655388, 786432, 5, 720924, 786432, 5, 786460, 786432, 5, 524305, 720896, 5, 589841, 720896, 5, 655377, 720896, 5, 720913, 720896, 5, 786449, 720896, 5, 524317, 851968, 5, 589853, 851968, 5, 655389, 851968, 5, 720925, 851968, 5, 786461, 851968, 5, -262106, 786432, 5, -196570, 786432, 5, -131034, 786432, 5, -65498, 786432, 5, 38, 786432, 5, 65574, 786432, 5, 131110, 655360, 6, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 393254, 786432, 5, 458790, 786432, 5, -262105, 786432, 5, -196569, 786432, 5, -131033, 786432, 5, -65497, 786432, 5, 39, 786432, 5, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, 393255, 655360, 6, 458791, 786432, 5, -262104, 786432, 5, -196568, 786432, 5, -131032, 786432, 5, -65496, 786432, 5, 40, 655360, 6, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 655360, 6, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, -262103, 786432, 5, -196567, 655360, 6, -131031, 786432, 5, -65495, 786432, 5, 41, 786432, 5, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, -262102, 786432, 5, -196566, 786432, 5, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 655360, 6, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, 393258, 786432, 5, 458794, 655360, 6, 524326, 786432, 6, 524327, 786432, 6, 524328, 786432, 6, 524329, 786432, 6, 524330, 786432, 6, -327642, 786432, 4, -327641, 786432, 4, -327640, 786432, 4, -327639, 786432, 4, -327638, 786432, 4, -327632, 851968, 4, -262096, 851968, 5, -196560, 851968, 5, -131024, 851968, 5, -65488, 851968, 5, 48, 851968, 5, 65584, 851968, 5, 131120, 851968, 5, 196656, 851968, 5, 262192, 851968, 5, 327728, 851968, 5, 393264, 851968, 5, 458800, 851968, 5, 524336, 851968, 6, -327637, 786432, 4, -327636, 786432, 4, -327635, 786432, 4, -327634, 786432, 4, -327633, 786432, 4, -262101, 786432, 5, -196565, 786432, 5, -131029, 655360, 6, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 655360, 6, 393259, 786432, 5, 458795, 786432, 5, -262100, 786432, 5, -196564, 786432, 5, -131028, 786432, 5, -65492, 786432, 5, 44, 655360, 6, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, -262099, 786432, 5, -196563, 786432, 5, -131027, 786432, 5, -65491, 786432, 5, 45, 786432, 5, 65581, 655360, 6, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, -262098, 655360, 6, -196562, 786432, 5, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 655360, 6, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 655360, 6, -262097, 786432, 5, -196561, 786432, 5, -131025, 786432, 5, -65489, 786432, 5, 47, 786432, 5, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, 393263, 786432, 5, 458799, 786432, 5, 524331, 786432, 6, 524332, 786432, 6, 524333, 786432, 6, 524334, 786432, 6, 524335, 786432, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_1f2t2")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_o6nri")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +position_smoothing_speed = 10.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_j7670") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(227, -28) +script = ExtResource("5_gvv7r") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +tween_resource = ExtResource("6_rwobr") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -132.0 +offset_right = 332.0 +offset_bottom = -68.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_ytsgf")] +position = Vector2(227, -28) +script = ExtResource("9_5jy5e") + +[node name="WideArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(393, -40) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WideArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_tgk1y") + +[node name="ColorRect" type="ColorRect" parent="WideArea"] +offset_left = -70.0 +offset_top = -120.0 +offset_right = 70.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="WideArea"] +offset_left = -77.0 +offset_top = -250.0 +offset_right = 76.0 +offset_bottom = -120.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Sine + +Duration: +0.6s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="WideArea"] +position = Vector2(4, -100) +script = ExtResource("5_gvv7r") +zoom = Vector2(0.8, 0.8) +tween_resource = SubResource("Resource_mtp70") +draw_limits = true + +[node name="UpperZoomArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(649, -135) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="ColorRect" type="ColorRect" parent="UpperZoomArea"] +offset_left = -52.0 +offset_top = -120.0 +offset_right = 52.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="UpperZoomArea"] +offset_left = -74.0 +offset_top = -251.0 +offset_right = 79.0 +offset_bottom = -121.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Circ + +Duration: +0.3s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="UpperZoomArea"] +position = Vector2(2, -83) +script = ExtResource("5_gvv7r") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_8jg5c") +draw_limits = true + +[node name="ForwardArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(1136, -38) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_3r1pw") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ForwardArea"] +position = Vector2(0, -42) +shape = SubResource("RectangleShape2D_uka0w") + +[node name="ColorRect" type="ColorRect" parent="ForwardArea"] +offset_left = -280.0 +offset_top = -122.0 +offset_right = 280.0 +offset_bottom = 38.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="ForwardArea"] +offset_left = -76.0 +offset_top = -252.0 +offset_right = 77.0 +offset_bottom = -122.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("7_ylx0h") +text = "Transition Type: +Back + +Duration: +1.2s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="ForwardArea"] +position = Vector2(344, -46) +script = ExtResource("5_gvv7r") +zoom = Vector2(0.9, 0.9) +tween_resource = SubResource("Resource_e4e41") +draw_limits = true diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn new file mode 100644 index 0000000..46d40be --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=11 format=3 uid="uid://drvexsp2t0nfy"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_1utlo"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="2_mgsut"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_54fc4"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="6_kqt1v"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_pxbym"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="7_62i3t"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="7_fdx1s"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="12_k4p0h"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_1utlo") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D2" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("7_fdx1s")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("6_kqt1v")] +unique_name_in_owner = true +visible = false + +[node name="Controls" type="Label" parent="."] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("12_k4p0h") +text = "[WASD] to move +[Space] to jump" + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +zoom = Vector2(1.5, 1.5) +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_54fc4") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +process_priority = -1 +position = Vector2(227, -28) +script = ExtResource("2_mgsut") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(1.5, 1.5) +frame_preview = false +tween_resource = ExtResource("6_pxbym") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("7_62i3t")] +position = Vector2(227, -28) + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..69d1d70 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_framed_example_scene.tscn @@ -0,0 +1,641 @@ +[gd_scene load_steps=11 format=3 uid="uid://bxtsl6qlpq1ar"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_27o77"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_1tbys"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_1kfnp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_mylkx"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_lwx5e"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_tju6r"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_bo8m7"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_wlikg"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_27o77") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -345.0 +offset_top = -143.0 +offset_right = 947.0 +offset_bottom = 578.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_1tbys")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_1kfnp")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(282, -29) +zoom = Vector2(2, 2) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_mylkx") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(282, -29) +script = ExtResource("5_lwx5e") +priority = 5 +follow_mode = 5 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(2, 2) +tween_resource = ExtResource("6_tju6r") +tween_on_load = false +follow_damping = true +dead_zone_width = 0.416 +dead_zone_height = 0.63 +show_viewfinder_in_play = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_bo8m7") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_wlikg")] +position = Vector2(282, -29) + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn new file mode 100644 index 0000000..4de4160 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_group_example_scene.tscn @@ -0,0 +1,650 @@ +[gd_scene load_steps=13 format=3 uid="uid://brrncnp26lrco"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_5kqbp"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_xmntp"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_8dojy"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_2efwt"] +[ext_resource type="Texture2D" uid="uid://cwep0on2tthn7" path="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" id="5_0v2cd"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="6_diuy4"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="7_ybwrw"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="9_wk0p3"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="12_uvcwb"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_5kqbp") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_spy00"] +script = ExtResource("9_wk0p3") +duration = 0.3 +transition = 4 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -196596, 917504, 0, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, -65511, 917504, 4, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -65498, 851968, 5, -131034, 851968, 5, -196570, 851968, 5, -327642, 851968, 4, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -262106, 851968, 5, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 786432, 5, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 524326, 851968, 6, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_xmntp")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_8dojy")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(107, -172.5) +zoom = Vector2(1.615, 1.615) +position_smoothing_speed = 8.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_2efwt") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("12_uvcwb") +text = "[WASD] to move +[Space] to jump" + +[node name="PhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_targets")] +position = Vector2(107, -172.5) +script = ExtResource("6_diuy4") +priority = 10 +follow_mode = 3 +follow_targets = [NodePath("../GroupNPCSprite"), NodePath("../CharacterBody2D/PlayerVisuals")] +zoom = Vector2(1.615, 1.615) +tween_resource = SubResource("Resource_spy00") +tween_on_load = false +follow_damping = true +auto_zoom = true +auto_zoom_margin = Vector4(200, 0, 200, 0) +draw_limits = true + +[node name="GroupNPCSprite" type="Sprite2D" parent="."] +unique_name_in_owner = true +position = Vector2(107, -316) +texture = ExtResource("5_0v2cd") + +[node name="CharacterBody2D" parent="." instance=ExtResource("7_ybwrw")] +position = Vector2(265, -29) + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn new file mode 100644 index 0000000..9fb9454 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_follow_path_example_scene.tscn @@ -0,0 +1,659 @@ +[gd_scene load_steps=12 format=3 uid="uid://psbaaxnedqmq"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_17ngo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_whpvu"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_rbo5b"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_yddet"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_x25dj"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_4vtmp"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_6pcaf"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_a2pel"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_17ngo") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Curve2D" id="Curve2D_usrhf"] +_data = { +"points": PackedVector2Array(-96.4111, 42.3785, 0, 0, 222, 0, 0, 0, 0, 0, 1550, 0) +} +point_count = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 524305, 720896, 6, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 524306, 786432, 6, 524307, 786432, 6, 524308, 786432, 6, 524309, 786432, 6, 524310, 786432, 6, 524311, 786432, 6, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 524317, 851968, 6, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 524312, 786432, 6, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 524313, 786432, 6, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 524314, 786432, 6, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 524315, 786432, 6, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, 524316, 786432, 6, -196593, 1048576, 6, -65509, 720896, 3, -65510, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, 524282, 786432, 5, 524283, 786432, 5, 524284, 786432, 5, 524285, 786432, 5, 524281, 720896, 5, 524286, 851968, 5, 589817, 720896, 6, 589818, 786432, 6, 589819, 786432, 6, 589820, 786432, 6, 589821, 786432, 6, 589822, 851968, 6, -196569, 720896, 4, -131033, 720896, 5, -65497, 720896, 5, 39, 720896, 5, 65575, 720896, 5, 131111, 720896, 5, 196647, 720896, 5, 262183, 720896, 5, 327719, 720896, 5, 393255, 720896, 5, 458791, 720896, 5, 524327, 720896, 5, 589863, 720896, 5, 655399, 720896, 6, -262104, 917504, 6, -196568, 786432, 4, -131032, 786432, 5, -65496, 655360, 6, 40, 786432, 5, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, 524328, 655360, 6, 589864, 786432, 5, 655400, 786432, 6, -262103, 983040, 5, -196567, 786432, 4, -131031, 786432, 5, -65495, 786432, 5, 41, 589824, 6, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, 524329, 786432, 5, 589865, 786432, 5, 655401, 786432, 6, -262102, 720896, 3, -196566, 786432, 4, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 655360, 6, 327722, 786432, 5, 393258, 786432, 5, 458794, 786432, 5, 524330, 786432, 5, 589866, 786432, 5, 655402, 786432, 6, -262101, 1048576, 6, -196565, 786432, 4, -131029, 786432, 5, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, 393259, 655360, 6, 458795, 655360, 6, 524331, 786432, 5, 589867, 786432, 5, 655403, 786432, 6, -262100, 720896, 3, -196564, 786432, 4, -131028, 786432, 5, -65492, 786432, 5, 44, 786432, 5, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, 524332, 786432, 5, 589868, 786432, 5, 655404, 786432, 6, -262099, 983040, 6, -196563, 786432, 4, -131027, 786432, 5, -65491, 786432, 5, 45, 589824, 6, 65581, 655360, 6, 131117, 655360, 6, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, 524333, 786432, 5, 589869, 655360, 6, 655405, 786432, 6, -196562, 786432, 4, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 786432, 5, 524334, 786432, 5, 589870, 786432, 5, 655406, 786432, 6, -196561, 851968, 4, -131025, 851968, 5, -65489, 851968, 5, 47, 851968, 5, 65583, 851968, 5, 131119, 851968, 5, 196655, 851968, 5, 262191, 851968, 5, 327727, 851968, 5, 393263, 851968, 5, 458799, 851968, 5, 524335, 851968, 5, 589871, 851968, 5, 655407, 851968, 6, -131042, 720896, 4, -65506, 720896, 5, 30, 720896, 5, 65566, 720896, 5, 131102, 720896, 5, 196638, 720896, 5, 262174, 720896, 5, 327710, 720896, 5, 393246, 720896, 5, 458782, 720896, 5, 524318, 720896, 5, -196577, 917504, 6, -131041, 786432, 4, -65505, 786432, 5, 31, 655360, 6, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 786432, 5, 458783, 786432, 5, 524319, 786432, 5, -196576, 983040, 5, -131040, 786432, 4, -65504, 786432, 5, 32, 786432, 5, 65568, 589824, 6, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 524320, 786432, 5, -196575, 720896, 3, -131039, 786432, 4, -65503, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 655360, 6, 393249, 786432, 5, 458785, 786432, 5, 524321, 786432, 5, -196574, 1048576, 6, -131038, 786432, 4, -65502, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 393250, 786432, 5, 458786, 655360, 6, 524322, 655360, 6, -196573, 720896, 3, -131037, 786432, 4, -65501, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 524323, 786432, 5, -196572, 983040, 6, -131036, 786432, 4, -65500, 786432, 5, 36, 786432, 5, 65572, 589824, 6, 131108, 655360, 6, 196644, 655360, 6, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 786432, 5, 524324, 786432, 5, -131035, 786432, 4, -65499, 786432, 5, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524325, 786432, 5, -131034, 851968, 4, -65498, 851968, 5, 38, 851968, 5, 65574, 851968, 5, 131110, 851968, 5, 196646, 851968, 5, 262182, 851968, 5, 327718, 851968, 5, 393254, 851968, 5, 458790, 851968, 5, 524326, 851968, 5, 589854, 720896, 5, 655390, 720896, 5, 720926, 720896, 6, 589855, 655360, 6, 655391, 786432, 5, 720927, 786432, 6, 589856, 786432, 5, 655392, 786432, 5, 720928, 786432, 6, 589857, 786432, 5, 655393, 786432, 5, 720929, 786432, 6, 589858, 786432, 5, 655394, 786432, 5, 720930, 786432, 6, 589859, 786432, 5, 655395, 786432, 5, 720931, 786432, 6, 589860, 786432, 5, 655396, 655360, 6, 720932, 786432, 6, 589861, 786432, 5, 655397, 786432, 5, 720933, 786432, 6, 589862, 851968, 5, 655398, 851968, 5, 720934, 851968, 6, -458704, 720896, 4, -393168, 720896, 5, -327632, 720896, 5, -262096, 720896, 5, -196560, 720896, 5, -131024, 720896, 5, -65488, 720896, 5, 48, 720896, 5, 65584, 720896, 5, 131120, 720896, 5, 196656, 720896, 5, 262192, 720896, 5, 327728, 720896, 5, 393264, 720896, 6, -524239, 917504, 6, -458703, 786432, 4, -393167, 786432, 5, -327631, 655360, 6, -262095, 786432, 5, -196559, 786432, 5, -131023, 786432, 5, -65487, 786432, 5, 49, 786432, 5, 65585, 786432, 5, 131121, 786432, 5, 196657, 786432, 5, 262193, 655360, 6, 327729, 786432, 5, 393265, 786432, 6, -524238, 983040, 5, -458702, 786432, 4, -393166, 786432, 5, -327630, 786432, 5, -262094, 589824, 6, -196558, 786432, 5, -131022, 786432, 5, -65486, 786432, 5, 50, 786432, 5, 65586, 786432, 5, 131122, 786432, 5, 196658, 786432, 5, 262194, 786432, 5, 327730, 786432, 5, 393266, 786432, 6, -524237, 720896, 3, -458701, 786432, 4, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 655360, 6, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, 393267, 786432, 6, -524236, 1048576, 6, -458700, 786432, 4, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 655360, 6, 196660, 655360, 6, 262196, 786432, 5, 327732, 786432, 5, 393268, 786432, 6, -524235, 720896, 3, -458699, 786432, 4, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, 393269, 786432, 6, -524234, 983040, 6, -458698, 786432, 4, -393162, 786432, 5, -327626, 786432, 5, -262090, 589824, 6, -196554, 655360, 6, -131018, 655360, 6, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 655360, 6, 393270, 786432, 6, -458697, 786432, 4, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, 393271, 786432, 6, -458696, 851968, 4, -393160, 851968, 5, -327624, 851968, 5, -262088, 851968, 5, -196552, 851968, 5, -131016, 851968, 5, -65480, 851968, 5, 56, 851968, 5, 65592, 851968, 5, 131128, 851968, 5, 196664, 851968, 5, 262200, 851968, 5, 327736, 851968, 5, 393272, 851968, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_whpvu")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_rbo5b")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(374, -216) +zoom = Vector2(1.5, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_yddet") + +[node name="Label" type="Label" parent="."] +offset_left = 167.0 +offset_top = -133.0 +offset_right = 332.0 +offset_bottom = -69.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_6pcaf") +text = "[WASD] to move +[Space] to jump" + +[node name="Player" type="Node" parent="."] + +[node name="Label" type="Label" parent="Player"] +visible = false +offset_left = 167.0 +offset_top = -145.0 +offset_right = 332.0 +offset_bottom = -81.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("8_6pcaf") +text = "[WASD] to move +[Space] to jump" + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target", "follow_path")] +unique_name_in_owner = true +position = Vector2(374, -216) +script = ExtResource("5_x25dj") +priority = 10 +follow_mode = 4 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +follow_path = NodePath("../Path2D") +zoom = Vector2(1.5, 1.5) +tween_resource = ExtResource("6_4vtmp") +tween_on_load = false +draw_limits = true + +[node name="Path2D" type="Path2D" parent="."] +position = Vector2(152, -216) +curve = SubResource("Curve2D_usrhf") + +[node name="CharacterBody2D" parent="." instance=ExtResource("8_a2pel")] +position = Vector2(225, -28) + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn new file mode 100644 index 0000000..fdfb571 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_limit_example_scene.tscn @@ -0,0 +1,718 @@ +[gd_scene load_steps=16 format=3 uid="uid://w20wokw3ohsq"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd" id="1_ijqyv"] +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_wmhqb"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_v5qg2"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_oqmwp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="4_4b648"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="5_pr2x5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="9_twplb"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="9_w5e16"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_wmhqb") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="Resource" id="Resource_ct1eh"] +script = ExtResource("9_twplb") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xmxri"] +size = Vector2(790, 410) + +[sub_resource type="Resource" id="Resource_exr3j"] +script = ExtResource("9_twplb") +duration = 0.9 +transition = 2 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_wtfjw"] +size = Vector2(1530, 700) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_daeuh"] +size = Vector2(1027.5, 610.5) + +[node name="ExampleScene2D" type="Node2D"] +script = ExtResource("1_ijqyv") + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) +metadata/_edit_lock_ = true + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +position = Vector2(-97, 0) +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-458743, 851968, 6, -458744, 786432, 6, -458745, 786432, 6, -458746, 786432, 6, -458747, 786432, 6, -458748, 786432, 6, -458749, 786432, 6, -458750, 786432, 6, -458751, 786432, 6, -393218, 786432, 6, -393219, 786432, 6, -393220, 786432, 6, -393221, 720896, 6, -458752, 786432, 6, -393217, 786432, 6, -524279, 851968, 5, -589815, 851968, 5, -655351, 851968, 5, -720887, 851968, 4, -720888, 786432, 4, -720889, 786432, 4, -720890, 786432, 4, -720891, 786432, 4, -720892, 786432, 4, -720893, 786432, 4, -720894, 786432, 4, -720895, 786432, 4, -720896, 786432, 4, -655361, 786432, 4, -655362, 786432, 4, -655363, 786432, 4, -655364, 786432, 4, -655365, 720896, 4, -589829, 720896, 5, -524293, 720896, 5, -458757, 720896, 5, -589828, 786432, 5, -524292, 786432, 5, -458756, 786432, 5, -589827, 786432, 5, -524291, 786432, 5, -458755, 786432, 5, -589826, 786432, 5, -524290, 786432, 5, -458754, 786432, 5, -589825, 786432, 5, -524289, 786432, 5, -458753, 786432, 5, -655360, 786432, 5, -589824, 786432, 5, -524288, 786432, 5, -655359, 786432, 5, -589823, 786432, 5, -524287, 786432, 5, -655358, 786432, 5, -589822, 786432, 5, -524286, 786432, 5, -655357, 786432, 5, -589821, 786432, 5, -524285, 786432, 5, -655356, 786432, 5, -589820, 786432, 5, -524284, 786432, 5, -655355, 786432, 5, -589819, 786432, 5, -524283, 786432, 5, -655354, 786432, 5, -589818, 786432, 5, -524282, 786432, 5, -655353, 786432, 5, -589817, 786432, 5, -524281, 786432, 5, -655352, 786432, 5, -589816, 786432, 5, -524280, 786432, 5) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(65533, 720896, 0, 65534, 720896, 0, 65535, 720896, 0, 0, 720896, 0, 1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65532, 720896, 0, 65531, 655360, 0, 131067, 655360, 1, 196603, 655360, 1, 262139, 655360, 1, 327675, 655360, 1, 393211, 655360, 1, 131068, 720896, 1, 196604, 720896, 1, 262140, 720896, 1, 327676, 720896, 1, 393212, 720896, 1, 131069, 720896, 1, 196605, 720896, 1, 262141, 720896, 1, 327677, 720896, 1, 393213, 720896, 1, 131070, 720896, 1, 196606, 720896, 1, 262142, 720896, 1, 327678, 720896, 1, 393214, 720896, 1, 131071, 720896, 1, 196607, 720896, 1, 262143, 720896, 1, 327679, 720896, 1, 393215, 720896, 1, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 720896, 1, 327681, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 65540, 720896, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 720896, 1, 327685, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 720896, 1, 262152, 720896, 1, 327688, 720896, 1, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1) + +[node name="TileMap2" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(8, 786432, 4, 9, 786432, 4, 10, 786432, 4, 11, 786432, 4, 12, 786432, 4, 13, 786432, 4, 14, 786432, 4, 65528, 851968, 5, 65527, 786432, 5, 65526, 786432, 5, 65525, 786432, 5, 65524, 786432, 5, 65523, 786432, 5, 65544, 786432, 5, 131080, 786432, 5, 196616, 786432, 5, 262152, 786432, 5, 65545, 786432, 5, 131081, 786432, 5, 196617, 786432, 5, 262153, 786432, 5, 65546, 786432, 5, 131082, 786432, 5, 196618, 786432, 5, 262154, 786432, 5, 65547, 786432, 5, 131083, 786432, 5, 196619, 786432, 5, 262155, 786432, 5, 65548, 786432, 5, 131084, 786432, 5, 196620, 786432, 5, 262156, 786432, 5, 65549, 786432, 5, 131085, 786432, 5, 196621, 786432, 5, 262157, 786432, 5, 65550, 786432, 5, 131086, 786432, 5, 196622, 786432, 5, 262158, 786432, 5, 327694, 786432, 5, 327693, 786432, 5, 327692, 786432, 5, 327691, 786432, 5, 327690, 786432, 5, 327689, 786432, 5, 327688, 786432, 5, -131089, 720896, 5, -65553, 720896, 5, -17, 720896, 5, 65519, 720896, 6, -131088, 786432, 5, -65552, 786432, 5, -16, 786432, 5, 65520, 786432, 5, -131087, 786432, 5, -65551, 786432, 5, -15, 786432, 5, 65521, 786432, 5, -131086, 786432, 5, -65550, 786432, 5, -14, 786432, 5, 65522, 786432, 5, -131085, 786432, 5, -65549, 786432, 5, -13, 786432, 5, -131084, 786432, 5, -65548, 786432, 5, -12, 786432, 5, -131083, 786432, 5, -65547, 786432, 5, -11, 786432, 5, -131082, 786432, 5, -65546, 786432, 5, -10, 786432, 5, -131081, 786432, 5, -65545, 786432, 5, -9, 786432, 5, -131080, 851968, 5, -65544, 851968, 5, -8, 851968, 5, 131064, 851968, 5, 196600, 851968, 5, 262136, 851968, 5, 327672, 851968, 5, 393208, 851968, 5, 131056, 786432, 5, 196592, 786432, 5, 262128, 786432, 5, 327664, 786432, 5, 393200, 786432, 5, 131057, 786432, 5, 196593, 786432, 5, 262129, 786432, 5, 327665, 786432, 5, 393201, 786432, 5, 131058, 786432, 5, 196594, 786432, 5, 262130, 786432, 5, 327666, 786432, 5, 393202, 786432, 5, 131059, 786432, 5, 196595, 786432, 5, 262131, 786432, 5, 327667, 786432, 5, 393203, 786432, 5, 131060, 786432, 5, 196596, 786432, 5, 262132, 786432, 5, 327668, 786432, 5, 393204, 786432, 5, 131061, 786432, 5, 196597, 786432, 5, 262133, 786432, 5, 327669, 786432, 5, 393205, 786432, 5, 131062, 786432, 5, 196598, 786432, 5, 262134, 786432, 5, 327670, 786432, 5, 393206, 786432, 5, 131063, 786432, 5, 196599, 786432, 5, 262135, 786432, 5, 327671, 786432, 5, 393207, 786432, 5, 17, 786432, 4, 65553, 786432, 5, 131089, 786432, 5, 196625, 786432, 5, 262161, 786432, 5, 327697, 786432, 5, 18, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 327698, 786432, 5, 15, 786432, 4, 65551, 786432, 5, 131087, 786432, 5, 196623, 786432, 5, 262159, 786432, 5, 327695, 786432, 5, 16, 786432, 4, 65552, 786432, 5, 131088, 786432, 5, 196624, 786432, 5, 262160, 786432, 5, 327696, 786432, 5, 19, 786432, 4, 65555, 786432, 5, 131091, 786432, 5, 196627, 786432, 5, 262163, 786432, 5, 327699, 786432, 5, -458769, 720896, 5, -393233, 720896, 5, -458768, 786432, 5, -393232, 786432, 5, -458767, 786432, 5, -393231, 786432, 5, -458766, 786432, 5, -393230, 786432, 5, -458765, 786432, 5, -393229, 786432, 5, -458764, 786432, 5, -393228, 786432, 5, -458763, 786432, 5, -393227, 786432, 5, -458762, 786432, 5, -393226, 786432, 5, -458761, 786432, 5, -393225, 786432, 5, -458760, 851968, 5, -393224, 851968, 5, -655377, 720896, 4, -589841, 720896, 5, -524305, 720896, 5, -655376, 786432, 4, -589840, 786432, 5, -524304, 786432, 5, -655375, 786432, 4, -589839, 786432, 5, -524303, 786432, 5, -655374, 786432, 4, -589838, 786432, 5, -524302, 786432, 5, -655373, 786432, 4, -589837, 786432, 5, -524301, 786432, 5, -655372, 786432, 4, -589836, 786432, 5, -524300, 786432, 5, -655371, 786432, 4, -589835, 786432, 5, -524299, 786432, 5, -655370, 786432, 4, -589834, 786432, 5, -524298, 786432, 5, -655369, 786432, 4, -589833, 786432, 5, -524297, 786432, 5, -655368, 851968, 4, -589832, 851968, 5, -524296, 851968, 5, -327697, 720896, 5, -327696, 786432, 5, -327695, 786432, 5, -327694, 786432, 5, -327693, 786432, 5, -327692, 786432, 5, -327691, 786432, 5, -327690, 786432, 5, -327689, 786432, 5, -327688, 851968, 5, -262161, 720896, 5, -262160, 786432, 5, -262159, 786432, 5, -262158, 786432, 5, -262157, 786432, 5, -262156, 786432, 5, -262155, 786432, 5, -262154, 786432, 5, -262153, 786432, 5, -262152, 851968, 5, -196625, 720896, 5, -196624, 786432, 5, -196623, 786432, 5, -196622, 786432, 5, -196621, 786432, 5, -196620, 786432, 5, -196619, 786432, 5, -196618, 786432, 5, -196617, 786432, 5, -196616, 851968, 5, 20, 786432, 4, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 327700, 786432, 5, 21, 786432, 4, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 327701, 786432, 5, 22, 786432, 4, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 786432, 5, 327702, 786432, 5, 23, 786432, 4, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327703, 786432, 5, 24, 786432, 4, 65560, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 25, 786432, 4, 65561, 786432, 5, 131097, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 26, 786432, 4, 65562, 786432, 5, 131098, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 27, 786432, 4, 65563, 786432, 5, 131099, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, -65498, 917504, 3, 38, 786432, 4, 65574, 786432, 5, 131110, 786432, 5, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 39, 786432, 4, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, -65496, 983040, 3, 40, 786432, 4, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 786432, 5, 327720, 786432, 5, -65495, 983040, 3, 41, 786432, 4, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, -65494, 983040, 3, 42, 786432, 4, 65578, 786432, 5, 131114, 786432, 5, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, -65493, 983040, 3, 43, 786432, 4, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 786432, 5, -65492, 983040, 3, 44, 786432, 4, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, -65491, 983040, 3, 45, 786432, 4, 65581, 786432, 5, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, -65490, 983040, 3, 46, 786432, 4, 65582, 786432, 5, 131118, 786432, 5, 196654, 786432, 5, 262190, 786432, 5, 327726, 786432, 5, -65489, 983040, 3, 47, 786432, 4, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, -65488, 1048576, 3, 48, 786432, 4, 65584, 786432, 5, 131120, 786432, 5, 196656, 786432, 5, 262192, 786432, 5, 327728, 786432, 5, 49, 851968, 4, 65585, 851968, 5, 131121, 851968, 5, 196657, 851968, 5, 262193, 851968, 5, 327729, 851968, 5, -65497, 983040, 3, -589774, 720896, 4, -524238, 720896, 5, -458702, 720896, 5, -393166, 720896, 5, -327630, 720896, 5, -262094, 720896, 5, -196558, 720896, 5, -131022, 720896, 5, -65486, 720896, 5, 50, 720896, 5, 65586, 720896, 5, 131122, 720896, 5, 196658, 720896, 5, 262194, 720896, 5, 327730, 720896, 5, -589773, 786432, 4, -524237, 786432, 5, -458701, 786432, 5, -393165, 786432, 5, -327629, 786432, 5, -262093, 786432, 5, -196557, 786432, 5, -131021, 786432, 5, -65485, 786432, 5, 51, 786432, 5, 65587, 786432, 5, 131123, 786432, 5, 196659, 786432, 5, 262195, 786432, 5, 327731, 786432, 5, -589772, 786432, 4, -524236, 786432, 5, -458700, 786432, 5, -393164, 786432, 5, -327628, 786432, 5, -262092, 786432, 5, -196556, 786432, 5, -131020, 786432, 5, -65484, 786432, 5, 52, 786432, 5, 65588, 786432, 5, 131124, 786432, 5, 196660, 786432, 5, 262196, 786432, 5, 327732, 786432, 5, -589771, 786432, 4, -524235, 786432, 5, -458699, 786432, 5, -393163, 786432, 5, -327627, 786432, 5, -262091, 786432, 5, -196555, 786432, 5, -131019, 786432, 5, -65483, 786432, 5, 53, 786432, 5, 65589, 786432, 5, 131125, 786432, 5, 196661, 786432, 5, 262197, 786432, 5, 327733, 786432, 5, -589770, 786432, 4, -524234, 786432, 5, -458698, 786432, 5, -393162, 786432, 5, -327626, 786432, 5, -262090, 786432, 5, -196554, 786432, 5, -131018, 786432, 5, -65482, 786432, 5, 54, 786432, 5, 65590, 786432, 5, 131126, 786432, 5, 196662, 786432, 5, 262198, 786432, 5, 327734, 786432, 5, -589769, 786432, 4, -524233, 786432, 5, -458697, 786432, 5, -393161, 786432, 5, -327625, 786432, 5, -262089, 786432, 5, -196553, 786432, 5, -131017, 786432, 5, -65481, 786432, 5, 55, 786432, 5, 65591, 786432, 5, 131127, 786432, 5, 196663, 786432, 5, 262199, 786432, 5, 327735, 786432, 5, -589768, 786432, 4, -524232, 786432, 5, -458696, 786432, 5, -393160, 786432, 5, -327624, 786432, 5, -262088, 786432, 5, -196552, 786432, 5, -131016, 786432, 5, -65480, 786432, 5, 56, 786432, 5, 65592, 786432, 5, 131128, 786432, 5, 196664, 786432, 5, 262200, 786432, 5, 327736, 786432, 5, -589767, 786432, 4, -524231, 786432, 5, -458695, 786432, 5, -393159, 786432, 5, -327623, 786432, 5, -262087, 786432, 5, -196551, 786432, 5, -131015, 786432, 5, -65479, 786432, 5, 57, 786432, 5, 65593, 786432, 5, 131129, 786432, 5, 196665, 786432, 5, 262201, 786432, 5, 327737, 786432, 5, -589766, 786432, 4, -524230, 786432, 5, -458694, 786432, 5, -393158, 786432, 5, -327622, 786432, 5, -262086, 786432, 5, -196550, 786432, 5, -131014, 786432, 5, -65478, 786432, 5, 58, 786432, 5, 65594, 786432, 5, 131130, 786432, 5, 196666, 786432, 5, 262202, 786432, 5, 327738, 786432, 5, -589765, 851968, 4, -524229, 851968, 5, -458693, 851968, 5, -393157, 851968, 5, -327621, 851968, 5, -262085, 851968, 5, -196549, 851968, 5, -131013, 851968, 5, -65477, 851968, 5, 59, 851968, 5, 65595, 851968, 5, 131131, 851968, 5, 196667, 851968, 5, 262203, 851968, 5, 327739, 851968, 5, 28, 786432, 4, 65564, 786432, 5, 131100, 786432, 5, 196636, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 29, 786432, 4, 65565, 786432, 5, 131101, 786432, 5, 196637, 786432, 5, 262173, 786432, 5, 327709, 786432, 5, 30, 786432, 4, 65566, 786432, 5, 131102, 786432, 5, 196638, 786432, 5, 262174, 786432, 5, 327710, 786432, 5, 31, 786432, 4, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 32, 786432, 4, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 33, 786432, 4, 65569, 786432, 5, 131105, 786432, 5, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 34, 786432, 4, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 786432, 5, 327714, 786432, 5, 35, 786432, 4, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 36, 786432, 4, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 37, 786432, 4, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 786432, 5, 327717, 786432, 5, -65487, 458752, 6, -131023, 458752, 5, -196559, 458752, 5, -262095, 458752, 5, -327631, 458752, 5, -393167, 458752, 5, -458703, 458752, 5, -524239, 458752, 5, -589775, 458752, 4) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_v5qg2")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_oqmwp")] +unique_name_in_owner = true +visible = false + +[node name="CharacterBody2D" parent="." instance=ExtResource("5_pr2x5")] +unique_name_in_owner = true +position = Vector2(66, -50) + +[node name="RoomLeftPhantomCamera2D" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(66, -113.205) +script = ExtResource("4_4b648") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_ct1eh") +follow_offset = Vector2(0, -63.205) +follow_damping = true +draw_limits = true +limit_target = NodePath("../TileMap") +limit_margin = Vector4i(-50, 0, -50, 0) + +[node name="RoomLeftArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(117, -174) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomLeftArea2D"] +position = Vector2(-79, 43) +shape = SubResource("RectangleShape2D_xmxri") +debug_color = Color(0, 0.6, 0.701961, 0.0313726) + +[node name="RoomCentrePhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(1474, -149) +script = ExtResource("4_4b648") +follow_mode = 2 +zoom = Vector2(1.5, 1.5) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true +limit_target = NodePath("../RoomCentreArea2D/CollisionShape2D") + +[node name="RoomCentreArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(755, -179) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomCentreArea2D"] +position = Vector2(338, -28) +shape = SubResource("RectangleShape2D_wtfjw") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +position = Vector2(2065, -160) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomRightArea2D"] +position = Vector2(255.75, -3.25) +shape = SubResource("RectangleShape2D_daeuh") +debug_color = Color(0, 0.6, 0.701961, 0) + +[node name="RoomRightPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(2347, -156) +scale = Vector2(1.0024, 1) +script = ExtResource("4_4b648") +follow_mode = 2 +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_exr3j") +follow_damping = true +draw_limits = true + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(66, -113.205) +zoom = Vector2(2, 2) +limit_left = -387 +limit_top = -528 +limit_right = 433 +limit_bottom = 288 +position_smoothing_speed = 10.0 +editor_draw_limits = true + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("9_w5e16") + +[editable path="CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn new file mode 100644 index 0000000..24d9a1a --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/2d_tweening_example_scene.tscn @@ -0,0 +1,793 @@ +[gd_scene load_steps=19 format=3 uid="uid://cpyb3ucwcqj8l"] + +[ext_resource type="Texture2D" uid="uid://c77npili4pel4" path="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" id="1_oo2bo"] +[ext_resource type="PackedScene" uid="uid://dg7rhrymsrrrm" path="res://addons/phantom_camera/examples/ui/ui_inventory.tscn" id="2_as4e6"] +[ext_resource type="PackedScene" uid="uid://iq5xd1ob1res" path="res://addons/phantom_camera/examples/ui/ui_sign.tscn" id="3_6yi7w"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="4_bb7en"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="5_kikl5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="6_8u8cj"] +[ext_resource type="Resource" uid="uid://euybd2w0bax" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres" id="6_gu0o0"] +[ext_resource type="PackedScene" uid="uid://7kh0xydx0b1o" path="res://addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn" id="8_g1syc"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd" id="9_184pu"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="11_myq47"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_easgx"] +texture = ExtResource("1_oo2bo") +0:0/0 = 0 +0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_0/angular_velocity = 0.0 +0:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:0/0/physics_layer_1/angular_velocity = 0.0 +1:0/0 = 0 +1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_0/angular_velocity = 0.0 +1:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:0/0/physics_layer_1/angular_velocity = 0.0 +2:0/0 = 0 +2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_0/angular_velocity = 0.0 +2:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:0/0/physics_layer_1/angular_velocity = 0.0 +3:0/0 = 0 +3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_0/angular_velocity = 0.0 +3:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:0/0/physics_layer_1/angular_velocity = 0.0 +4:0/0 = 0 +4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_0/angular_velocity = 0.0 +4:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:0/0/physics_layer_1/angular_velocity = 0.0 +5:0/0 = 0 +5:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_0/angular_velocity = 0.0 +5:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:0/0/physics_layer_1/angular_velocity = 0.0 +6:0/0 = 0 +6:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_0/angular_velocity = 0.0 +6:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +6:0/0/physics_layer_1/angular_velocity = 0.0 +7:0/0 = 0 +7:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_0/angular_velocity = 0.0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:0/0/physics_layer_1/angular_velocity = 0.0 +0:1/0 = 0 +0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_0/angular_velocity = 0.0 +0:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +0:1/0/physics_layer_1/angular_velocity = 0.0 +1:1/0 = 0 +1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_0/angular_velocity = 0.0 +1:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +1:1/0/physics_layer_1/angular_velocity = 0.0 +2:1/0 = 0 +2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_0/angular_velocity = 0.0 +2:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:1/0/physics_layer_1/angular_velocity = 0.0 +3:1/0 = 0 +3:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_0/angular_velocity = 0.0 +3:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:1/0/physics_layer_1/angular_velocity = 0.0 +4:1/0 = 0 +4:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_0/angular_velocity = 0.0 +4:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:1/0/physics_layer_1/angular_velocity = 0.0 +5:1/0 = 0 +5:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_0/angular_velocity = 0.0 +5:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:1/0/physics_layer_1/angular_velocity = 0.0 +7:1/0 = 0 +7:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_0/angular_velocity = 0.0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:1/0/physics_layer_1/angular_velocity = 0.0 +2:2/0 = 0 +2:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_0/angular_velocity = 0.0 +2:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:2/0/physics_layer_1/angular_velocity = 0.0 +3:2/0 = 0 +3:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_0/angular_velocity = 0.0 +3:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:2/0/physics_layer_1/angular_velocity = 0.0 +4:2/0 = 0 +4:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_0/angular_velocity = 0.0 +4:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:2/0/physics_layer_1/angular_velocity = 0.0 +7:2/0 = 0 +7:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_0/angular_velocity = 0.0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:2/0/physics_layer_1/angular_velocity = 0.0 +3:3/0 = 0 +3:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_0/angular_velocity = 0.0 +3:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:3/0/physics_layer_1/angular_velocity = 0.0 +4:3/0 = 0 +4:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_0/angular_velocity = 0.0 +4:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:3/0/physics_layer_1/angular_velocity = 0.0 +7:3/0 = 0 +7:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_0/angular_velocity = 0.0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +7:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:3/0/physics_layer_1/angular_velocity = 0.0 +3:4/0 = 0 +3:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_0/angular_velocity = 0.0 +3:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:4/0/physics_layer_1/angular_velocity = 0.0 +4:4/0 = 0 +4:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_0/angular_velocity = 0.0 +4:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:4/0/physics_layer_1/angular_velocity = 0.0 +5:4/0 = 0 +5:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_0/angular_velocity = 0.0 +5:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:4/0/physics_layer_1/angular_velocity = 0.0 +7:4/0 = 0 +7:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_0/angular_velocity = 0.0 +7:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:4/0/physics_layer_1/angular_velocity = 0.0 +3:5/0 = 0 +3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:5/0/physics_layer_1/angular_velocity = 0.0 +4:5/0 = 0 +4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_0/angular_velocity = 0.0 +4:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:5/0/physics_layer_1/angular_velocity = 0.0 +7:5/0 = 0 +7:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_0/angular_velocity = 0.0 +7:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:5/0/physics_layer_1/angular_velocity = 0.0 +3:6/0 = 0 +3:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_0/angular_velocity = 0.0 +3:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:6/0/physics_layer_1/angular_velocity = 0.0 +4:6/0 = 0 +4:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_0/angular_velocity = 0.0 +4:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:6/0/physics_layer_1/angular_velocity = 0.0 +7:6/0 = 0 +7:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_0/angular_velocity = 0.0 +7:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +7:6/0/physics_layer_1/angular_velocity = 0.0 +2:7/0 = 0 +2:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_0/angular_velocity = 0.0 +2:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +2:7/0/physics_layer_1/angular_velocity = 0.0 +3:7/0 = 0 +3:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_0/angular_velocity = 0.0 +3:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +3:7/0/physics_layer_1/angular_velocity = 0.0 +4:7/0 = 0 +4:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_0/angular_velocity = 0.0 +4:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +4:7/0/physics_layer_1/angular_velocity = 0.0 +5:7/0 = 0 +5:7/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_0/angular_velocity = 0.0 +5:7/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:7/0/physics_layer_1/angular_velocity = 0.0 +8:0/0 = 0 +8:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_0/angular_velocity = 0.0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:0/0/physics_layer_1/angular_velocity = 0.0 +9:0/0 = 0 +9:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_0/angular_velocity = 0.0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:0/0/physics_layer_1/angular_velocity = 0.0 +10:0/0 = 0 +10:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_0/angular_velocity = 0.0 +10:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:0/0/physics_layer_1/angular_velocity = 0.0 +11:0/0 = 0 +11:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_0/angular_velocity = 0.0 +11:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:0/0/physics_layer_1/angular_velocity = 0.0 +12:0/0 = 0 +12:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_0/angular_velocity = 0.0 +12:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:0/0/physics_layer_1/angular_velocity = 0.0 +13:0/0 = 0 +13:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_0/angular_velocity = 0.0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0 = 0 +14:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_0/angular_velocity = 0.0 +14:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:0/0/physics_layer_1/angular_velocity = 0.0 +14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(8, -8, 8, 8, -8, 8) +14:0/0/custom_data_0 = &"Sign" +15:0/0 = 0 +15:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_0/angular_velocity = 0.0 +15:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:0/0/physics_layer_1/angular_velocity = 0.0 +16:0/0 = 0 +16:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_0/angular_velocity = 0.0 +16:0/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:0/0/physics_layer_1/angular_velocity = 0.0 +8:1/0 = 0 +8:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_0/angular_velocity = 0.0 +8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:1/0/physics_layer_1/angular_velocity = 0.0 +9:1/0 = 0 +9:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_0/angular_velocity = 0.0 +9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:1/0/physics_layer_1/angular_velocity = 0.0 +10:1/0 = 0 +10:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_0/angular_velocity = 0.0 +10:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:1/0/physics_layer_1/angular_velocity = 0.0 +11:1/0 = 0 +11:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_0/angular_velocity = 0.0 +11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:1/0/physics_layer_1/angular_velocity = 0.0 +12:1/0 = 0 +12:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_0/angular_velocity = 0.0 +12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:1/0/physics_layer_1/angular_velocity = 0.0 +13:1/0 = 0 +13:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_0/angular_velocity = 0.0 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:1/0/physics_layer_1/angular_velocity = 0.0 +14:1/0 = 0 +14:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_0/angular_velocity = 0.0 +14:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:1/0/physics_layer_1/angular_velocity = 0.0 +15:1/0 = 0 +15:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_0/angular_velocity = 0.0 +15:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:1/0/physics_layer_1/angular_velocity = 0.0 +16:1/0 = 0 +16:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_0/angular_velocity = 0.0 +16:1/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:1/0/physics_layer_1/angular_velocity = 0.0 +8:2/0 = 0 +8:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_0/angular_velocity = 0.0 +8:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:2/0/physics_layer_1/angular_velocity = 0.0 +9:2/0 = 0 +9:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_0/angular_velocity = 0.0 +9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:2/0/physics_layer_1/angular_velocity = 0.0 +10:2/0 = 0 +10:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_0/angular_velocity = 0.0 +10:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:2/0/physics_layer_1/angular_velocity = 0.0 +11:2/0 = 0 +11:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_0/angular_velocity = 0.0 +11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:2/0/physics_layer_1/angular_velocity = 0.0 +12:2/0 = 0 +12:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_0/angular_velocity = 0.0 +12:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:2/0/physics_layer_1/angular_velocity = 0.0 +13:2/0 = 0 +13:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_0/angular_velocity = 0.0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:2/0/physics_layer_1/angular_velocity = 0.0 +14:2/0 = 0 +14:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_0/angular_velocity = 0.0 +14:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:2/0/physics_layer_1/angular_velocity = 0.0 +15:2/0 = 0 +15:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_0/angular_velocity = 0.0 +15:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:2/0/physics_layer_1/angular_velocity = 0.0 +16:2/0 = 0 +16:2/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_0/angular_velocity = 0.0 +16:2/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:2/0/physics_layer_1/angular_velocity = 0.0 +8:3/0 = 0 +8:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_0/angular_velocity = 0.0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +8:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:3/0/physics_layer_1/angular_velocity = 0.0 +9:3/0 = 0 +9:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_0/angular_velocity = 0.0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +9:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:3/0/physics_layer_1/angular_velocity = 0.0 +10:3/0 = 0 +10:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_0/angular_velocity = 0.0 +10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +10:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:3/0/physics_layer_1/angular_velocity = 0.0 +11:3/0 = 0 +11:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_0/angular_velocity = 0.0 +11:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:3/0/physics_layer_1/angular_velocity = 0.0 +12:3/0 = 0 +12:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_0/angular_velocity = 0.0 +12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:3/0/physics_layer_1/angular_velocity = 0.0 +13:3/0 = 0 +13:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_0/angular_velocity = 0.0 +13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:3/0/physics_layer_1/angular_velocity = 0.0 +14:3/0 = 0 +14:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_0/angular_velocity = 0.0 +14:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:3/0/physics_layer_1/angular_velocity = 0.0 +15:3/0 = 0 +15:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_0/angular_velocity = 0.0 +15:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:3/0/physics_layer_1/angular_velocity = 0.0 +16:3/0 = 0 +16:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_0/angular_velocity = 0.0 +16:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:3/0/physics_layer_1/angular_velocity = 0.0 +8:4/0 = 0 +8:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_0/angular_velocity = 0.0 +8:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:4/0/physics_layer_1/angular_velocity = 0.0 +9:4/0 = 0 +9:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_0/angular_velocity = 0.0 +9:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:4/0/physics_layer_1/angular_velocity = 0.0 +10:4/0 = 0 +10:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_0/angular_velocity = 0.0 +10:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:4/0/physics_layer_1/angular_velocity = 0.0 +11:4/0 = 0 +11:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_0/angular_velocity = 0.0 +11:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 2.5, -5, -2, -2.5, -5, 2, -7, 8, -8, 8, 8, -8, 8) +11:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:4/0/physics_layer_1/angular_velocity = 0.0 +12:4/0 = 0 +12:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_0/angular_velocity = 0.0 +12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:4/0/physics_layer_1/angular_velocity = 0.0 +13:4/0 = 0 +13:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_0/angular_velocity = 0.0 +13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -6, 4, -1.5, 6.5, 1.5, 8, 8, -8, 8) +13:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0 = 0 +14:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_0/angular_velocity = 0.0 +14:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:4/0/physics_layer_1/angular_velocity = 0.0 +14:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, 8, 8, 8, -8) +14:4/0/custom_data_0 = &"Inventory" +15:4/0 = 0 +15:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_0/angular_velocity = 0.0 +15:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:4/0/physics_layer_1/angular_velocity = 0.0 +16:4/0 = 0 +16:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_0/angular_velocity = 0.0 +16:4/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:4/0/physics_layer_1/angular_velocity = 0.0 +8:5/0 = 0 +8:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_0/angular_velocity = 0.0 +8:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:5/0/physics_layer_1/angular_velocity = 0.0 +9:5/0 = 0 +9:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_0/angular_velocity = 0.0 +9:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:5/0/physics_layer_1/angular_velocity = 0.0 +10:5/0 = 0 +10:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_0/angular_velocity = 0.0 +10:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:5/0/physics_layer_1/angular_velocity = 0.0 +11:5/0 = 0 +11:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_0/angular_velocity = 0.0 +11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +11:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:5/0/physics_layer_1/angular_velocity = 0.0 +12:5/0 = 0 +12:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_0/angular_velocity = 0.0 +12:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:5/0/physics_layer_1/angular_velocity = 0.0 +13:5/0 = 0 +13:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_0/angular_velocity = 0.0 +13:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +13:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:5/0/physics_layer_1/angular_velocity = 0.0 +14:5/0 = 0 +14:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_0/angular_velocity = 0.0 +14:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:5/0/physics_layer_1/angular_velocity = 0.0 +15:5/0 = 0 +15:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_0/angular_velocity = 0.0 +15:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:5/0/physics_layer_1/angular_velocity = 0.0 +16:5/0 = 0 +16:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_0/angular_velocity = 0.0 +16:5/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:5/0/physics_layer_1/angular_velocity = 0.0 +8:6/0 = 0 +8:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_0/angular_velocity = 0.0 +8:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +8:6/0/physics_layer_1/angular_velocity = 0.0 +9:6/0 = 0 +9:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_0/angular_velocity = 0.0 +9:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +9:6/0/physics_layer_1/angular_velocity = 0.0 +10:6/0 = 0 +10:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_0/angular_velocity = 0.0 +10:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +10:6/0/physics_layer_1/angular_velocity = 0.0 +11:6/0 = 0 +11:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_0/angular_velocity = 0.0 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 1, 6.5, -3, 3, -6.5, -1.5) +11:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +11:6/0/physics_layer_1/angular_velocity = 0.0 +12:6/0 = 0 +12:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_0/angular_velocity = 0.0 +12:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +12:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +12:6/0/physics_layer_1/angular_velocity = 0.0 +13:6/0 = 0 +13:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_0/angular_velocity = 0.0 +13:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 6, -0.5, 3, 3.5, -1.5, 6.5, -8, 8) +13:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +13:6/0/physics_layer_1/angular_velocity = 0.0 +14:6/0 = 0 +14:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_0/angular_velocity = 0.0 +14:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +14:6/0/physics_layer_1/angular_velocity = 0.0 +15:6/0 = 0 +15:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_0/angular_velocity = 0.0 +15:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +15:6/0/physics_layer_1/angular_velocity = 0.0 +16:6/0 = 0 +16:6/0/physics_layer_0/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_0/angular_velocity = 0.0 +16:6/0/physics_layer_1/linear_velocity = Vector2(0, 0) +16:6/0/physics_layer_1/angular_velocity = 0.0 +5:3/0 = 0 +5:3/0/physics_layer_0/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_0/angular_velocity = 0.0 +5:3/0/physics_layer_1/linear_velocity = Vector2(0, 0) +5:3/0/physics_layer_1/angular_velocity = 0.0 + +[sub_resource type="TileSet" id="TileSet_kf7eg"] +physics_layer_0/collision_layer = 1 +physics_layer_1/collision_layer = 2 +physics_layer_1/collision_mask = 2 +custom_data_layer_0/name = "Type" +custom_data_layer_0/type = 21 +sources/0 = SubResource("TileSetAtlasSource_easgx") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_tgk1y"] +size = Vector2(140, 160) + +[sub_resource type="Resource" id="Resource_mtp70"] +script = ExtResource("6_8u8cj") +duration = 0.6 +transition = 1 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_clm0y"] +size = Vector2(104, 160) + +[sub_resource type="Resource" id="Resource_8jg5c"] +script = ExtResource("6_8u8cj") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uka0w"] +size = Vector2(560, 160) + +[sub_resource type="Resource" id="Resource_e4e41"] +script = ExtResource("6_8u8cj") +duration = 1.2 +transition = 10 +ease = 2 + +[node name="ExampleScene2D" type="Node2D"] + +[node name="Background" type="CanvasLayer" parent="."] +layer = -3 + +[node name="ColorRect" type="ColorRect" parent="Background"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -311.0 +offset_top = -173.0 +offset_right = 981.0 +offset_bottom = 548.0 +grow_horizontal = 2 +grow_vertical = 2 +auto_translate = false +localize_numeral_system = false +color = Color(0.137255, 0.14902, 0.196078, 1) + +[node name="TileMap" type="TileMap" parent="."] +z_index = -1 +scale = Vector2(3, 3) +tile_set = SubResource("TileSet_kf7eg") +format = 2 +layer_0/name = "Background" +layer_0/tile_data = PackedInt32Array(-393216, 655360, 2, -327680, 655360, 3, -262144, 655360, 3, -196608, 655360, 3, -131072, 655360, 3, -65536, 655360, 3, -393215, 720896, 2, -327679, 720896, 1, -262143, 720896, 1, -196607, 720896, 1, -131071, 720896, 1, -65535, 720896, 1, -393214, 786432, 2, -327678, 786432, 3, -262142, 786432, 3, -196606, 786432, 3, -131070, 786432, 3, -65534, 786432, 3) +layer_1/name = "Terrain" +layer_1/z_index = 1 +layer_1/tile_data = PackedInt32Array(1, 720896, 0, 2, 720896, 0, 3, 720896, 0, 4, 720896, 0, 5, 720896, 0, 6, 720896, 0, 7, 720896, 0, 8, 720896, 0, 9, 786432, 0, 65545, 786432, 1, 131081, 786432, 1, 196617, 786432, 1, 262153, 786432, 1, 327689, 786432, 1, 393225, 786432, 1, 65537, 720896, 1, 131073, 720896, 1, 196609, 720896, 1, 262145, 458752, 1, 327681, 720896, 1, 393217, 720896, 1, 65538, 720896, 1, 131074, 720896, 1, 196610, 720896, 1, 262146, 720896, 1, 327682, 720896, 1, 393218, 720896, 1, 65539, 720896, 1, 131075, 720896, 1, 196611, 720896, 1, 262147, 720896, 1, 327683, 720896, 1, 393219, 720896, 1, 65540, 458752, 1, 131076, 720896, 1, 196612, 720896, 1, 262148, 720896, 1, 327684, 720896, 1, 393220, 720896, 1, 65541, 720896, 1, 131077, 720896, 1, 196613, 720896, 1, 262149, 458752, 1, 327685, 720896, 1, 393221, 720896, 1, 65542, 720896, 1, 131078, 720896, 1, 196614, 720896, 1, 262150, 720896, 1, 327686, 720896, 1, 393222, 720896, 1, 65543, 720896, 1, 131079, 720896, 1, 196615, 720896, 1, 262151, 720896, 1, 327687, 720896, 1, 393223, 458752, 1, 65544, 720896, 1, 131080, 720896, 1, 196616, 458752, 1, 262152, 720896, 1, 327688, 720896, 1, 393224, 720896, 1, 65546, 524288, 5, 65547, 524288, 5, 65548, 524288, 5, 65549, 524288, 5, 131082, 524288, 6, 131083, 524288, 6, 131084, 524288, 6, 131085, 524288, 6, 196618, 720896, 1, 262154, 720896, 1, 196619, 720896, 1, 262155, 720896, 1, 196620, 720896, 1, 262156, 720896, 1, 196621, 720896, 1, 262157, 720896, 1, 65550, 524288, 5, 65551, 524288, 5, 65552, 524288, 5, 131086, 524288, 6, 131087, 524288, 6, 131088, 524288, 6, 196622, 720896, 1, 196623, 720896, 1, 262159, 720896, 1, 262160, 720896, 1, 196624, 720896, 1, 262158, 720896, 1, 17, 720896, 4, 65553, 720896, 5, 131089, 720896, 5, 196625, 720896, 5, 262161, 720896, 5, 18, 786432, 4, 19, 786432, 4, 20, 786432, 4, 21, 786432, 4, 22, 786432, 4, 23, 786432, 4, 65554, 786432, 5, 131090, 786432, 5, 196626, 786432, 5, 262162, 786432, 5, 65555, 786432, 5, 131091, 589824, 6, 196627, 786432, 5, 262163, 786432, 5, 65556, 786432, 5, 131092, 786432, 5, 196628, 786432, 5, 262164, 786432, 5, 65557, 786432, 5, 131093, 786432, 5, 196629, 786432, 5, 262165, 786432, 5, 65558, 786432, 5, 131094, 786432, 5, 196630, 786432, 5, 262166, 655360, 6, 65559, 786432, 5, 131095, 786432, 5, 196631, 786432, 5, 262167, 786432, 5, 327697, 720896, 5, 393233, 720896, 5, 327698, 589824, 6, 393234, 786432, 5, 327699, 786432, 5, 393235, 786432, 5, 327700, 786432, 5, 393236, 786432, 5, 327701, 786432, 5, 393237, 786432, 5, 327702, 786432, 5, 393238, 786432, 5, 327703, 786432, 5, 393239, 786432, 5, -131062, 720896, 4, -131061, 786432, 4, -131060, 786432, 4, -65526, 720896, 6, -65525, 786432, 6, -65524, 786432, 6, -131056, 851968, 4, -65520, 851968, 6, -131059, 786432, 4, -131058, 786432, 4, -131057, 786432, 4, -65523, 786432, 6, -65522, 786432, 6, -65521, 786432, 6, -65536, 917504, 2, -65535, 983040, 2, -65534, 1048576, 2, -65533, 917504, 2, -65532, 983040, 2, -65531, 1048576, 2, -65530, 917504, 2, -65529, 983040, 2, -65528, 1048576, 2, 65535, 655360, 0, 131071, 655360, 1, 196607, 655360, 1, 262143, 655360, 1, 327679, 655360, 1, 393215, 655360, 1, 458751, 655360, 1, 524287, 655360, 1, 589823, 655360, 1, 0, 720896, 0, 65536, 720896, 1, 131072, 720896, 1, 196608, 720896, 1, 262144, 720896, 1, 327680, 720896, 1, 393216, 720896, 1, 458752, 720896, 1, 524288, 720896, 1, 524289, 720896, 1, 524290, 720896, 1, 524291, 720896, 1, 524292, 720896, 1, 524293, 720896, 1, 524294, 720896, 1, 524295, 720896, 1, 524296, 720896, 1, 524297, 786432, 1, 458761, 786432, 1, 458760, 720896, 1, 458759, 720896, 1, 458758, 458752, 1, 458757, 720896, 1, 458756, 720896, 1, 458755, 720896, 1, 458754, 720896, 1, 458753, 720896, 1, -262145, 851968, 4, -196609, 851968, 5, -131073, 851968, 5, -65537, 851968, 5, -1, 851968, 6, -262146, 786432, 4, -262147, 786432, 4, -196610, 589824, 6, -196611, 786432, 5, -6, 786432, 5, -5, 786432, 5, -4, 786432, 5, -3, 786432, 5, -2, 786432, 5, -65538, 786432, 5, -131074, 786432, 5, -131075, 786432, 5, -65539, 655360, 6, 65534, 851968, 5, 131070, 851968, 5, 196606, 851968, 5, 262142, 851968, 5, 327678, 851968, 5, 393214, 851968, 5, 458750, 851968, 5, 65533, 786432, 5, 65532, 786432, 5, 65531, 786432, 5, 65530, 786432, 5, 65529, 720896, 5, 131066, 786432, 5, 196602, 786432, 5, 262138, 786432, 5, 262139, 786432, 5, 327675, 786432, 5, 131068, 786432, 5, 131069, 786432, 5, 196605, 786432, 5, 262141, 786432, 5, 327677, 786432, 5, 393213, 786432, 5, 458749, 786432, 5, 393212, 786432, 5, 393211, 786432, 5, 458748, 786432, 5, 327676, 655360, 6, 262140, 786432, 5, 196604, 786432, 5, 131067, 786432, 5, 196603, 589824, 6, 458747, 786432, 5, 458746, 786432, 5, 393210, 786432, 5, 327674, 786432, 5, -7, 720896, 5, 131065, 720896, 5, 196601, 720896, 5, 262137, 720896, 5, 327673, 720896, 5, 393209, 720896, 5, 458745, 720896, 5, -327684, 720896, 3, -196594, 720896, 3, -196597, 720896, 3, -65518, 720896, 3, -65516, 720896, 3, -327686, 1048576, 5, -327685, 720896, 3, -196595, 917504, 6, -65514, 983040, 6, -327683, 983040, 5, -65513, 1048576, 5, -262151, 720896, 4, -196615, 720896, 5, -131079, 720896, 5, -65543, 720896, 5, -262150, 786432, 4, -196614, 655360, 6, -131078, 786432, 5, -65542, 786432, 5, -262149, 786432, 4, -196613, 786432, 5, -131077, 786432, 5, -65541, 786432, 5, -262148, 786432, 4, -196612, 786432, 5, -131076, 786432, 5, -65540, 786432, 5, 458769, 720896, 5, 458775, 786432, 5, 458774, 786432, 5, 458773, 786432, 5, 458772, 786432, 5, 458771, 786432, 5, 458770, 786432, 5, 327690, 720896, 1, 393226, 720896, 1, 458762, 720896, 1, 524298, 720896, 1, 327691, 720896, 1, 393227, 720896, 1, 458763, 720896, 1, 524299, 720896, 1, 327692, 720896, 1, 393228, 720896, 1, 458764, 720896, 1, 524300, 720896, 1, 327693, 720896, 1, 393229, 720896, 1, 458765, 720896, 1, 524301, 720896, 1, 327694, 720896, 1, 393230, 720896, 1, 458766, 720896, 1, 524302, 720896, 1, 327695, 720896, 1, 393231, 720896, 1, 458767, 720896, 1, 524303, 720896, 1, 327696, 720896, 1, 393232, 720896, 1, 458768, 720896, 1, 524304, 720896, 1, 29, 851968, 4, 65565, 851968, 5, 131101, 851968, 5, 196637, 851968, 5, 262173, 851968, 5, 327709, 851968, 5, 393245, 851968, 5, 458781, 851968, 5, 24, 786432, 4, 25, 786432, 4, 26, 786432, 4, 27, 786432, 4, 28, 786432, 4, 65560, 786432, 5, 65561, 786432, 5, 65562, 786432, 5, 65563, 786432, 5, 65564, 786432, 5, 131100, 786432, 5, 196636, 589824, 6, 131099, 786432, 5, 131098, 786432, 5, 131097, 786432, 5, 131096, 786432, 5, 196632, 786432, 5, 262168, 786432, 5, 327704, 786432, 5, 393240, 786432, 5, 458776, 786432, 5, 196633, 786432, 5, 262169, 786432, 5, 327705, 786432, 5, 393241, 786432, 5, 458777, 786432, 5, 196634, 786432, 5, 262170, 786432, 5, 327706, 786432, 5, 393242, 655360, 6, 458778, 786432, 5, 196635, 786432, 5, 262171, 786432, 5, 327707, 786432, 5, 393243, 786432, 5, 458779, 786432, 5, 262172, 786432, 5, 327708, 786432, 5, 393244, 786432, 5, 458780, 786432, 5, -196593, 1048576, 6, -393182, 1048576, 6, -393185, 917504, 6, -393180, 983040, 6, -393184, 983040, 5, -65509, 720896, 3, -65510, 720896, 3, -393181, 720896, 3, -393183, 720896, 3, -65517, 720896, 3, -65515, 720896, 3, -327650, 720896, 4, -262114, 720896, 5, -196578, 720896, 5, -131042, 720896, 5, -65506, 720896, 5, -327649, 786432, 4, -327648, 786432, 4, -327647, 786432, 4, -327646, 786432, 4, -327645, 786432, 4, -327644, 786432, 4, -327643, 786432, 4, -65499, 786432, 5, -131035, 786432, 5, -196571, 786432, 5, -262107, 655360, 6, -262108, 786432, 5, -262109, 786432, 5, -262110, 786432, 5, -262111, 786432, 5, -262112, 786432, 5, -262113, 786432, 5, -196577, 655360, 6, -131041, 786432, 5, -65505, 786432, 5, -65500, 655360, 6, -131036, 589824, 6, -196572, 786432, 5, -196573, 786432, 5, -196574, 786432, 5, -196575, 786432, 5, -196576, 786432, 5, -131040, 589824, 6, -65504, 786432, 5, -65501, 786432, 5, -131037, 786432, 5, -131038, 786432, 5, -131039, 786432, 5, -65503, 786432, 5, -65502, 786432, 5, 524318, 720896, 6, 458782, 720896, 5, 393246, 720896, 5, 327710, 720896, 5, 262174, 720896, 5, 196638, 720896, 5, 131102, 720896, 5, 65566, 720896, 5, 30, 720896, 5, 524319, 786432, 6, 524320, 786432, 6, 524321, 786432, 6, 524322, 786432, 6, 524323, 786432, 6, 524324, 786432, 6, 524325, 786432, 6, 31, 786432, 5, 65567, 786432, 5, 131103, 786432, 5, 196639, 786432, 5, 262175, 786432, 5, 327711, 786432, 5, 393247, 655360, 6, 458783, 786432, 5, 32, 786432, 5, 65568, 786432, 5, 131104, 786432, 5, 196640, 786432, 5, 262176, 786432, 5, 327712, 786432, 5, 393248, 786432, 5, 458784, 786432, 5, 33, 786432, 5, 65569, 786432, 5, 131105, 655360, 6, 196641, 786432, 5, 262177, 786432, 5, 327713, 786432, 5, 393249, 786432, 5, 458785, 786432, 5, 34, 786432, 5, 65570, 786432, 5, 131106, 786432, 5, 196642, 786432, 5, 262178, 655360, 6, 327714, 655360, 6, 393250, 786432, 5, 458786, 786432, 5, 35, 786432, 5, 65571, 786432, 5, 131107, 786432, 5, 196643, 786432, 5, 262179, 786432, 5, 327715, 786432, 5, 393251, 786432, 5, 458787, 786432, 5, 36, 655360, 6, 65572, 786432, 5, 131108, 786432, 5, 196644, 786432, 5, 262180, 786432, 5, 327716, 786432, 5, 393252, 786432, 5, 458788, 655360, 6, 37, 786432, 5, 65573, 786432, 5, 131109, 786432, 5, 196645, 786432, 5, 262181, 655360, 6, 327717, 786432, 5, 393253, 786432, 5, 458789, 786432, 5, 524281, 720896, 5, 524285, 786432, 5, 524284, 786432, 5, 524283, 786432, 5, 524282, 786432, 5, 589818, 786432, 5, 589819, 786432, 5, 589820, 786432, 5, 655356, 786432, 5, 655357, 786432, 5, 589821, 786432, 5, 655355, 786432, 5, 655354, 786432, 5, 720890, 786432, 5, 720891, 786432, 5, 720892, 786432, 5, 720893, 786432, 5, 720894, 851968, 5, 786429, 786432, 5, 786428, 786432, 5, 786427, 786432, 5, 786426, 786432, 5, 851962, 786432, 5, 917498, 786432, 5, 917499, 786432, 5, 851964, 786432, 5, 851965, 786432, 5, 917501, 786432, 5, 917500, 786432, 5, 851963, 786432, 5, 589817, 720896, 5, 655353, 720896, 5, 720889, 720896, 5, 786425, 720896, 5, 851961, 720896, 5, 917497, 720896, 5, 524286, 851968, 5, 589822, 851968, 5, 655358, 851968, 5, 786430, 851968, 5, 851966, 851968, 5, 917502, 851968, 5, 589824, 720896, 1, 655360, 720896, 1, 720896, 720896, 1, 786432, 720896, 1, 851968, 720896, 1, 589825, 720896, 1, 655361, 720896, 1, 720897, 720896, 1, 786433, 720896, 1, 851969, 720896, 1, 589826, 720896, 1, 655362, 720896, 1, 720898, 720896, 1, 786434, 720896, 1, 851970, 720896, 1, 589827, 720896, 1, 655363, 720896, 1, 720899, 720896, 1, 786435, 720896, 1, 851971, 720896, 1, 589828, 720896, 1, 655364, 720896, 1, 720900, 720896, 1, 786436, 720896, 1, 851972, 720896, 1, 589829, 720896, 1, 655365, 720896, 1, 720901, 720896, 1, 786437, 720896, 1, 851973, 720896, 1, 589830, 720896, 1, 655366, 720896, 1, 720902, 720896, 1, 786438, 720896, 1, 851974, 720896, 1, 589831, 720896, 1, 655367, 720896, 1, 720903, 720896, 1, 786439, 720896, 1, 851975, 720896, 1, 589832, 720896, 1, 655368, 720896, 1, 720904, 720896, 1, 786440, 720896, 1, 851976, 720896, 1, 589833, 786432, 1, 655369, 786432, 1, 720905, 786432, 1, 786441, 786432, 1, 851977, 786432, 1, 655359, 655360, 1, 720895, 655360, 1, 786431, 655360, 1, 851967, 655360, 1, 917503, 655360, 1, 589834, 720896, 1, 655370, 720896, 1, 720906, 720896, 1, 786442, 720896, 1, 851978, 720896, 1, 589835, 720896, 1, 655371, 720896, 1, 720907, 720896, 1, 786443, 720896, 1, 851979, 720896, 1, 589836, 720896, 1, 655372, 720896, 1, 720908, 720896, 1, 786444, 720896, 1, 851980, 720896, 1, 589837, 720896, 1, 655373, 720896, 1, 720909, 720896, 1, 786445, 720896, 1, 851981, 720896, 1, 589838, 720896, 1, 655374, 720896, 1, 720910, 720896, 1, 786446, 720896, 1, 851982, 720896, 1, 589839, 720896, 1, 655375, 720896, 1, 720911, 720896, 1, 786447, 720896, 1, 851983, 720896, 1, 589840, 720896, 1, 655376, 720896, 1, 720912, 720896, 1, 786448, 720896, 1, 851984, 720896, 1, 851985, 720896, 6, 851986, 786432, 6, 851987, 786432, 6, 851988, 786432, 6, 851989, 786432, 6, 851990, 786432, 6, 851991, 786432, 6, 851992, 786432, 6, 851993, 786432, 6, 851994, 786432, 6, 851995, 786432, 6, 851996, 786432, 6, 851997, 851968, 6, 524306, 786432, 5, 589842, 786432, 5, 655378, 786432, 5, 720914, 786432, 5, 786450, 786432, 5, 524307, 786432, 5, 589843, 786432, 5, 655379, 786432, 5, 720915, 786432, 5, 786451, 786432, 5, 524308, 786432, 5, 589844, 786432, 5, 655380, 786432, 5, 720916, 786432, 5, 786452, 786432, 5, 524309, 786432, 5, 589845, 786432, 5, 655381, 786432, 5, 720917, 786432, 5, 786453, 786432, 5, 524310, 786432, 5, 589846, 786432, 5, 655382, 786432, 5, 720918, 786432, 5, 786454, 786432, 5, 524311, 786432, 5, 589847, 786432, 5, 655383, 786432, 5, 720919, 786432, 5, 786455, 786432, 5, 524312, 786432, 5, 589848, 786432, 5, 655384, 786432, 5, 720920, 786432, 5, 786456, 786432, 5, 524313, 786432, 5, 589849, 786432, 5, 655385, 786432, 5, 720921, 786432, 5, 786457, 786432, 5, 524314, 786432, 5, 589850, 786432, 5, 655386, 786432, 5, 720922, 786432, 5, 786458, 786432, 5, 524315, 786432, 5, 589851, 786432, 5, 655387, 786432, 5, 720923, 786432, 5, 786459, 786432, 5, 524316, 786432, 5, 589852, 786432, 5, 655388, 786432, 5, 720924, 786432, 5, 786460, 786432, 5, 524305, 720896, 5, 589841, 720896, 5, 655377, 720896, 5, 720913, 720896, 5, 786449, 720896, 5, 524317, 851968, 5, 589853, 851968, 5, 655389, 851968, 5, 720925, 851968, 5, 786461, 851968, 5, -262106, 786432, 5, -196570, 786432, 5, -131034, 786432, 5, -65498, 786432, 5, 38, 786432, 5, 65574, 786432, 5, 131110, 655360, 6, 196646, 786432, 5, 262182, 786432, 5, 327718, 786432, 5, 393254, 786432, 5, 458790, 786432, 5, -262105, 786432, 5, -196569, 786432, 5, -131033, 786432, 5, -65497, 786432, 5, 39, 786432, 5, 65575, 786432, 5, 131111, 786432, 5, 196647, 786432, 5, 262183, 786432, 5, 327719, 786432, 5, 393255, 655360, 6, 458791, 786432, 5, -262104, 786432, 5, -196568, 786432, 5, -131032, 786432, 5, -65496, 786432, 5, 40, 655360, 6, 65576, 786432, 5, 131112, 786432, 5, 196648, 786432, 5, 262184, 655360, 6, 327720, 786432, 5, 393256, 786432, 5, 458792, 786432, 5, -262103, 786432, 5, -196567, 655360, 6, -131031, 786432, 5, -65495, 786432, 5, 41, 786432, 5, 65577, 786432, 5, 131113, 786432, 5, 196649, 786432, 5, 262185, 786432, 5, 327721, 786432, 5, 393257, 786432, 5, 458793, 786432, 5, -262102, 786432, 5, -196566, 786432, 5, -131030, 786432, 5, -65494, 786432, 5, 42, 786432, 5, 65578, 786432, 5, 131114, 655360, 6, 196650, 786432, 5, 262186, 786432, 5, 327722, 786432, 5, 393258, 786432, 5, 458794, 655360, 6, 524326, 786432, 6, 524327, 786432, 6, 524328, 786432, 6, 524329, 786432, 6, 524330, 786432, 6, -327642, 786432, 4, -327641, 786432, 4, -327640, 786432, 4, -327639, 786432, 4, -327638, 786432, 4, -327632, 851968, 4, -262096, 851968, 5, -196560, 851968, 5, -131024, 851968, 5, -65488, 851968, 5, 48, 851968, 5, 65584, 851968, 5, 131120, 851968, 5, 196656, 851968, 5, 262192, 851968, 5, 327728, 851968, 5, 393264, 851968, 5, 458800, 851968, 5, 524336, 851968, 6, -327637, 786432, 4, -327636, 786432, 4, -327635, 786432, 4, -327634, 786432, 4, -327633, 786432, 4, -262101, 786432, 5, -196565, 786432, 5, -131029, 655360, 6, -65493, 786432, 5, 43, 786432, 5, 65579, 786432, 5, 131115, 786432, 5, 196651, 786432, 5, 262187, 786432, 5, 327723, 655360, 6, 393259, 786432, 5, 458795, 786432, 5, -262100, 786432, 5, -196564, 786432, 5, -131028, 786432, 5, -65492, 786432, 5, 44, 655360, 6, 65580, 786432, 5, 131116, 786432, 5, 196652, 786432, 5, 262188, 786432, 5, 327724, 786432, 5, 393260, 786432, 5, 458796, 786432, 5, -262099, 786432, 5, -196563, 786432, 5, -131027, 786432, 5, -65491, 786432, 5, 45, 786432, 5, 65581, 655360, 6, 131117, 786432, 5, 196653, 786432, 5, 262189, 786432, 5, 327725, 786432, 5, 393261, 786432, 5, 458797, 786432, 5, -262098, 655360, 6, -196562, 786432, 5, -131026, 786432, 5, -65490, 786432, 5, 46, 786432, 5, 65582, 786432, 5, 131118, 786432, 5, 196654, 655360, 6, 262190, 786432, 5, 327726, 786432, 5, 393262, 786432, 5, 458798, 655360, 6, -262097, 786432, 5, -196561, 786432, 5, -131025, 786432, 5, -65489, 786432, 5, 47, 786432, 5, 65583, 786432, 5, 131119, 786432, 5, 196655, 786432, 5, 262191, 786432, 5, 327727, 786432, 5, 393263, 786432, 5, 458799, 786432, 5, 524331, 786432, 6, 524332, 786432, 6, 524333, 786432, 6, 524334, 786432, 6, 524335, 786432, 6) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="UIInventory" parent="UI" instance=ExtResource("2_as4e6")] +unique_name_in_owner = true +visible = false + +[node name="UISign" parent="UI" instance=ExtResource("3_6yi7w")] +unique_name_in_owner = true +visible = false + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(227, -28) +position_smoothing_speed = 10.0 + +[node name="PhantomCameraHost" type="Node" parent="Camera2D"] +script = ExtResource("4_bb7en") + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera2D" type="Node2D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +position = Vector2(227, -28) +script = ExtResource("5_kikl5") +priority = 5 +follow_mode = 2 +follow_target = NodePath("../CharacterBody2D/PlayerVisuals") +tween_resource = ExtResource("6_gu0o0") +tween_on_load = false +follow_damping = true +draw_limits = true + +[node name="Label" type="Label" parent="Player"] +offset_left = 167.0 +offset_top = -132.0 +offset_right = 332.0 +offset_bottom = -68.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "[WASD] to move +[Space] to jump" + +[node name="CharacterBody2D" parent="Player" instance=ExtResource("8_g1syc")] +position = Vector2(227, -28) + +[node name="WideArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(393, -40) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WideArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_tgk1y") + +[node name="ColorRect" type="ColorRect" parent="WideArea"] +offset_left = -70.0 +offset_top = -120.0 +offset_right = 70.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="WideArea"] +offset_left = -77.0 +offset_top = -250.0 +offset_right = 76.0 +offset_bottom = -120.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Sine + +Duration: +0.6s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="WideArea"] +position = Vector2(4, -100) +script = ExtResource("5_kikl5") +zoom = Vector2(0.8, 0.8) +tween_resource = SubResource("Resource_mtp70") +draw_limits = true + +[node name="UpperZoomArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(649, -135) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="UpperZoomArea"] +position = Vector2(0, -40) +shape = SubResource("RectangleShape2D_clm0y") + +[node name="ColorRect" type="ColorRect" parent="UpperZoomArea"] +offset_left = -52.0 +offset_top = -120.0 +offset_right = 52.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="UpperZoomArea"] +offset_left = -74.0 +offset_top = -251.0 +offset_right = 79.0 +offset_bottom = -121.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Circ + +Duration: +0.3s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="UpperZoomArea"] +position = Vector2(2, -83) +script = ExtResource("5_kikl5") +zoom = Vector2(2, 2) +tween_resource = SubResource("Resource_8jg5c") +draw_limits = true + +[node name="ForwardArea" type="Area2D" parent="." node_paths=PackedStringArray("area_pcam")] +position = Vector2(1136, -38) +collision_layer = 2 +collision_mask = 2 +script = ExtResource("9_184pu") +area_pcam = NodePath("PhantomCamera2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ForwardArea"] +position = Vector2(0, -42) +shape = SubResource("RectangleShape2D_uka0w") + +[node name="ColorRect" type="ColorRect" parent="ForwardArea"] +offset_left = -280.0 +offset_top = -122.0 +offset_right = 280.0 +offset_bottom = 38.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +color = Color(0.556863, 0.447059, 0.545098, 0.698039) + +[node name="Label" type="Label" parent="ForwardArea"] +offset_left = -76.0 +offset_top = -252.0 +offset_right = 77.0 +offset_bottom = -122.0 +theme_override_colors/font_color = Color(0.294118, 1, 0.631373, 1) +theme_override_fonts/font = ExtResource("11_myq47") +text = "Transition Type: +Back + +Duration: +1.2s" +horizontal_alignment = 1 + +[node name="PhantomCamera2D" type="Node2D" parent="ForwardArea"] +position = Vector2(344, -46) +script = ExtResource("5_kikl5") +zoom = Vector2(0.9, 0.9) +tween_resource = SubResource("Resource_e4e41") +draw_limits = true + +[editable path="Player/CharacterBody2D"] diff --git a/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn b/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn new file mode 100644 index 0000000..7d2ec5c --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/2D/sub_scenes/playable_character_2d.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=10 format=3 uid="uid://7kh0xydx0b1o"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd" id="1_jnc14"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_62b2n"] +[ext_resource type="Texture2D" uid="uid://ci76plsequlrq" path="res://addons/phantom_camera/examples/textures/2D/player_sprite.svg" id="2_yr8cm"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="4_rloon"] +[ext_resource type="Resource" uid="uid://cecrnq0wnkexh" path="res://addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres" id="5_4iyk1"] +[ext_resource type="Resource" uid="uid://cllveybboaqk5" path="res://addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres" id="6_2h6fv"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5hryl"] +bg_color = Color(0.85098, 0.894118, 0.937255, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.113725, 0.113725, 0.113725, 1) +corner_radius_top_left = 7 +corner_radius_top_right = 7 +corner_radius_bottom_right = 7 +corner_radius_bottom_left = 7 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xj4ar"] +size = Vector2(64, 57) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_18i13"] +size = Vector2(64, 57) + +[node name="CharacterBody2D" type="CharacterBody2D"] +script = ExtResource("1_jnc14") + +[node name="DarkOverlay" type="ColorRect" parent="."] +unique_name_in_owner = true +visible = false +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -1000.0 +offset_top = -1000.0 +offset_right = 1000.0 +offset_bottom = 1000.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.615686) + +[node name="PlayerVisuals" type="Node2D" parent="."] +unique_name_in_owner = true + +[node name="PlayerSprite" type="Sprite2D" parent="PlayerVisuals"] +unique_name_in_owner = true +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_yr8cm") + +[node name="InteractionPrompt" type="Panel" parent="PlayerVisuals"] +unique_name_in_owner = true +visible = false +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -16.0 +offset_top = -66.0 +offset_right = 16.0 +offset_bottom = -34.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_5hryl") + +[node name="Label" type="Label" parent="PlayerVisuals/InteractionPrompt"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -3.0 +offset_bottom = 5.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_62b2n") +theme_override_font_sizes/font_size = 26 +text = "F" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -0.5) +shape = SubResource("RectangleShape2D_xj4ar") + +[node name="PlayerArea2D" type="Area2D" parent="."] +unique_name_in_owner = true +collision_layer = 2 +collision_mask = 2 +priority = 20 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerArea2D"] +position = Vector2(0, -0.5) +shape = SubResource("RectangleShape2D_18i13") + +[node name="ItemFocusPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(0, -122) +script = ExtResource("4_rloon") +zoom = Vector2(2, 2) +frame_preview = false +tween_resource = ExtResource("5_4iyk1") +follow_damping_value = Vector2(0, 0) +draw_limits = true + +[node name="InventoryPhantomCamera2D" type="Node2D" parent="."] +unique_name_in_owner = true +position = Vector2(-183, -5) +script = ExtResource("4_rloon") +zoom = Vector2(2.5, 2.5) +frame_preview = false +tween_resource = ExtResource("6_2h6fv") +follow_damping_value = Vector2(0, 0) +draw_limits = true diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn new file mode 100644 index 0000000..553ddeb --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_example_scene.tscn @@ -0,0 +1,379 @@ +[gd_scene load_steps=40 format=3 uid="uid://ci12ytew5vwty"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_wn7ww"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/npc.gd" id="2_2n1da"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_e7gxt"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="2_tvx5n"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_y3dy8"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="3_f5qrw"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="4_a27nb"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_m2vbn"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd" id="4_moad5"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="7_jitt8"] + +[sub_resource type="Resource" id="Resource_jtk1d"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_o161n"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxMesh" id="BoxMesh_7tjw4"] +size = Vector3(2, 0.5, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hpllm"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="BoxShape3D" id="BoxShape3D_65o6h"] +size = Vector3(2, 0.5, 4) + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_tpc7d"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_g0eml"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v5iy7"] +albedo_color = Color(0.988235, 0.478431, 0.905882, 1) + +[sub_resource type="Resource" id="Resource_tpvee"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_bxbnv"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_wcrbb"] +size = Vector3(6.8, 0.1, 5.4) + +[sub_resource type="Resource" id="Resource_7ih0k"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_4iyps"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ctyr8"] +size = Vector3(7.4, 0.1, 3.6) + +[sub_resource type="Resource" id="Resource_x5y0u"] +script = ExtResource("7_jitt8") +duration = 0.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_pgiyx"] +script = ExtResource("4_m2vbn") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ua072"] +size = Vector3(6.8, 0.1, 3.6) + +[sub_resource type="BoxMesh" id="BoxMesh_ugc3s"] +size = Vector3(1, 1, 2) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_68thd"] +albedo_color = Color(0.34902, 0.862745, 0.854902, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_wphly"] +size = Vector3(1, 0.5, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_gyp5s"] +size = Vector3(20, 40, 30) + +[sub_resource type="BoxShape3D" id="BoxShape3D_lfaqs"] +size = Vector3(20, 40, 30) + +[sub_resource type="BoxMesh" id="BoxMesh_n70lt"] +size = Vector3(14, 40, 6) + +[sub_resource type="BoxShape3D" id="BoxShape3D_jxmqm"] +size = Vector3(14, 40, 6) + +[sub_resource type="BoxMesh" id="BoxMesh_x0tgm"] +size = Vector3(8, 40, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_t67ef"] +size = Vector3(50, 40, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_rmslh"] +size = Vector3(0.5, 6, 13.5) + +[sub_resource type="BoxMesh" id="BoxMesh_242ij"] +size = Vector3(2, 3, 3) + +[sub_resource type="BoxMesh" id="BoxMesh_niuda"] +size = Vector3(8, 6, 0.5) + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999858, 0, 0, 0, 0.94884, 0.315632, 0, -0.315637, 0.948825, -2.53871, 2, 9.76232) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_wn7ww") + +[node name="PlayerGroup" type="Node" parent="."] + +[node name="PlayerCharacterBody3D" parent="PlayerGroup" instance=ExtResource("2_tvx5n")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.53871, 0.5, 7.26232) + +[node name="MovementInstructionsLabel" type="Label3D" parent="PlayerGroup"] +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, -2.47682, -0.0708016, 7.93048) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("2_e7gxt") +font_size = 48 + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="PlayerGroup" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999858, 0, 0, 0, 0.94884, 0.315632, 0, -0.315637, 0.948825, -2.53871, 2, 9.76232) +script = ExtResource("2_y3dy8") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = ExtResource("4_a27nb") +tween_on_load = false +camera_3d_resource = SubResource("Resource_jtk1d") +follow_offset = Vector3(0, 1.5, 2.5) +follow_damping = true + +[node name="NPCGroup" type="Node" parent="."] + +[node name="NPCPhantomCamera3D" type="Node3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(0.616596, -0.109786, 0.779587, -2.23517e-08, 0.990229, 0.13945, -0.78728, -0.0859841, 0.610571, -2.98802, 1.50739, 1.19719) +script = ExtResource("2_y3dy8") +tween_resource = ExtResource("4_a27nb") +camera_3d_resource = SubResource("Resource_o161n") + +[node name="NPCDescriptionLabel" type="Label3D" parent="NPCGroup"] +transform = Transform3D(1, 0, 0, 0, 0.866026, 0.5, 0, -0.5, 0.866025, -3.04693, 0.367287, 0.953757) +text = "Input Example" +font = ExtResource("2_e7gxt") + +[node name="NPCDialogueExampleLabel" type="Label3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(1, 4.54671e-10, 1.65487e-10, 4.25644e-10, 0.939693, 0.34202, 0, -0.34202, 0.939693, -4.46738, 1.58641, -0.253679) +modulate = Color(1, 0.603922, 0.254902, 1) +text = "Press [ F ] to change camera" +font = ExtResource("2_e7gxt") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="NPCGroup"] +transform = Transform3D(0.819152, 4.83851e-10, -0.573576, -3.92481e-09, 1, -6.3473e-09, 0.573576, 7.45058e-09, 0.819152, -3.46138, -0.4, 0.875321) +mesh = SubResource("BoxMesh_7tjw4") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_hpllm") +metadata/_edit_group_ = true + +[node name="NPCInteractionArea3D" type="Area3D" parent="NPCGroup/NPCInteractionZoneMesh"] +unique_name_in_owner = true +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +monitorable = false + +[node name="NPCInterationCollisionShape3D" type="CollisionShape3D" parent="NPCGroup/NPCInteractionZoneMesh/NPCInteractionArea3D"] +shape = SubResource("BoxShape3D_65o6h") + +[node name="NPC" type="StaticBody3D" parent="NPCGroup"] +transform = Transform3D(1, 4.83851e-10, 0, 4.25644e-10, 1, -7.45058e-09, 0, 7.45058e-09, 1, -4.56338, 0.5, -0.272679) +script = ExtResource("2_2n1da") + +[node name="PlayerCollisionShape3D2" type="CollisionShape3D" parent="NPCGroup/NPC"] +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +shape = SubResource("CapsuleShape3D_tpc7d") + +[node name="NPCMesh" type="MeshInstance3D" parent="NPCGroup/NPC"] +transform = Transform3D(1, -2.68591e-26, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CapsuleMesh_g0eml") +skeleton = NodePath("../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_v5iy7") + +[node name="MoveToLocation" type="Node3D" parent="NPCGroup"] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.70084, 0.5, 0.962891) + +[node name="FixedCameraTriggerZone" type="Node" parent="."] + +[node name="FixedCameraLabel" type="Label3D" parent="FixedCameraTriggerZone"] +unique_name_in_owner = true +transform = Transform3D(0.939693, 0.280167, -0.196175, 1.49012e-08, 0.573577, 0.819152, 0.34202, -0.769751, 0.538986, -0.538716, -0.247626, 3.13456) +text = "Fixed Camera +Example" +font = ExtResource("2_e7gxt") + +[node name="NorthRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(0.38357, -0.555836, 0.737507, -0.105898, 0.766851, 0.633027, -0.917417, -0.320912, 0.235279, 6.89638, 4.73986, 0.115512) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_tpvee") +camera_3d_resource = SubResource("Resource_bxbnv") + +[node name="NorthRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.45, -0.9) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../NorthRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/NorthRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, -0.4) +shape = SubResource("BoxShape3D_wcrbb") + +[node name="EntryRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(0.258818, -0.482963, 0.836515, 1.3027e-15, 0.866025, 0.499999, -0.965924, -0.129409, 0.224143, 6.69741, 4.73364, 4.02374) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_7ih0k") +camera_3d_resource = SubResource("Resource_4iyps") + +[node name="EntryRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.00003, -0.454982, 3.00572) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../EntryRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/EntryRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0, 0.2) +shape = SubResource("BoxShape3D_ctyr8") + +[node name="SouthRoomPhantomCamera3D" type="Node3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(-0.766043, -0.492403, 0.413175, 0, 0.642787, 0.766043, -0.642786, 0.586825, -0.492403, 6.89741, 4.73364, 5.62374) +script = ExtResource("2_y3dy8") +tween_resource = SubResource("Resource_x5y0u") +camera_3d_resource = SubResource("Resource_pgiyx") + +[node name="SouthRoomTrigger" type="Area3D" parent="FixedCameraTriggerZone" node_paths=PackedStringArray("area_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.45, 6.7) +priority = 5 +script = ExtResource("4_moad5") +area_pcam = NodePath("../SouthRoomPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="FixedCameraTriggerZone/SouthRoomTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, 0.1) +shape = SubResource("BoxShape3D_ua072") + +[node name="CSGMesh3D" type="CSGMesh3D" parent="FixedCameraTriggerZone"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.14238, 1.82571, 2.88655) +mesh = SubResource("BoxMesh_ugc3s") +material = SubResource("StandardMaterial3D_68thd") + +[node name="CSGMesh3D2" type="CSGMesh3D" parent="FixedCameraTriggerZone/CSGMesh3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00192642, -0.0120339, 0.00494432) +operation = 2 +mesh = SubResource("BoxMesh_wphly") +material = SubResource("StandardMaterial3D_68thd") + +[node name="Environment" type="Node" parent="."] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Environment" type="Node3D" parent="Environment"] + +[node name="Floor" parent="Environment/Environment" instance=ExtResource("3_f5qrw")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="West Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 0.5, 0) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/West Wall"] +mesh = SubResource("BoxMesh_gyp5s") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/West Wall"] +shape = SubResource("BoxShape3D_lfaqs") + +[node name="East Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.999, 0.502, 0) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/East Wall"] +mesh = SubResource("BoxMesh_gyp5s") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/East Wall"] +shape = SubResource("BoxShape3D_lfaqs") + +[node name="North Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -6.90828) +metadata/_edit_group_ = true +metadata/_edit_lock_ = true + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Environment/Environment/North Wall"] +mesh = SubResource("BoxMesh_n70lt") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/North Wall"] +shape = SubResource("BoxShape3D_jxmqm") + +[node name="South Wall" type="StaticBody3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 0.5, 9.087) +metadata/_edit_group_ = true + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Environment/Environment/South Wall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0) +mesh = SubResource("BoxMesh_x0tgm") +skeleton = NodePath("") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Environment/Environment/South Wall"] +shape = SubResource("BoxShape3D_t67ef") + +[node name="FixedCamOuterWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 2) +use_collision = true +mesh = SubResource("BoxMesh_rmslh") + +[node name="FixedCamOuterDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamOuterWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 1) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[node name="FixedCamNorthWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2.5, 1) +use_collision = true +mesh = SubResource("BoxMesh_niuda") + +[node name="FixedCamNorthDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamNorthWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 0) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[node name="FixedCamSouthWall" type="CSGMesh3D" parent="Environment/Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2.5, 5.1) +use_collision = true +mesh = SubResource("BoxMesh_niuda") + +[node name="FixedCamSouthDoorway" type="CSGMesh3D" parent="Environment/Environment/FixedCamSouthWall"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.50541, 1.19209e-07) +operation = 2 +mesh = SubResource("BoxMesh_242ij") + +[editable path="PlayerGroup/PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn new file mode 100644 index 0000000..b17abcf --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_framed_example_scene.tscn @@ -0,0 +1,147 @@ +[gd_scene load_steps=10 format=3 uid="uid://c4llb3gsbfv1a"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_7824u"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_g1bv4"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_420vh"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_oqbub"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_t4fso"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_c0upu"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_f2w3x"] + +[sub_resource type="Resource" id="Resource_wg1pr"] +script = ExtResource("4_oqbub") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_c0upu") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.99995, 0, 0, 0, 0.79324, 0.608671, 0, -0.608675, 0.793235, 0.083587, 2.94168, 5.22787) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_7824u") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.99995, 0, 0, 0, 0.79324, 0.608671, 0, -0.608675, 0.793235, 0.083587, 2.94168, 5.22787) +script = ExtResource("2_g1bv4") +follow_mode = 5 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("3_420vh") +tween_on_load = false +camera_3d_resource = SubResource("Resource_wg1pr") +follow_damping = true +follow_distance = 4.0 +dead_zone_width = 0.384 +dead_zone_height = 0.669 +show_viewfinder_in_play = true +spring_length = 4.0 + +[node name="PlayerCharacterBody3D2" parent="Player" instance=ExtResource("5_f2w3x")] + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_t4fso")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.636134, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.54597, -0.540694, -3.39517) +use_collision = true +radius = 1.53269 +height = 2.5036 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.64877, -1.50101, 1.22863) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.4732, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.40027, -1.69814, 3.36997) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.13768, -0.599204, -1.04651) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.7976, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.84078, -0.497663, 4.44352) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.88916, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.83837, -0.241718, 7.14677) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.34377, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9834, 0.138478, -1.89037) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.38147, 0.0440434, 8.36617) +use_collision = true +size = Vector3(4.57784, 1.08809, 3.11285) + +[editable path="Player/PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn new file mode 100644 index 0000000..0d7b543 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_glued_example_scene.tscn @@ -0,0 +1,199 @@ +[gd_scene load_steps=14 format=3 uid="uid://dw2yflu7up2rr"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_pmeux"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_q1ygp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_hpix1"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_8qqha"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_evdoo"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_vqgn5"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_wr3bq"] + +[sub_resource type="Resource" id="Resource_ucp3e"] +script = ExtResource("3_hpix1") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_ab013"] +script = ExtResource("4_evdoo") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_wr3bq") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.638683, 0.769345, 0, -0.769298, 0.638723, -5.60519e-45, 6.39, 7) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_pmeux") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.638683, 0.769345, 0, -0.769298, 0.638723, -5.60519e-45, 6.39, 7) +script = ExtResource("2_q1ygp") +priority = 5 +follow_mode = 1 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_ucp3e") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ab013") +follow_damping = true +follow_damping_value = Vector3(0.3, 0.3, 0.3) + +[node name="PlayerCharacterBody3D" parent="Player" instance=ExtResource("5_vqgn5")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.39, 7) +enable_gravity = false + +[node name="PlayerVisual" parent="Player/PlayerCharacterBody3D" index="2"] +visible = false + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.04486, 0.519002, -1.52506) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.51494, 0.519, 4.06618) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_8qqha")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.62737, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.9378, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.58617, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.774, 0.201103, 2.71259) +use_collision = true +radius = 1.41311 +height = 1.40221 +sides = 32 + +[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.40488, 0.201101, 11.6804) +use_collision = true +radius = 2.21673 +height = 7.88261 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.20971, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.9771, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.555532, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.0611, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.21187, -1.90735e-06, 0.346393) +use_collision = true +inner_radius = 1.3 +outer_radius = 2.0 +sides = 32 +ring_sides = 18 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.9283, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.49828, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.15267, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.3427, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.08027, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.7748, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.1473, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="Player/PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn new file mode 100644 index 0000000..9ef95a5 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_group_example_scene.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=13 format=3 uid="uid://dbfiy6svpcqap"] + +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="1_r00ve"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_pi7mp"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="2_wnlkq"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_1eb12"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="3_a5igg"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="3_wr1tj"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_70gws"] + +[sub_resource type="Resource" id="Resource_1iman"] +script = ExtResource("5_70gws") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("3_a5igg") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -7.26116, 5.72974, 12.279) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("3_wr1tj") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerCharacterBody3D2" parent="Player" instance=ExtResource("2_wnlkq")] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_targets")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -7.26116, 5.72974, 12.279) +script = ExtResource("2_pi7mp") +priority = 5 +follow_mode = 3 +follow_targets = [NodePath("../PlayerCharacterBody3D2"), NodePath("../../NPCs/PlayerMeshInstance3D"), NodePath("../../NPCs/PlayerMeshInstance3D2")] +tween_resource = ExtResource("3_1eb12") +tween_on_load = false +camera_3d_resource = SubResource("Resource_1iman") +follow_damping = true +follow_distance = 5.0 +auto_follow_distance = true +auto_follow_distance_min = 5.0 +auto_follow_distance_max = 15.0 +auto_follow_distance_divisor = 20.0 +spring_length = 5.0 + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.6059, 0.519002, 0.128472) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.0461, 0.519, 0.249913) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("1_r00ve")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Wall" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.6511, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.9141, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.6099, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.81402, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.95333, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.4682, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.0848, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.90455, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.1764, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.31901, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.94346, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.7985, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.1236, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="Player/PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn new file mode 100644 index 0000000..4228afd --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_path_example_scene.tscn @@ -0,0 +1,221 @@ +[gd_scene load_steps=24 format=3 uid="uid://dxx7ngi0emt8h"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_lm5n8"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="3_bd7x3"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="3_od2r4"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_dfdlo"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_hni7n"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="4_lfwkm"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/path_follow.gd" id="5_vdqkm"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="5_vms5c"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="6_obo83"] + +[sub_resource type="Resource" id="Resource_ofv2c"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_01tho"] +script = ExtResource("4_lfwkm") +duration = 1.2 +transition = 3 +ease = 2 + +[sub_resource type="Resource" id="Resource_syh5m"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Curve3D" id="Curve3D_b33df"] +_data = { +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10), +"tilts": PackedFloat32Array(0, 0) +} +point_count = 2 + +[sub_resource type="BoxShape3D" id="BoxShape3D_aovgi"] +size = Vector3(6, 0.1, 10) + +[sub_resource type="BoxMesh" id="BoxMesh_0hdeh"] +size = Vector3(6, 0.1, 10) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fsm1b"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="Resource" id="Resource_xci4c"] +script = ExtResource("4_hni7n") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Curve3D" id="Curve3D_8uw2x"] +_data = { +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0), +"tilts": PackedFloat32Array(0, 0) +} +point_count = 2 + +[sub_resource type="BoxShape3D" id="BoxShape3D_ctnqu"] +size = Vector3(12, 0.1, 4) + +[sub_resource type="BoxMesh" id="BoxMesh_f6dp8"] +size = Vector3(12, 0.1, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gwnkj"] +transparency = 1 +albedo_color = Color(0.568403, 0.988235, 0.762724, 0.0901961) + +[sub_resource type="BoxMesh" id="BoxMesh_7l3dh"] + +[sub_resource type="BoxMesh" id="BoxMesh_as6ok"] + +[node name="Root" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999807, -0.00216249, 0.00184445, 0, 0.648836, 0.760728, -0.00284214, -0.760718, 0.648839, 0, 2.507, 1.5) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_lm5n8") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999807, -0.00216249, 0.00184445, 0, 0.648836, 0.760728, -0.00284214, -0.760718, 0.648839, 0, 2.507, 1.5) +script = ExtResource("3_bd7x3") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("3_od2r4") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ofv2c") +follow_offset = Vector3(0, 2, 1.5) +follow_damping = true + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("5_vms5c")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.507, 0) + +[node name="Paths" type="Node" parent="."] + +[node name="PathPhantomCamera3D" type="Node3D" parent="Paths" node_paths=PackedStringArray("follow_target", "follow_path")] +transform = Transform3D(-4.37114e-08, -1, -4.37114e-08, 0, -4.37114e-08, 1, -1, 4.37114e-08, 1.91069e-15, -0.31028, 7.9199, -1.60976) +script = ExtResource("3_bd7x3") +priority = 2 +follow_mode = 4 +follow_target = NodePath("../../PlayerCharacterBody3D2/PlayerVisual") +follow_path = NodePath("../FollowPath") +tween_resource = SubResource("Resource_01tho") +camera_3d_resource = SubResource("Resource_syh5m") +follow_damping = true + +[node name="FollowPath" type="Path3D" parent="Paths"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.31028, 7.9199, -1.60976) +curve = SubResource("Curve3D_b33df") + +[node name="StraightPathFollowTrigger" type="Area3D" parent="Paths" node_paths=PackedStringArray("path_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0420399, -0.45, -6.73666) +priority = 5 +script = ExtResource("5_vdqkm") +path_pcam = NodePath("../PathPhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Paths/StraightPathFollowTrigger"] +shape = SubResource("BoxShape3D_aovgi") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Paths/StraightPathFollowTrigger/CollisionShape3D"] +mesh = SubResource("BoxMesh_0hdeh") +skeleton = NodePath("../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_fsm1b") +metadata/_edit_group_ = true + +[node name="PathPhantomCamera3D2" type="Node3D" parent="Paths" node_paths=PackedStringArray("follow_target", "follow_path")] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 7.9199, -13.4572) +visible = false +script = ExtResource("3_bd7x3") +priority = 2 +follow_mode = 4 +follow_target = NodePath("../../PlayerCharacterBody3D2/PlayerVisual") +follow_path = NodePath("../FollowPath2") +tween_resource = SubResource("Resource_01tho") +camera_3d_resource = SubResource("Resource_xci4c") +follow_damping = true +follow_damping_value = Vector3(0.6, 0.1, 0.1) + +[node name="FollowPath2" type="Path3D" parent="Paths"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.97141, 7.9199, -13.4572) +curve = SubResource("Curve3D_8uw2x") + +[node name="StraightPathFollowTrigger2" type="Area3D" parent="Paths" node_paths=PackedStringArray("path_pcam")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0420399, 0, -13.7367) +priority = 5 +script = ExtResource("5_vdqkm") +path_pcam = NodePath("../PathPhantomCamera3D2") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Paths/StraightPathFollowTrigger2"] +shape = SubResource("BoxShape3D_ctnqu") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Paths/StraightPathFollowTrigger2/CollisionShape3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.45, 0) +mesh = SubResource("BoxMesh_f6dp8") +skeleton = NodePath("../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_gwnkj") +metadata/_edit_group_ = true + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_dfdlo")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Floor3" parent="Environment" instance=ExtResource("4_dfdlo")] +transform = Transform3D(6, 0, 0, 0, 1, 0, 0, 0, 1, -0.44204, 0, 1.76334) + +[node name="Floor2" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 14, -0.516667, 1, -6.5) + +[node name="Floor5" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 14, 0.65, 1, -6.5) + +[node name="Floor4" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(2, 0, 0, 0, 3, 0, 0, 0, 1, 0.0666667, 1, -18) + +[node name="Floor6" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.333333, 0, 0, 0, 3, 0, 0, 0, 1, -0.766667, 1, -13) +mesh = SubResource("BoxMesh_7l3dh") + +[node name="Floor8" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 6, -1.01667, 1, -15.5) +mesh = SubResource("BoxMesh_as6ok") + +[node name="Floor9" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.166667, 0, 0, 0, 3, 0, 0, 0, 6, 1.15, 1, -15.5) +mesh = SubResource("BoxMesh_as6ok") + +[node name="Floor7" parent="Environment/Floor3" instance=ExtResource("4_dfdlo")] +transform = Transform3D(0.333333, 0, 0, 0, 3, 0, 0, 0, 1, 0.9, 1, -13) +mesh = SubResource("BoxMesh_7l3dh") + +[node name="NPCDescriptionLabel" type="Label3D" parent="Environment"] +transform = Transform3D(5.21541e-08, -1, -7.7486e-07, -1.10675e-15, 2.23517e-07, 0.999999, -0.999999, -7.45058e-08, -5.68829e-14, -3.47306, 2.59595, -5.51755) +text = "Camera follows player while confined to a Path3D" +font = ExtResource("6_obo83") +font_size = 64 + +[node name="MovementInstructionsLabel" type="Label3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.02174, -0.455369, 0.570585) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("6_obo83") +font_size = 48 + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn new file mode 100644 index 0000000..f81396f --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_simple_example_scene.tscn @@ -0,0 +1,174 @@ +[gd_scene load_steps=14 format=3 uid="uid://buglvjwpn85ny"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_3tok8"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_grjck"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_j3f4l"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller.gd" id="3_uymu2"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_4u2y6"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_sielv"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_1tybo"] + +[sub_resource type="Resource" id="Resource_28vpp"] +script = ExtResource("3_j3f4l") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_axopo"] +script = ExtResource("4_sielv") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_pda7a"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u74j7"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_3xplc"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_1tybo") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D2" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -13.1946, 2.34415, 10.4086) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("1_3tok8") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Player" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="Player" node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999954, 0, 0, 0, 0.906188, 0.422588, 0, -0.422562, 0.906243, -13.1946, 2.34415, 10.4086) +script = ExtResource("2_grjck") +priority = 10 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2") +tween_resource = SubResource("Resource_28vpp") +tween_on_load = false +camera_3d_resource = SubResource("Resource_axopo") +follow_offset = Vector3(0, 2, 2) +follow_damping = true + +[node name="PlayerCharacterBody3D2" type="CharacterBody3D" parent="Player"] +unique_name_in_owner = true +transform = Transform3D(0.999897, 0.0143636, 0, -0.0143636, 0.999897, 0, 0, 0, 1, -13.1946, 0.344147, 8.40857) +script = ExtResource("3_uymu2") +metadata/_edit_group_ = true + +[node name="PlayerModel" type="MeshInstance3D" parent="Player/PlayerCharacterBody3D2"] +unique_name_in_owner = true +mesh = SubResource("CapsuleMesh_pda7a") +surface_material_override/0 = SubResource("StandardMaterial3D_u74j7") + +[node name="PlayerArea3D" type="Area3D" parent="Player/PlayerCharacterBody3D2"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Player/PlayerCharacterBody3D2/PlayerArea3D"] +shape = SubResource("CapsuleShape3D_3xplc") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="Player/PlayerCharacterBody3D2"] +shape = SubResource("CapsuleShape3D_3xplc") + +[node name="NPCs" type="Node" parent="."] + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_4u2y6")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.6511, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.8332, -0.540694, -3.39517) +use_collision = true +radius = 1.53269 +height = 2.5036 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.936, -1.50101, 1.22863) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.81402, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -23.6875, -1.69814, 3.36997) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.14955, -0.599204, -1.04651) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.0848, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.44645, -0.497663, 4.44352) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.52545, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21.1764, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.1256, 0.335247, 7.14677) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.94346, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.30382, 0.138478, -1.89037) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.04727, 0.0440434, 8.36617) +use_collision = true +size = Vector3(4.57784, 1.08809, 3.11285) diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn new file mode 100644 index 0000000..5c1f34c --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_follow_third_person_example_scene.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=16 format=3 uid="uid://4i5csj0s34nb"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="2_47xf2"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_whx47"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_lii5s"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_jt2lp"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="5_oc4q1"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="7_kg7u1"] +[ext_resource type="PackedScene" uid="uid://mskcwn1a1v6d" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn" id="7_kut0u"] + +[sub_resource type="Resource" id="Resource_8fhct"] +script = ExtResource("2_47xf2") +duration = 0.3 +transition = 3 +ease = 1 + +[sub_resource type="Resource" id="Resource_7m0fv"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_e7t18"] +script = ExtResource("2_47xf2") +duration = 0.4 +transition = 2 +ease = 1 + +[sub_resource type="Resource" id="Resource_jogxh"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 1.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxMesh" id="BoxMesh_wsigl"] +size = Vector3(1, 10, 20) + +[sub_resource type="BoxMesh" id="BoxMesh_bj3re"] +size = Vector3(1, 7, 7) + +[sub_resource type="Resource" id="Resource_afrr1"] +script = ExtResource("2_47xf2") +duration = 0.6 +transition = 3 +ease = 1 + +[sub_resource type="Resource" id="Resource_y5dqe"] +script = ExtResource("5_jt2lp") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[node name="Root" type="Node3D"] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.499999, 0, -0.5, 0.866023, -0.0194088, 2.25688, 3.01476) +script = ExtResource("2_whx47") +priority = 10 +follow_mode = 6 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_8fhct") +tween_on_load = null +camera_3d_resource = SubResource("Resource_7m0fv") +follow_damping = true +follow_distance = 3.5 +spring_length = 3.5 + +[node name="PlayerAimPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.953716, -0.0104945, 0.300522, 0, 0.99939, 0.0348995, -0.300706, -0.0332842, 0.953135, 0.431374, 1.35923, 1.41338) +script = ExtResource("2_whx47") +follow_mode = 6 +follow_target = NodePath("../PlayerCharacterBody3D/PlayerVisual") +tween_resource = SubResource("Resource_e7t18") +tween_on_load = null +camera_3d_resource = SubResource("Resource_jogxh") +follow_offset = Vector3(0, 0.8, 0) +follow_damping = true +follow_distance = 1.5 +spring_length = 1.5 + +[node name="PlayerCharacterBody3D" parent="." instance=ExtResource("7_kut0u")] +unique_name_in_owner = true + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.499999, 0, -0.5, 0.866023, -0.0194088, 2.25688, 3.01476) +current = true + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("5_oc4q1") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="Wall" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.5, 4.5, 0) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall5" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.133, 3, -6.5) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall6" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 3, 0) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall7" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 3, 0) +mesh = SubResource("BoxMesh_bj3re") +metadata/_edit_lock_ = true + +[node name="Wall2" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 4.5, 0) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall3" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 4.5, 10.5) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="Wall4" parent="Environment" instance=ExtResource("4_lii5s")] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 4.5, -9.5) +mesh = SubResource("BoxMesh_wsigl") +metadata/_edit_lock_ = true + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="CeilingPhantomCamera3D" type="Node3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(-4.37114e-08, -1, 2.98023e-08, 0, 2.98023e-08, 1, -1, 4.37114e-08, -1.3027e-15, -0.200665, 13.366, -0.162648) +script = ExtResource("2_whx47") +tween_resource = SubResource("Resource_afrr1") +tween_on_load = null +camera_3d_resource = SubResource("Resource_y5dqe") + +[node name="MovementInstructionsLabel" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0.0505604, -0.484909, 1.44357) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[WASD] to move" +font = ExtResource("7_kg7u1") +font_size = 48 + +[node name="MovementInstructionsLabel3" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0.0505604, -0.484909, 0.817134) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[Right Mouse Click] to \"aim\"" +font = ExtResource("7_kg7u1") +font_size = 48 + +[node name="MovementInstructionsLabel2" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.0440154, -0.490478, -6.30248) +modulate = Color(0.294118, 1, 0.631373, 1) +text = "[Space] to toggle PCam" +font = ExtResource("7_kg7u1") +font_size = 48 + +[editable path="PlayerCharacterBody3D"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn new file mode 100644 index 0000000..d6fa268 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_look_at_example_scene.tscn @@ -0,0 +1,193 @@ +[gd_scene load_steps=14 format=3 uid="uid://bdhrdhbux7sjg"] + +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="1_i2pjc"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_lldvu"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_8md3q"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_dqss1"] +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="4_2i811"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="4_m3qpq"] +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="5_u5qhp"] + +[sub_resource type="Resource" id="Resource_pwcgo"] +script = ExtResource("3_dqss1") +duration = 1.0 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_ft2w3"] +script = ExtResource("4_m3qpq") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2h36r"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w3olp"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cw102"] +albedo_color = Color(0.227451, 0.337255, 0.576471, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_auy8m"] +albedo_texture = ExtResource("5_u5qhp") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="Node3D" type="Node3D"] + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.998682, 0.0324725, -0.0397495, 0, 0.774433, 0.632656, 0.0513272, -0.631822, 0.773413, -0.137901, 4.03222, 6.36446) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +process_priority = 100 +script = ExtResource("1_lldvu") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("look_at_target", "look_at_targets")] +transform = Transform3D(0.998682, 0.0324725, -0.0397495, 0, 0.774433, 0.632656, 0.0513272, -0.631822, 0.773413, -0.137901, 4.03222, 6.36446) +script = ExtResource("2_8md3q") +priority = 10 +look_at_mode = 2 +look_at_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +look_at_targets = [null, NodePath("../NPCs/PlayerMeshInstance3D")] +tween_resource = SubResource("Resource_pwcgo") +tween_on_load = false +camera_3d_resource = SubResource("Resource_ft2w3") +look_at_damping = true +look_at_damping_value = 0.1 + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("1_i2pjc")] + +[node name="NPCs" type="Node" parent="."] + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.96028, 0.519002, -1.52506) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_w3olp") + +[node name="PlayerMeshInstance3D2" type="MeshInstance3D" parent="NPCs"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.59952, 0.519, 4.06618) +mesh = SubResource("CapsuleMesh_2h36r") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_cw102") + +[node name="Environment" type="Node" parent="."] + +[node name="Floor" parent="Environment" instance=ExtResource("4_2i811")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.00548, 0.805455, -6.37532) +use_collision = true +radius = 1.71971 +height = 2.61091 +sides = 32 + +[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25.5597, 0.31181, -5.46661) +use_collision = true +radius = 2.77591 +height = 1.62362 +sides = 32 + +[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.96428, 0.31181, 6.6322) +use_collision = true +radius = 1.57419 +height = 3.47475 +sides = 32 + +[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.3959, 0.201103, 2.71259) +use_collision = true +radius = 1.41311 +height = 1.40221 +sides = 32 + +[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.02677, 0.201101, 11.6804) +use_collision = true +radius = 2.21673 +height = 7.88261 +sides = 32 + +[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.8316, 0.805455, -8.78984) +use_collision = true +radius = 0.956285 +height = 2.61091 +sides = 32 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.5989, -1.69814, -6.51262) +use_collision = true +radius = 3.34732 +rings = 32 + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.17742, -0.599204, 8.81048) +use_collision = true +radius = 2.65844 +rings = 32 + +[node name="CSGSphere3D3" type="CSGSphere3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.4392, -0.599204, -2.42244) +use_collision = true +radius = 2.14606 +rings = 32 + +[node name="CSGTorus3D" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.58998, -1.90735e-06, 0.346393) +use_collision = true +inner_radius = 1.3 +outer_radius = 2.0 +sides = 32 +ring_sides = 18 + +[node name="CSGTorus3D2" type="CSGTorus3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5502, -1.90735e-06, 7.89765) +use_collision = true +inner_radius = 0.971543 +outer_radius = 2.15226 +sides = 32 +ring_sides = 18 + +[node name="CSGBox3D" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.1202, 6.53866, -12.6331) +use_collision = true +size = Vector3(178.429, 14.0773, 1) +material = SubResource("StandardMaterial3D_auy8m") + +[node name="CSGBox3D2" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.53078, 0.760708, -6.1376) +use_collision = true +size = Vector3(2.64182, 2.52142, 2.30997) + +[node name="CSGBox3D5" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.9646, 0.335247, 8.22829) +use_collision = true +size = Vector3(3.80964, 1.67049, 0.932048) + +[node name="CSGBox3D3" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.70216, 0.138478, -4.36159) +use_collision = true +size = Vector3(1.53893, 1.27695, 1.80814) + +[node name="CSGBox3D6" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.1529, 0.138478, 5.20734) +use_collision = true +size = Vector3(4.03502, 1.27695, 5.2198) + +[node name="CSGBox3D4" type="CSGBox3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.7692, 1.78638, -1.60318) +use_collision = true +size = Vector3(4.57784, 4.57276, 3.11285) + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn b/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn new file mode 100644 index 0000000..eeba110 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/3d_tweening_example_scene.tscn @@ -0,0 +1,258 @@ +[gd_scene load_steps=22 format=3 uid="uid://5xtssqdfilal"] + +[ext_resource type="PackedScene" uid="uid://cixlwqycoox8h" path="res://addons/phantom_camera/examples/models/3d_cube_dark.tscn" id="1_ydeog"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="2_b2yrt"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="3_m2w30"] +[ext_resource type="Resource" uid="uid://cptfoggk2ok67" path="res://addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres" id="4_425ma"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/camera_3d_resource.gd" id="5_cn3g7"] +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd" id="5_h0ouh"] +[ext_resource type="PackedScene" uid="uid://bulsh7s0ibmao" path="res://addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn" id="6_gcjyn"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="6_wup4d"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="8_60rny"] + +[sub_resource type="Resource" id="Resource_0dtvs"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_j6fha"] +size = Vector3(5, 0.1, 4) + +[sub_resource type="BoxMesh" id="BoxMesh_xg4en"] +size = Vector3(5, 0.1, 4) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2dct5"] +transparency = 1 +albedo_color = Color(0.988235, 0.478431, 0.905882, 0.0901961) + +[sub_resource type="Resource" id="Resource_v8ndi"] +script = ExtResource("6_wup4d") +duration = 0.6 +transition = 0 +ease = 2 + +[sub_resource type="Resource" id="Resource_kmep1"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_uxg44"] +script = ExtResource("6_wup4d") +duration = 0.3 +transition = 1 +ease = 2 + +[sub_resource type="Resource" id="Resource_eu3bc"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_0nci0"] +script = ExtResource("6_wup4d") +duration = 0.3 +transition = 8 +ease = 2 + +[sub_resource type="Resource" id="Resource_u0lff"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[sub_resource type="Resource" id="Resource_50m5g"] +script = ExtResource("6_wup4d") +duration = 1.2 +transition = 10 +ease = 2 + +[sub_resource type="Resource" id="Resource_rexf8"] +script = ExtResource("5_cn3g7") +cull_mask = 1048575 +h_offset = 0.0 +v_offset = 0.0 +fov = 75.0 + +[node name="Root" type="Node3D"] + +[node name="Environment" type="Node" parent="."] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Environment"] +transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 8, 0) +metadata/_edit_lock_ = true + +[node name="Floor" parent="Environment" instance=ExtResource("1_ydeog")] +transform = Transform3D(1000, 0, 0, 0, 1, 0, 0, 0, 1000, 0, -1, 0) +metadata/_edit_lock_ = true + +[node name="MainCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.999889, 0, 0, 0, 0.707092, 0.707088, 0, -0.707092, 0.707088, 0.083587, 2.507, 4.05493) + +[node name="PhantomCameraHost" type="Node" parent="MainCamera3D"] +script = ExtResource("2_b2yrt") + +[node name="------------------" type="Node" parent="."] + +[node name="PlayerPhantomCamera3D" type="Node3D" parent="." node_paths=PackedStringArray("follow_target")] +unique_name_in_owner = true +transform = Transform3D(0.999889, 0, 0, 0, 0.707092, 0.707088, 0, -0.707092, 0.707088, 0.083587, 2.507, 4.05493) +script = ExtResource("3_m2w30") +priority = 3 +follow_mode = 2 +follow_target = NodePath("../PlayerCharacterBody3D2/PlayerVisual") +tween_resource = ExtResource("4_425ma") +tween_on_load = false +camera_3d_resource = SubResource("Resource_0dtvs") +follow_offset = Vector3(0, 2, 2) +follow_damping = true + +[node name="PlayerCharacterBody3D2" parent="." instance=ExtResource("6_gcjyn")] + +[node name="-------------------" type="Node" parent="."] + +[node name="Tweening Example" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.97) + +[node name="Linear" type="Node3D" parent="Tweening Example"] + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Linear" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Linear/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Linear/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Linear"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_v8ndi") +camera_3d_resource = SubResource("Resource_kmep1") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Linear"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, -1.8, 0.5, 0) +text = "Transition Type: +Linear + +Duration: +0.6s" +font = ExtResource("8_60rny") +font_size = 48 + +[node name="Sine" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -7.4) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Sine" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Sine/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Sine/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Sine"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_uxg44") +camera_3d_resource = SubResource("Resource_eu3bc") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Sine"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, 1.7, 0.5, 0) +text = "Transition Type: +Sine + +Duration: +0.3s" +font = ExtResource("8_60rny") +font_size = 72 + +[node name="Circ" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -14.1) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Circ" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Circ/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Circ/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Circ"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_0nci0") +camera_3d_resource = SubResource("Resource_u0lff") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Circ"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, -1.8, 0.5, 0) +text = "Transition Type: +Circ + +Duration: +0.3s" +font = ExtResource("8_60rny") +font_size = 72 + +[node name="Back" type="Node3D" parent="Tweening Example"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -21) + +[node name="EntryRoomTrigger" type="Area3D" parent="Tweening Example/Back" node_paths=PackedStringArray("area_pcam")] +priority = 5 +script = ExtResource("5_h0ouh") +area_pcam = NodePath("../PhantomCamera3D") +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Tweening Example/Back/EntryRoomTrigger"] +shape = SubResource("BoxShape3D_j6fha") + +[node name="NPCInteractionZoneMesh" type="MeshInstance3D" parent="Tweening Example/Back/EntryRoomTrigger"] +mesh = SubResource("BoxMesh_xg4en") +skeleton = NodePath("../../../../..") +surface_material_override/0 = SubResource("StandardMaterial3D_2dct5") +metadata/_edit_group_ = true + +[node name="PhantomCamera3D" type="Node3D" parent="Tweening Example/Back"] +transform = Transform3D(1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, -0.8, 4.8, 3.3) +script = ExtResource("3_m2w30") +tween_resource = SubResource("Resource_50m5g") +camera_3d_resource = SubResource("Resource_rexf8") + +[node name="TweenNameLabel" type="Label3D" parent="Tweening Example/Back"] +transform = Transform3D(1, 0, 0, 0, 0.695913, 0.718126, 0, -0.718126, 0.695913, 1.7, 0.5, 0) +text = "Transition Type: +Back + +Duration: +1.2s" +font = ExtResource("8_60rny") +font_size = 48 + +[editable path="PlayerCharacterBody3D2"] diff --git a/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn new file mode 100644 index 0000000..2198ced --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_3d.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://bulsh7s0ibmao"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller.gd" id="1_6hh6c"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8efyg"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_2cfaw"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r3ldp"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[node name="PlayerCharacterBody3D2" type="CharacterBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.083587, 0.507, 2.05493) +script = ExtResource("1_6hh6c") +metadata/_edit_group_ = true + +[node name="PlayerArea3D" type="Area3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerArea3D"] +shape = SubResource("CapsuleShape3D_8efyg") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_8efyg") + +[node name="PlayerVisual" type="Node3D" parent="."] +unique_name_in_owner = true + +[node name="PlayerModel" type="MeshInstance3D" parent="PlayerVisual"] +mesh = SubResource("CapsuleMesh_2cfaw") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_r3ldp") diff --git a/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn new file mode 100644 index 0000000..ecfd6f9 --- /dev/null +++ b/addons/phantom_camera/examples/example_scenes/3D/sub_scenes/playable_character_third_person_3d.tscn @@ -0,0 +1,43 @@ +[gd_scene load_steps=6 format=3 uid="uid://mskcwn1a1v6d"] + +[ext_resource type="Script" path="res://addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd" id="1_0dnfe"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_s61dn"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_47f0o"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mv4do"] +albedo_color = Color(0.988235, 0.498039, 0.498039, 1) + +[sub_resource type="PrismMesh" id="PrismMesh_wg1x3"] +size = Vector3(0.5, 0.5, 0.3) + +[node name="PlayerCharacterBody3D" type="CharacterBody3D"] +transform = Transform3D(0.999903, 0.0139622, 0, -0.0139622, 0.999903, 0, 0, 0, 1, -0.0194088, 0.506884, -0.0163251) +collision_layer = 2 +script = ExtResource("1_0dnfe") +metadata/_edit_group_ = true + +[node name="PlayerArea3D" type="Area3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerArea3D"] +shape = SubResource("CapsuleShape3D_s61dn") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_s61dn") + +[node name="PlayerVisual" type="Node3D" parent="."] +unique_name_in_owner = true + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="PlayerVisual"] +transform = Transform3D(1, 0, 0, 0, 1, 4.65661e-10, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CapsuleMesh_47f0o") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_mv4do") + +[node name="PlayerDirection" type="MeshInstance3D" parent="PlayerVisual"] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, -9.31323e-10, 1, 4.65661e-10, 2.98023e-08, 0, 1, -0.0156226, 1.08631, 0) +mesh = SubResource("PrismMesh_wg1x3") +skeleton = NodePath("../..") +surface_material_override/0 = SubResource("StandardMaterial3D_mv4do") diff --git a/addons/phantom_camera/examples/models/3d_cube_dark.tscn b/addons/phantom_camera/examples/models/3d_cube_dark.tscn new file mode 100644 index 0000000..627dc6f --- /dev/null +++ b/addons/phantom_camera/examples/models/3d_cube_dark.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://cixlwqycoox8h"] + +[ext_resource type="Texture2D" uid="uid://c7ja4woxol8yc" path="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" id="1_836jx"] + +[sub_resource type="BoxMesh" id="BoxMesh_d24c3"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aox6v"] +albedo_texture = ExtResource("1_836jx") +uv1_triplanar = true +uv1_world_triplanar = true + +[node name="3DPrototypeCube" type="CSGMesh3D"] +use_collision = true +mesh = SubResource("BoxMesh_d24c3") +material = SubResource("StandardMaterial3D_aox6v") diff --git a/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres b/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres new file mode 100644 index 0000000..640b6ae --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/fixed_camera_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://c1v786g5agaw5"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_ptlie"] + +[resource] +script = ExtResource("1_ptlie") +duration = 0.0 +transition = 0 +ease = 2 diff --git a/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..38d9879 --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/inventory_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTweenResource" load_steps=2 format=3 uid="uid://cllveybboaqk5"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_7yoy0"] + +[resource] +script = ExtResource("1_7yoy0") +duration = 0.6 +transition = 5 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..3a09b1e --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/item_focus_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTweenResource" load_steps=2 format=3 uid="uid://cecrnq0wnkexh"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_sq5ls"] + +[resource] +script = ExtResource("1_sq5ls") +duration = 0.6 +transition = 8 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres new file mode 100644 index 0000000..e23bdbe --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_2d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://euybd2w0bax"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_by4ei"] + +[resource] +script = ExtResource("1_by4ei") +duration = 0.6 +transition = 3 +ease = 1 diff --git a/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres new file mode 100644 index 0000000..7edea42 --- /dev/null +++ b/addons/phantom_camera/examples/resources/tween/player_phantom_camera_3d_tween.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="PhantomCameraTween" load_steps=2 format=3 uid="uid://cptfoggk2ok67"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="1_q5tix"] + +[resource] +script = ExtResource("1_q5tix") +duration = 0.6 +transition = 3 +ease = 2 diff --git a/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd new file mode 100644 index 0000000..06e9180 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween.gd @@ -0,0 +1,36 @@ +extends Node2D + +@onready var pcam_room_left: PhantomCamera2D = %RoomLeftPhantomCamera2D +@onready var pcam_room_centre: PhantomCamera2D = %RoomCentrePhantomCamera2D +@onready var pcam_room_right: PhantomCamera2D = %RoomRightPhantomCamera2D + +@onready var player: Node2D = %CharacterBody2D/%PlayerVisuals + +@onready var area_2d_room_left: Area2D = %RoomLeftArea2D +@onready var area_2d_room_centre: Area2D = %RoomCentreArea2D +@onready var area_2d_room_right: Area2D = %RoomRightArea2D + + +func _ready(): + pcam_room_left.set_follow_offset(Vector2(0, -80)) + pcam_room_right.set_follow_offset(Vector2(0, -80)) + + area_2d_room_left.body_entered.connect(_on_body_entered.bind(pcam_room_left)) + area_2d_room_centre.body_entered.connect(_on_body_entered.bind(pcam_room_centre)) + area_2d_room_right.body_entered.connect(_on_body_entered.bind(pcam_room_right)) + + area_2d_room_left.body_exited.connect(_on_body_exited.bind(pcam_room_left)) + area_2d_room_centre.body_exited.connect(_on_body_exited.bind(pcam_room_centre)) + area_2d_room_right.body_exited.connect(_on_body_exited.bind(pcam_room_right)) + + +func _on_body_entered(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player.get_parent(): + pcam.set_follow_target(player) + pcam.set_priority(20) + + +func _on_body_exited(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player.get_parent(): + pcam.set_priority(0) + pcam.set_follow_target(null) diff --git a/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd new file mode 100644 index 0000000..970c52e --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_room_limit_tween_4.3.gd @@ -0,0 +1,36 @@ +extends Node2D + +@onready var pcam_room_left: PhantomCamera2D = %RoomLeftPhantomCamera2D +@onready var pcam_room_centre: PhantomCamera2D = %RoomCentrePhantomCamera2D +@onready var pcam_room_right: PhantomCamera2D = %RoomRightPhantomCamera2D + +@onready var player: Node2D = %CharacterBody2D + +@onready var area_2d_room_left: Area2D = %RoomLeftArea2D +@onready var area_2d_room_centre: Area2D = %RoomCentreArea2D +@onready var area_2d_room_right: Area2D = %RoomRightArea2D + + +func _ready(): + pcam_room_left.set_follow_offset(Vector2(0, -80)) + pcam_room_right.set_follow_offset(Vector2(0, -80)) + + area_2d_room_left.body_entered.connect(_on_body_entered.bind(pcam_room_left)) + area_2d_room_centre.body_entered.connect(_on_body_entered.bind(pcam_room_centre)) + area_2d_room_right.body_entered.connect(_on_body_entered.bind(pcam_room_right)) + + area_2d_room_left.body_exited.connect(_on_body_exited.bind(pcam_room_left)) + area_2d_room_centre.body_exited.connect(_on_body_exited.bind(pcam_room_centre)) + area_2d_room_right.body_exited.connect(_on_body_exited.bind(pcam_room_right)) + + +func _on_body_entered(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player: + pcam.set_follow_target(player) + pcam.set_priority(20) + + +func _on_body_exited(body: Node2D, pcam: PhantomCamera2D) -> void: + if body == player: + pcam.set_priority(0) + pcam.set_follow_target(null) diff --git a/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd b/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd new file mode 100644 index 0000000..db0209c --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/2d_trigger_area.gd @@ -0,0 +1,16 @@ +extends Area2D + +@export var area_pcam: PhantomCamera2D + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + +func _entered_area(area_2d: Area2D) -> void: + if area_2d.get_parent() is CharacterBody2D: + area_pcam.set_priority(20) + +func _exited_area(area_2d: Area2D) -> void: + if area_2d.get_parent() is CharacterBody2D: + area_pcam.set_priority(0) + diff --git a/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd new file mode 100644 index 0000000..da7a74e --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d.gd @@ -0,0 +1,190 @@ +extends CharacterBody2D + +@onready var _player_area2d = %PlayerArea2D +@onready var _player_visuals: Node2D = %PlayerVisuals +@onready var _player_sprite: Sprite2D = %PlayerSprite +@onready var _interaction_prompt: Panel = %InteractionPrompt +@onready var _ui_sign: Control +@onready var _dark_overlay: ColorRect = %DarkOverlay + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +const SPEED = 350.0 +const JUMP_VELOCITY = -750.0 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: int = 2400 +var _is_interactive: bool +var _can_open_inventory: bool +var _movement_disabled: bool +var tween: Tween +var _interactive_UI: Control +var _active_pcam: PhantomCamera2D + +var _physics_body_trans_last: Transform2D +var _physics_body_trans_current: Transform2D + +enum InteractiveType { + NONE = 0, + ITEM = 1, + INVENTORY = 2, +} +var _interactive_object: InteractiveType = InteractiveType.NONE + +var InputMovementDic: Dictionary = { + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + _player_area2d.connect("body_shape_entered", _show_prompt) + _player_area2d.connect("body_shape_exited", _hide_prompt) + + _ui_sign = owner.get_node("%UISign") + + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + _player_visuals.top_level = true + + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor >= 3: + printerr("Please run the other 2D example scenes, in the 2D-4.3 directory, for more up-to-date example setups.") + + +func _unhandled_input(event: InputEvent) -> void: + if _is_interactive: + if Input.is_physical_key_pressed(KEY_F): + if tween: + tween.kill() + + if not _movement_disabled: + tween = get_tree().create_tween() + + _movement_disabled = true + _active_pcam.set_priority(10) + + _show_interactive_node(_interactive_UI) + _interactive_node_logic() + + else: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + + if Input.is_physical_key_pressed(KEY_ESCAPE) and _movement_disabled: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + +func _show_interactive_node(UI: Control) -> void: + UI.modulate.a = 0 + UI.visible = true + tween.tween_property(UI, "modulate", Color.WHITE, 1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CIRC) + + +func _hide_interactive_node(UI: Control) -> void: + _movement_disabled = false + _active_pcam.set_priority(0) + UI.visible = false + + +func _interactive_node_logic() -> void: + match _interactive_object: + 2: + if _movement_disabled: + _dark_overlay.set_visible(true) + else: + _dark_overlay.set_visible(false) + + +func _physics_process(delta: float) -> void: + _physics_body_trans_last = _physics_body_trans_current + _physics_body_trans_current = global_transform + + if not is_on_floor(): + velocity.y += gravity * delta + + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + + if _movement_disabled: return + + var input_dir: = Input.get_axis( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME + ) + + if input_dir: + velocity.x = input_dir * SPEED + if input_dir > 0: + _player_sprite.set_flip_h(false) + elif input_dir < 0: + _player_sprite.set_flip_h(true) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + + move_and_slide() + + +func _process(delta) -> void: + _player_visuals.global_position = _physics_body_trans_last.interpolate_with( + _physics_body_trans_current, + Engine.get_physics_interpolation_fraction() + ).origin + + +func _show_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + var cell_data_type: StringName = cell_data.get_custom_data("Type") +# var cell_global_pos: Vector2 = tile_map.to_global(tile_map.map_to_local(tile_coords)) + _is_interactive = true + _interaction_prompt.set_visible(true) + + match cell_data_type: + "Sign": + _interactive_UI = owner.get_node("%UISign") + _active_pcam = %ItemFocusPhantomCamera2D + _interactive_object = InteractiveType.ITEM + "Inventory": + _interactive_UI = owner.get_node("%UIInventory") + _interactive_object = InteractiveType.INVENTORY + _active_pcam = %InventoryPhantomCamera2D + + +func _hide_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + _interaction_prompt.set_visible(false) + _is_interactive = false + _interactive_UI = null + _interactive_object = InteractiveType.NONE + _active_pcam = null + diff --git a/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd new file mode 100644 index 0000000..2fe592f --- /dev/null +++ b/addons/phantom_camera/examples/scripts/2D/player_character_body_2d_4.3.gd @@ -0,0 +1,176 @@ +extends CharacterBody2D + +@onready var _player_area2d = %PlayerArea2D +@onready var _player_visuals: Node2D = %PlayerVisuals +@onready var _player_sprite: Sprite2D = %PlayerSprite +@onready var _interaction_prompt: Panel = %InteractionPrompt +@onready var _ui_sign: Control +@onready var _dark_overlay: ColorRect = %DarkOverlay + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +const SPEED = 350.0 +const JUMP_VELOCITY = -750.0 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: int = 2400 +var _is_interactive: bool +var _can_open_inventory: bool +var _movement_disabled: bool +var tween: Tween +var _interactive_UI: Control +var _active_pcam: PhantomCamera2D + +enum InteractiveType { + NONE = 0, + ITEM = 1, + INVENTORY = 2, +} +var _interactive_object: InteractiveType = InteractiveType.NONE + +var InputMovementDic: Dictionary = { + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + _player_area2d.connect("body_shape_entered", _show_prompt) + _player_area2d.connect("body_shape_exited", _hide_prompt) + + _ui_sign = owner.get_node("%UISign") + + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor < 3: + printerr("This scene is designed to only work properly in Godot 4.3 or later that supports 2D Physics Interpolation.") + printerr("Please run the other 2D example scenes in the other directory.") + + +func _unhandled_input(event: InputEvent) -> void: + if _is_interactive: + if Input.is_physical_key_pressed(KEY_F): + if tween: + tween.kill() + + if not _movement_disabled: + tween = get_tree().create_tween() + + _movement_disabled = true + _active_pcam.set_priority(10) + + _show_interactive_node(_interactive_UI) + _interactive_node_logic() + + else: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + + if Input.is_physical_key_pressed(KEY_ESCAPE) and _movement_disabled: + _hide_interactive_node(_interactive_UI) + _interactive_node_logic() + + +func _show_interactive_node(UI: Control) -> void: + UI.modulate.a = 0 + UI.visible = true + tween.tween_property(UI, "modulate", Color.WHITE, 1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CIRC) + + +func _hide_interactive_node(UI: Control) -> void: + _movement_disabled = false + _active_pcam.set_priority(0) + UI.visible = false + + +func _interactive_node_logic() -> void: + match _interactive_object: + 2: + if _movement_disabled: + _dark_overlay.set_visible(true) + else: + _dark_overlay.set_visible(false) + + +func _physics_process(delta: float) -> void: + if not is_on_floor(): + velocity.y += gravity * delta + + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + + if _movement_disabled: return + + var input_dir: = Input.get_axis( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME + ) + + if input_dir: + velocity.x = input_dir * SPEED + if input_dir > 0: + _player_sprite.set_flip_h(false) + elif input_dir < 0: + _player_sprite.set_flip_h(true) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + + move_and_slide() + + +func _show_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + var cell_data_type: StringName = cell_data.get_custom_data("Type") +# var cell_global_pos: Vector2 = tile_map.to_global(tile_map.map_to_local(tile_coords)) + _is_interactive = true + _interaction_prompt.set_visible(true) + + match cell_data_type: + "Sign": + _interactive_UI = owner.get_node("%UISign") + _active_pcam = %ItemFocusPhantomCamera2D + _interactive_object = InteractiveType.ITEM + "Inventory": + _interactive_UI = owner.get_node("%UIInventory") + _interactive_object = InteractiveType.INVENTORY + _active_pcam = %InventoryPhantomCamera2D + + +func _hide_prompt(body_rid: RID, body: Node2D, body_shape_index: int, local_shape: int) -> void: + if body is TileMap: + var tile_map: TileMap = body + + var tile_coords: Vector2i = tile_map.get_coords_for_body_rid(body_rid) + var cell_data: TileData = tile_map.get_cell_tile_data(1, tile_coords) + + if cell_data: + _interaction_prompt.set_visible(false) + _is_interactive = false + _interactive_UI = null + _interactive_object = InteractiveType.NONE + _active_pcam = null + diff --git a/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd b/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd new file mode 100644 index 0000000..4fc9764 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/3d_trigger_area.gd @@ -0,0 +1,26 @@ +extends Area3D + +@export var area_pcam: PhantomCamera3D + +var initial_camera_position: Vector3 +var initial_camera_rotation: Vector3 + +var tween: Tween +var tween_duration: float = 0.9 + + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + + +func _entered_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + area_pcam.set_priority(20) + + +func _exited_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + area_pcam.set_priority(0) + + diff --git a/addons/phantom_camera/examples/scripts/3D/npc.gd b/addons/phantom_camera/examples/scripts/3D/npc.gd new file mode 100644 index 0000000..3d9a523 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/npc.gd @@ -0,0 +1,71 @@ +extends Node3D + +@onready var npc_pcam: PhantomCamera3D = %NPCPhantomCamera3D +@onready var dialogueArea: Area3D = %NPCInteractionArea3D +@onready var dialogueLabel3D: Label3D = %NPCDialogueExampleLabel + +@onready var player: CharacterBody3D = %PlayerCharacterBody3D + +@onready var move_to_location: Vector3 = %MoveToLocation.get_global_position() + +var dialogue_label_initial_position: Vector3 +var dialogue_label_initial_rotation: Vector3 + +var tween: Tween +var tween_duration: float = 0.9 +var tween_transition: Tween.TransitionType = Tween.TRANS_QUAD + +var interactable: bool +var is_interacting: bool + +func _ready() -> void: + dialogueArea.connect("area_entered", _interactable) + dialogueArea.connect("area_exited", _not_interactable) + + dialogueLabel3D.set_visible(false) + + dialogue_label_initial_position = dialogueLabel3D.get_global_position() + dialogue_label_initial_rotation = dialogueLabel3D.get_global_rotation() + + npc_pcam.tween_completed.connect(_on_tween_started) + + + +func _on_tween_started() -> void: + player.movement_enabled = false + + +func _interactable(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + dialogueLabel3D.set_visible(true) + interactable = true + + var tween: Tween = get_tree().create_tween().set_trans(tween_transition).set_ease(Tween.EASE_IN_OUT).set_loops() + tween.tween_property(dialogueLabel3D, "global_position", dialogue_label_initial_position - Vector3(0, -0.2, 0), tween_duration) + tween.tween_property(dialogueLabel3D, "position", dialogue_label_initial_position, tween_duration) + + +func _not_interactable(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + dialogueLabel3D.set_visible(false) + interactable = false + + +func _input(event) -> void: + if not interactable: return + + if event is InputEventKey and event.pressed: + if event.keycode == KEY_F: + var tween: Tween = get_tree().create_tween() \ + .set_parallel(true) \ + .set_trans(Tween.TRANS_QUART) \ + .set_ease(Tween.EASE_IN_OUT) + if not is_interacting: + npc_pcam.priority = 20 + tween.tween_property(player, "global_position", move_to_location, 0.6).set_trans(tween_transition) + tween.tween_property(dialogueLabel3D, "rotation", Vector3(deg_to_rad(-20), deg_to_rad(53), 0), 0.6).set_trans(tween_transition) + else: + npc_pcam.priority = 0 + tween.tween_property(dialogueLabel3D, "rotation", dialogue_label_initial_rotation, 0.9) + player.movement_enabled = true + is_interacting = !is_interacting diff --git a/addons/phantom_camera/examples/scripts/3D/path_follow.gd b/addons/phantom_camera/examples/scripts/3D/path_follow.gd new file mode 100644 index 0000000..22973ec --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/path_follow.gd @@ -0,0 +1,18 @@ +extends Node + +@export var path_pcam: PhantomCamera3D + +func _ready() -> void: + connect("area_entered", _entered_area) + connect("area_exited", _exited_area) + + +func _entered_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + path_pcam.set_priority(20) + + +func _exited_area(area_3D: Area3D) -> void: + if area_3D.get_parent() is CharacterBody3D: + path_pcam.set_priority(0) + diff --git a/addons/phantom_camera/examples/scripts/3D/player_controller.gd b/addons/phantom_camera/examples/scripts/3D/player_controller.gd new file mode 100644 index 0000000..b136103 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/player_controller.gd @@ -0,0 +1,103 @@ +extends CharacterBody3D + +@export var SPEED: float = 5.0 +@export var JUMP_VELOCITY: float = 4.5 +@export var enable_gravity = true + +@onready var _camera: Camera3D + +@onready var _player_visual: Node3D = %PlayerVisual + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity: float = 9.8 + +var movement_enabled: bool = true + +var _physics_body_trans_last: Transform3D +var _physics_body_trans_current: Transform3D + +const KEY_STRINGNAME: StringName = "Key" +const ACTION_STRINGNAME: StringName = "Action" + +const INPUT_MOVE_UP_STRINGNAME: StringName = "move_up" +const INPUT_MOVE_DOWM_STRINGNAME: StringName = "move_down" +const INPUT_MOVE_LEFT_STRINGNAME: StringName = "move_left" +const INPUT_MOVE_RIGHT_STRINGNAME: StringName = "move_right" + +var InputMovementDic: Dictionary = { + INPUT_MOVE_UP_STRINGNAME: { + KEY_STRINGNAME: KEY_W, + ACTION_STRINGNAME: INPUT_MOVE_UP_STRINGNAME + }, + INPUT_MOVE_DOWM_STRINGNAME: { + KEY_STRINGNAME: KEY_S, + ACTION_STRINGNAME: INPUT_MOVE_DOWM_STRINGNAME + }, + INPUT_MOVE_LEFT_STRINGNAME: { + KEY_STRINGNAME: KEY_A, + ACTION_STRINGNAME: INPUT_MOVE_LEFT_STRINGNAME + }, + INPUT_MOVE_RIGHT_STRINGNAME: { + KEY_STRINGNAME: KEY_D, + ACTION_STRINGNAME: INPUT_MOVE_RIGHT_STRINGNAME + }, +} + + +func _ready() -> void: + for input in InputMovementDic: + var key_val = InputMovementDic[input].get(KEY_STRINGNAME) + var action_val = InputMovementDic[input].get(ACTION_STRINGNAME) + + _camera = owner.get_node("%MainCamera3D") + + var movement_input = InputEventKey.new() + movement_input.physical_keycode = key_val + InputMap.add_action(action_val) + InputMap.action_add_event(action_val, movement_input) + + _player_visual.top_level = true + + +func _physics_process(delta: float) -> void: + _physics_body_trans_last = _physics_body_trans_current + _physics_body_trans_current = global_transform + + # Add the gravity. + if enable_gravity and not is_on_floor(): + velocity.y -= gravity * delta + + if not movement_enabled: return + + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var input_dir: Vector2 = Input.get_vector( + INPUT_MOVE_LEFT_STRINGNAME, + INPUT_MOVE_RIGHT_STRINGNAME, + INPUT_MOVE_UP_STRINGNAME, + INPUT_MOVE_DOWM_STRINGNAME + ) + + var cam_dir: Vector3 = -_camera.global_transform.basis.z + + var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + if direction: + var move_dir: Vector3 = Vector3.ZERO + move_dir.x = direction.x + move_dir.z = direction.z + + move_dir = move_dir.rotated(Vector3.UP, _camera.rotation.y).normalized() + velocity.x = move_dir.x * SPEED + velocity.z = move_dir.z * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.z = move_toward(velocity.z, 0, SPEED) + + move_and_slide() + + +func _process(_delta: float) -> void: + _player_visual.global_transform = _physics_body_trans_last.interpolate_with( + _physics_body_trans_current, + Engine.get_physics_interpolation_fraction() + ) diff --git a/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd b/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd new file mode 100644 index 0000000..9bd3a76 --- /dev/null +++ b/addons/phantom_camera/examples/scripts/3D/player_controller_third_person.gd @@ -0,0 +1,88 @@ +extends "player_controller.gd" + +@onready var _player_pcam: PhantomCamera3D +@onready var _aim_pcam: PhantomCamera3D +@onready var _player_direction: Node3D = %PlayerDirection +@onready var _ceiling_pcam: PhantomCamera3D + +@export var mouse_sensitivity: float = 0.05 + +@export var min_pitch: float = -89.9 +@export var max_pitch: float = 50 + +@export var min_yaw: float = 0 +@export var max_yaw: float = 360 + + + +func _ready() -> void: + super() + + _player_pcam = owner.get_node("%PlayerPhantomCamera3D") + _aim_pcam = owner.get_node("%PlayerAimPhantomCamera3D") + _ceiling_pcam = owner.get_node("%CeilingPhantomCamera3D") + + if _player_pcam.get_follow_mode() == _player_pcam.FollowMode.THIRD_PERSON: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +func _physics_process(delta: float) -> void: + super(delta) + + if velocity.length() > 0.2: + var look_direction: Vector2 = Vector2(velocity.z, velocity.x) + _player_direction.rotation.y = look_direction.angle() + + +func _unhandled_input(event: InputEvent) -> void: + if _player_pcam.get_follow_mode() == _player_pcam.FollowMode.THIRD_PERSON: + var active_pcam: PhantomCamera3D + + if is_instance_valid(_aim_pcam): + _set_pcam_rotation(_player_pcam, event) + _set_pcam_rotation(_aim_pcam, event) + if _player_pcam.get_priority() > _aim_pcam.get_priority(): + _toggle_aim_pcam(event) + else: + _toggle_aim_pcam(event) + + if event is InputEventKey and event.pressed: + if event.keycode == KEY_SPACE: + if _ceiling_pcam.get_priority() < 30 and _player_pcam.is_active(): + _ceiling_pcam.set_priority(30) + else: + _ceiling_pcam.set_priority(1) + + +func _set_pcam_rotation(pcam: PhantomCamera3D, event: InputEvent) -> void: + if event is InputEventMouseMotion: + var pcam_rotation_degrees: Vector3 + + # Assigns the current 3D rotation of the SpringArm3D node - so it starts off where it is in the editor + pcam_rotation_degrees = pcam.get_third_person_rotation_degrees() + + # Change the X rotation + pcam_rotation_degrees.x -= event.relative.y * mouse_sensitivity + + # Clamp the rotation in the X axis so it go over or under the target + pcam_rotation_degrees.x = clampf(pcam_rotation_degrees.x, min_pitch, max_pitch) + + # Change the Y rotation value + pcam_rotation_degrees.y -= event.relative.x * mouse_sensitivity + + # Sets the rotation to fully loop around its target, but witout going below or exceeding 0 and 360 degrees respectively + pcam_rotation_degrees.y = wrapf(pcam_rotation_degrees.y, min_yaw, max_yaw) + + # Change the SpringArm3D node's rotation and rotate around its target + pcam.set_third_person_rotation_degrees(pcam_rotation_degrees) + + +func _toggle_aim_pcam(event: InputEvent) -> void: + if event is InputEventMouseButton \ + and event.is_pressed() \ + and event.button_index == 2 \ + and (_player_pcam.is_active() or _aim_pcam.is_active()): + if _player_pcam.get_priority() > _aim_pcam.get_priority(): + _aim_pcam.set_priority(30) + else: + _aim_pcam.set_priority(0) diff --git a/addons/phantom_camera/examples/textures/2D/inventory_container.png b/addons/phantom_camera/examples/textures/2D/inventory_container.png new file mode 100644 index 0000000..7dd5178 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/inventory_container.png differ diff --git a/addons/phantom_camera/examples/textures/2D/inventory_container.png.import b/addons/phantom_camera/examples/textures/2D/inventory_container.png.import new file mode 100644 index 0000000..72be1e5 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/inventory_container.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7cs6me43ufh3" +path="res://.godot/imported/inventory_container.png-12241277f279bfc4bf7d5dad6b3e8ff2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/inventory_container.png" +dest_files=["res://.godot/imported/inventory_container.png-12241277f279bfc4bf7d5dad6b3e8ff2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/examples/textures/2D/level_spritesheet.png b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png new file mode 100644 index 0000000..939cb28 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png differ diff --git a/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import new file mode 100644 index 0000000..520372a --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/level_spritesheet.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c77npili4pel4" +path="res://.godot/imported/level_spritesheet.png-26a44dd21a040a5480d5ccba54377d99.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/level_spritesheet.png" +dest_files=["res://.godot/imported/level_spritesheet.png-26a44dd21a040a5480d5ccba54377d99.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png new file mode 100644 index 0000000..2012b3a Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png differ diff --git a/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import new file mode 100644 index 0000000..425002e --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwep0on2tthn7" +path="res://.godot/imported/phantom_camera_2d_sprite.png-deab230b83ae03aeb308a08ff66b8dbc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/phantom_camera_2d_sprite.png" +dest_files=["res://.godot/imported/phantom_camera_2d_sprite.png-deab230b83ae03aeb308a08ff66b8dbc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/examples/textures/2D/player_sprite.svg b/addons/phantom_camera/examples/textures/2D/player_sprite.svg new file mode 100644 index 0000000..ce261b1 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/player_sprite.svg @@ -0,0 +1,4 @@ + + + + diff --git a/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import b/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import new file mode 100644 index 0000000..41dc9dc --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/player_sprite.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ci76plsequlrq" +path="res://.godot/imported/player_sprite.svg-8862ecb19e12152eb892607676f3831f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/player_sprite.svg" +dest_files=["res://.godot/imported/player_sprite.svg-8862ecb19e12152eb892607676f3831f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=8.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/examples/textures/2D/sign_prompt.png b/addons/phantom_camera/examples/textures/2D/sign_prompt.png new file mode 100644 index 0000000..a730837 Binary files /dev/null and b/addons/phantom_camera/examples/textures/2D/sign_prompt.png differ diff --git a/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import b/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import new file mode 100644 index 0000000..a5799d3 --- /dev/null +++ b/addons/phantom_camera/examples/textures/2D/sign_prompt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bloouh2jtndx1" +path="res://.godot/imported/sign_prompt.png-18d451127e1cd1a16367acd23cec47e5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/2D/sign_prompt.png" +dest_files=["res://.godot/imported/sign_prompt.png-18d451127e1cd1a16367acd23cec47e5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png new file mode 100644 index 0000000..4aeae6c Binary files /dev/null and b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png differ diff --git a/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import new file mode 100644 index 0000000..cfcc34e --- /dev/null +++ b/addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7ja4woxol8yc" +path.bptc="res://.godot/imported/checker_pattern_dark.png-70cedad2d3abf4ad6166d6614eefa7fb.bptc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/phantom_camera/examples/textures/3D/checker_pattern_dark.png" +dest_files=["res://.godot/imported/checker_pattern_dark.png-70cedad2d3abf4ad6166d6614eefa7fb.bptc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=true +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/addons/phantom_camera/examples/ui/ui_inventory.tscn b/addons/phantom_camera/examples/ui/ui_inventory.tscn new file mode 100644 index 0000000..cddd377 --- /dev/null +++ b/addons/phantom_camera/examples/ui/ui_inventory.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=3 format=3 uid="uid://dg7rhrymsrrrm"] + +[ext_resource type="Texture2D" uid="uid://b7cs6me43ufh3" path="res://addons/phantom_camera/examples/textures/2D/inventory_container.png" id="1_pi2dp"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_0rdcn"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = 28.0 +offset_top = -255.0 +offset_right = 908.0 +offset_bottom = 183.0 +grow_vertical = 2 +texture = ExtResource("1_pi2dp") + +[node name="Label" type="Label" parent="TextureRect"] +layout_mode = 0 +offset_left = 345.0 +offset_top = 12.0 +offset_right = 535.0 +offset_bottom = 60.0 +theme_override_colors/font_color = Color(0.356863, 0.105882, 0.133333, 1) +theme_override_fonts/font = ExtResource("2_0rdcn") +theme_override_font_sizes/font_size = 32 +text = "Inventory" +horizontal_alignment = 1 +uppercase = true diff --git a/addons/phantom_camera/examples/ui/ui_sign.tscn b/addons/phantom_camera/examples/ui/ui_sign.tscn new file mode 100644 index 0000000..1b891ef --- /dev/null +++ b/addons/phantom_camera/examples/ui/ui_sign.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=4 format=3 uid="uid://iq5xd1ob1res"] + +[ext_resource type="Texture2D" uid="uid://bloouh2jtndx1" path="res://addons/phantom_camera/examples/textures/2D/sign_prompt.png" id="1_tftrk"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="2_y5454"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_r4h3u"] +bg_color = Color(0.470588, 0.6, 0.45098, 1) +corner_radius_top_right = 47 +corner_radius_bottom_left = 40 + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -273.568 +offset_top = 47.0 +offset_right = 273.568 +offset_bottom = 413.0 +grow_horizontal = 2 +texture = ExtResource("1_tftrk") +metadata/_edit_group_ = true + +[node name="Label" type="Label" parent="TextureRect"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 25.0 +offset_top = 64.0 +offset_right = -25.0 +offset_bottom = -88.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0.207843, 0.0470588, 0.0666667, 1) +theme_override_fonts/font = ExtResource("2_y5454") +theme_override_font_sizes/font_size = 62 +text = "Stay Awhile +and read" +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true + +[node name="Panel" type="Panel" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -240.0 +offset_right = 240.0 +offset_bottom = 200.0 +grow_horizontal = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_r4h3u") +metadata/_edit_use_anchors_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="Label2" type="Label" parent="Panel/VBoxContainer"] +layout_mode = 2 +text = "Example Textsdadassa +" +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/addons/phantom_camera/fonts/Nunito-Black.ttf b/addons/phantom_camera/fonts/Nunito-Black.ttf new file mode 100644 index 0000000..1081731 Binary files /dev/null and b/addons/phantom_camera/fonts/Nunito-Black.ttf differ diff --git a/addons/phantom_camera/fonts/Nunito-Black.ttf.import b/addons/phantom_camera/fonts/Nunito-Black.ttf.import new file mode 100644 index 0000000..310d096 --- /dev/null +++ b/addons/phantom_camera/fonts/Nunito-Black.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://c4mm3of2mc8o5" +path="res://.godot/imported/Nunito-Black.ttf-2a374efbc207a97a99b8c70bdc4b7cbb.fontdata" + +[deps] + +source_file="res://addons/phantom_camera/fonts/Nunito-Black.ttf" +dest_files=["res://.godot/imported/Nunito-Black.ttf-2a374efbc207a97a99b8c70bdc4b7cbb.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/phantom_camera/fonts/Nunito-Regular.ttf b/addons/phantom_camera/fonts/Nunito-Regular.ttf new file mode 100644 index 0000000..dfd0fcb Binary files /dev/null and b/addons/phantom_camera/fonts/Nunito-Regular.ttf differ diff --git a/addons/phantom_camera/fonts/Nunito-Regular.ttf.import b/addons/phantom_camera/fonts/Nunito-Regular.ttf.import new file mode 100644 index 0000000..29ea6f5 --- /dev/null +++ b/addons/phantom_camera/fonts/Nunito-Regular.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dve7mgsjik4dg" +path="res://.godot/imported/Nunito-Regular.ttf-b6054d499efa1a10921004862b1e217a.fontdata" + +[deps] + +source_file="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" +dest_files=["res://.godot/imported/Nunito-Regular.ttf-b6054d499efa1a10921004862b1e217a.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/phantom_camera/gizmos/custom_gizmo.gd b/addons/phantom_camera/gizmos/custom_gizmo.gd new file mode 100644 index 0000000..f094f7b --- /dev/null +++ b/addons/phantom_camera/gizmos/custom_gizmo.gd @@ -0,0 +1,93 @@ +extends EditorNode3DGizmoPlugin +class_name CustomPluginGizmo + +var _gizmo_name +var gizmo_name: String: set = set_gizmo_name + +var _gizmo_icon: Texture2D +var gizmo_icon: Texture2D: set = set_gizmo_icon + +var _gizmo_spatial_script: Script +var gizmo_spatial_script: Script: set = set_gizmo_spatial_script + +var _gizmo_scale: float = 0.035 + + +func set_gizmo_name(name: String) -> void: + _gizmo_name = name + + +func set_gizmo_icon(icon: Texture2D) -> void: + _gizmo_icon = icon + + +func set_gizmo_spatial_script(script: Script) -> void: + _gizmo_spatial_script = script + + +func _get_gizmo_name() -> String: + return _gizmo_name + +func _has_gizmo(spatial: Node3D): + return spatial.get_script() == _gizmo_spatial_script + + +func _init() -> void: + create_icon_material(_gizmo_name, _gizmo_icon, false, Color.WHITE) + create_material("main", Color8(252, 127, 127, 255)) + + +func _draw_frustum() -> PackedVector3Array: + var lines = PackedVector3Array() + + var dis: float = 0.25 + var width: float = dis * 1.25 + var len: float = dis * 1.5 + + # Straight line +# lines.push_back(Vector3(0, 0, 0)) +# lines.push_back(Vector3(0, 0, -len)) + + + # Trapezoid + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(-width, dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(width, dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(-width, -dis, -len)) + + lines.push_back(Vector3(0, 0, 0)) + lines.push_back(Vector3(width, -dis, -len)) + + + # Square + ## Left + lines.push_back(Vector3(-width, dis, -len)) + lines.push_back(Vector3(-width, -dis, -len)) + + ## Bottom + lines.push_back(Vector3(-width, -dis, -len)) + lines.push_back(Vector3(width, -dis, -len)) + + ## Right + lines.push_back(Vector3(width, -dis, -len)) + lines.push_back(Vector3(width, dis, -len)) + + ## Top + lines.push_back(Vector3(width, dis, -len)) + lines.push_back(Vector3(-width, dis, -len)) + + return lines + + +func _redraw(gizmo: EditorNode3DGizmo): + gizmo.clear() + + var icon: Material = get_material(_gizmo_name, gizmo) + gizmo.add_unscaled_billboard(icon, _gizmo_scale) + + var material = get_material("main", gizmo) + gizmo.add_lines(_draw_frustum(), material) diff --git a/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd b/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd new file mode 100644 index 0000000..bef8180 --- /dev/null +++ b/addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd @@ -0,0 +1,11 @@ +extends CustomPluginGizmo + +var _spatial_script: Script = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd") +var _icon: Texture2D = preload("res://addons/phantom_camera/icons/phantom_camera_gizmo.svg") + + +func _init() -> void: + set_gizmo_name("PhantomCamera") + set_gizmo_spatial_script(_spatial_script) + set_gizmo_icon(_icon) + super() diff --git a/addons/phantom_camera/icons/misc/PriorityOverride.svg b/addons/phantom_camera/icons/misc/PriorityOverride.svg new file mode 100644 index 0000000..de7fd01 --- /dev/null +++ b/addons/phantom_camera/icons/misc/PriorityOverride.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/addons/phantom_camera/icons/misc/PriorityOverride.svg.import b/addons/phantom_camera/icons/misc/PriorityOverride.svg.import new file mode 100644 index 0000000..d78acf5 --- /dev/null +++ b/addons/phantom_camera/icons/misc/PriorityOverride.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy8eifa6aw2en" +path="res://.godot/imported/PriorityOverride.svg-e76e07f4bbd98169f119e17fe5f2f03f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/misc/PriorityOverride.svg" +dest_files=["res://.godot/imported/PriorityOverride.svg-e76e07f4bbd98169f119e17fe5f2f03f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/phantom_camera_2d.svg b/addons/phantom_camera/icons/phantom_camera_2d.svg new file mode 100644 index 0000000..0c67805 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_2d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_2d.svg.import b/addons/phantom_camera/icons/phantom_camera_2d.svg.import new file mode 100644 index 0000000..b10d490 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_2d.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmcvv0edbbpv4" +path="res://.godot/imported/phantom_camera_2d.svg-e5483cbc858fc5f95f7210b1649dff0d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_2d.svg" +dest_files=["res://.godot/imported/phantom_camera_2d.svg-e5483cbc858fc5f95f7210b1649dff0d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=true diff --git a/addons/phantom_camera/icons/phantom_camera_3d.svg b/addons/phantom_camera/icons/phantom_camera_3d.svg new file mode 100644 index 0000000..db18730 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_3d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_3d.svg.import b/addons/phantom_camera/icons/phantom_camera_3d.svg.import new file mode 100644 index 0000000..6542a24 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_3d.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bf8bxgxx71qki" +path="res://.godot/imported/phantom_camera_3d.svg-41ed612e834470377fb56eebffa083fe.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_3d.svg" +dest_files=["res://.godot/imported/phantom_camera_3d.svg-41ed612e834470377fb56eebffa083fe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=true diff --git a/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg new file mode 100644 index 0000000..282adf2 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import new file mode 100644 index 0000000..d880530 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkpwb4k1bkbvn" +path="res://.godot/imported/phantom_camera_camera_3d_resource.svg-f8bf8d1a5b7442fd6933bfbed999d57d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg" +dest_files=["res://.godot/imported/phantom_camera_camera_3d_resource.svg-f8bf8d1a5b7442fd6933bfbed999d57d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/phantom_camera_gizmo.svg b/addons/phantom_camera/icons/phantom_camera_gizmo.svg new file mode 100644 index 0000000..d791ce0 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_gizmo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import b/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import new file mode 100644 index 0000000..7b49608 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_gizmo.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://e36npe2rbxyg" +path.s3tc="res://.godot/imported/phantom_camera_gizmo.svg-ba1aacb9b1c5f4ef401d3bd3697a542b.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_gizmo.svg" +dest_files=["res://.godot/imported/phantom_camera_gizmo.svg-ba1aacb9b1c5f4ef401d3bd3697a542b.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/phantom_camera_glow_logo.png b/addons/phantom_camera/icons/phantom_camera_glow_logo.png new file mode 100644 index 0000000..41ad8de Binary files /dev/null and b/addons/phantom_camera/icons/phantom_camera_glow_logo.png differ diff --git a/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import b/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import new file mode 100644 index 0000000..d68be86 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_glow_logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjli3p2b8mfyh" +path="res://.godot/imported/phantom_camera_glow_logo.png-078f944973b55b32029ba02980211fe0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_glow_logo.png" +dest_files=["res://.godot/imported/phantom_camera_glow_logo.png-078f944973b55b32029ba02980211fe0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/icons/phantom_camera_host.svg b/addons/phantom_camera/icons/phantom_camera_host.svg new file mode 100644 index 0000000..4ff3ada --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_host.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_host.svg.import b/addons/phantom_camera/icons/phantom_camera_host.svg.import new file mode 100644 index 0000000..430d67d --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_host.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://5fatldiu7dd5" +path="res://.godot/imported/phantom_camera_host.svg-3150f8f2d82ca9ecab9a3a415da21c5b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_host.svg" +dest_files=["res://.godot/imported/phantom_camera_host.svg-3150f8f2d82ca9ecab9a3a415da21c5b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=true diff --git a/addons/phantom_camera/icons/phantom_camera_logo.png b/addons/phantom_camera/icons/phantom_camera_logo.png new file mode 100644 index 0000000..bc43e56 Binary files /dev/null and b/addons/phantom_camera/icons/phantom_camera_logo.png differ diff --git a/addons/phantom_camera/icons/phantom_camera_logo.png.import b/addons/phantom_camera/icons/phantom_camera_logo.png.import new file mode 100644 index 0000000..6f51cf4 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc0wmici0eic8" +path="res://.godot/imported/phantom_camera_logo.png-8b8d347b5e4800c86cd8095d030a3e5a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_logo.png" +dest_files=["res://.godot/imported/phantom_camera_logo.png-8b8d347b5e4800c86cd8095d030a3e5a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/phantom_camera/icons/phantom_camera_tween.svg b/addons/phantom_camera/icons/phantom_camera_tween.svg new file mode 100644 index 0000000..6956fb5 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_tween.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/phantom_camera/icons/phantom_camera_tween.svg.import b/addons/phantom_camera/icons/phantom_camera_tween.svg.import new file mode 100644 index 0000000..3db67fb --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_tween.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dphl04mdf3220" +path="res://.godot/imported/phantom_camera_tween.svg-16faced08ef4a5f3458264d894230dbd.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_tween.svg" +dest_files=["res://.godot/imported/phantom_camera_tween.svg-16faced08ef4a5f3458264d894230dbd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=true diff --git a/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg new file mode 100644 index 0000000..6d3bcd4 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import new file mode 100644 index 0000000..c182784 --- /dev/null +++ b/addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4j4hrb7yusyq" +path="res://.godot/imported/phantom_camera_updater_panel_icon.svg-19823e6cbee8115f8b2554d0ee6e79db.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg" +dest_files=["res://.godot/imported/phantom_camera_updater_panel_icon.svg-19823e6cbee8115f8b2554d0ee6e79db.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg new file mode 100644 index 0000000..59efad4 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import new file mode 100644 index 0000000..e8fb35d --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccnsrg8hq74p2" +path="res://.godot/imported/Camera2DIcon.svg-300e6f57281180711c5ecf391104d4ba.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg" +dest_files=["res://.godot/imported/Camera2DIcon.svg-300e6f57281180711c5ecf391104d4ba.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg new file mode 100644 index 0000000..2366c3f --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import new file mode 100644 index 0000000..79708e2 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkiefpjsrj37n" +path="res://.godot/imported/Camera3DIcon.svg-4805c46004db1c89cc9443dd740693f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg" +dest_files=["res://.godot/imported/Camera3DIcon.svg-4805c46004db1c89cc9443dd740693f5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg new file mode 100644 index 0000000..87e3f79 --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import new file mode 100644 index 0000000..364c4ed --- /dev/null +++ b/addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk7omm0x44suj" +path="res://.godot/imported/SceneTypesIcon.svg-66e2255bd3398007bec03a5cbfa4d0aa.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg" +dest_files=["res://.godot/imported/SceneTypesIcon.svg-66e2255bd3398007bec03a5cbfa4d0aa.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd b/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd new file mode 100644 index 0000000..d5a0d22 --- /dev/null +++ b/addons/phantom_camera/inspector/phantom_camera_inspector_plugin.gd @@ -0,0 +1,46 @@ +@tool +extends EditorInspectorPlugin + +#var _phantom_camera_script: Script = preload("res://addons/phantom_camera/scripts/phantom_camera.gd") + + +# TODO - Enable again once work is resumed for inspector based tasks + +#func _can_handle(object) -> bool: +# return object is _phantom_camera_script + + +func _parse_category(object: Object, category: String) -> void: + + var _margin_container: MarginContainer = MarginContainer.new() + var _margin_v: float = 20 + _margin_container.add_theme_constant_override("margin_left", 10) + _margin_container.add_theme_constant_override("margin_top", _margin_v) + _margin_container.add_theme_constant_override("margin_right", 10) + _margin_container.add_theme_constant_override("margin_bottom", _margin_v) + add_custom_control(_margin_container) + + var _vbox_container: VBoxContainer = VBoxContainer.new() + _margin_container.add_child(_vbox_container) + + var align_with_view_button = Button.new() + align_with_view_button.connect("pressed", _align_camera_with_view.bind(object)) + align_with_view_button.set_custom_minimum_size(Vector2(0, 60)) + align_with_view_button.set_text("Align with view") + _vbox_container.add_child(align_with_view_button) + + var preview_camera_button = Button.new() + preview_camera_button.connect("pressed", _preview_camera.bind(object)) + preview_camera_button.set_custom_minimum_size(Vector2(0, 60)) + preview_camera_button.set_text("Preview Camera") + _vbox_container.add_child(preview_camera_button) + + + +func _align_camera_with_view(object: Object) -> void: + print("Aligning camera with view") + print(object) + +func _preview_camera(object: Object) -> void: + print("Previewing camera") + print(object) diff --git a/addons/phantom_camera/panel/editor.gd b/addons/phantom_camera/panel/editor.gd new file mode 100644 index 0000000..9f52b8f --- /dev/null +++ b/addons/phantom_camera/panel/editor.gd @@ -0,0 +1,11 @@ +@tool +extends VBoxContainer + +var editor_plugin: EditorPlugin + +@onready var updater: Control = %UpdateButton +@onready var viewfinder: Control = %ViewfinderPanel + + +func _ready(): + updater.editor_plugin = editor_plugin diff --git a/addons/phantom_camera/panel/editor.tscn b/addons/phantom_camera/panel/editor.tscn new file mode 100644 index 0000000..da1574c --- /dev/null +++ b/addons/phantom_camera/panel/editor.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://cfdoaceoosi1w"] + +[ext_resource type="Script" path="res://addons/phantom_camera/panel/editor.gd" id="1_86hp7"] +[ext_resource type="PackedScene" uid="uid://cuqkqsp3ikv5u" path="res://addons/phantom_camera/panel/updater/update_button.tscn" id="1_oowcd"] +[ext_resource type="PackedScene" uid="uid://dbkr3d716wtx0" path="res://addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn" id="2_xecnk"] + +[node name="EditorPanel" type="VBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_86hp7") + +[node name="UpdateButton" parent="." instance=ExtResource("1_oowcd")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 1 + +[node name="ViewfinderPanel" parent="." instance=ExtResource("2_xecnk")] +unique_name_in_owner = true +layout_mode = 2 diff --git a/addons/phantom_camera/panel/updater/download_update_panel.tscn b/addons/phantom_camera/panel/updater/download_update_panel.tscn new file mode 100644 index 0000000..240ed5f --- /dev/null +++ b/addons/phantom_camera/panel/updater/download_update_panel.tscn @@ -0,0 +1,253 @@ +[gd_scene load_steps=15 format=3 uid="uid://b25fl4usw0nlp"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/updater/download_update_panel.gd" id="1_sx5xq"] +[ext_resource type="Texture2D" uid="uid://cc0wmici0eic8" path="res://addons/phantom_camera/icons/phantom_camera_logo.png" id="2_f3yo7"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="3_h8uk3"] +[ext_resource type="FontFile" uid="uid://dve7mgsjik4dg" path="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" id="4_gwh4i"] +[ext_resource type="Texture2D" uid="uid://censw3w53gldn" path="res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png" id="5_bonti"] + +[sub_resource type="ImageTexture" id="ImageTexture_sjwi2"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_insma"] +bg_color = Color(0.0190018, 0.21903, 0.16997, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.0980392, 0.572549, 0.458824, 1) +border_blend = true +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8m63d"] +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.105882, 0.619608, 0.498039, 1) +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yn22d"] +bg_color = Color(0.0117647, 0.164706, 0.12549, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.0980392, 0.572549, 0.458824, 1) +border_blend = true +corner_radius_bottom_right = 12 +corner_radius_bottom_left = 12 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_djsbc"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xtrn6"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_o12j0"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_buptb"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_g3tf0"] + +[node name="DownloadUpdatePanel" type="Control"] +custom_minimum_size = Vector2(300, 350) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = -61.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_sx5xq") + +[node name="DownloadHTTPRequest" type="HTTPRequest" parent="."] +unique_name_in_owner = true + +[node name="Timer" type="Timer" parent="DownloadHTTPRequest"] +one_shot = true + +[node name="VBox" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 2 + +[node name="VBoxContainer2" type="VBoxContainer" parent="VBox"] +layout_mode = 2 +theme_override_constants/separation = -20 + +[node name="MarginContainer" type="MarginContainer" parent="VBox/VBoxContainer2"] +layout_mode = 2 +theme_override_constants/margin_top = 12 + +[node name="Logo" type="TextureRect" parent="VBox/VBoxContainer2/MarginContainer"] +unique_name_in_owner = true +clip_contents = true +custom_minimum_size = Vector2(300, 160) +layout_mode = 2 +texture = ExtResource("2_f3yo7") +expand_mode = 3 +stretch_mode = 5 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/VBoxContainer2"] +layout_mode = 2 +theme_override_constants/separation = -5 + +[node name="NameLabel" type="Label" parent="VBox/VBoxContainer2/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 32 +text = "Phantom Camera" +horizontal_alignment = 1 + +[node name="DownloadVersionLabel" type="Label" parent="VBox/VBoxContainer2/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("4_gwh4i") +theme_override_font_sizes/font_size = 18 +text = "v1.2.3 is available for download." +horizontal_alignment = 1 + +[node name="CurrentVersionLabel" type="Label" parent="VBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +theme_override_fonts/font = ExtResource("4_gwh4i") +text = "Current version: 0.0.0" +horizontal_alignment = 1 + +[node name="Center2" type="CenterContainer" parent="VBox"] +layout_mode = 2 + +[node name="NotesButton" type="LinkButton" parent="VBox/Center2"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.917647, 0.631373, 0.368627, 1) +theme_override_colors/font_hover_color = Color(0.721569, 0.454902, 0.192157, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +text = "Release Notes" + +[node name="Center" type="CenterContainer" parent="VBox"] +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/Center"] +layout_mode = 2 + +[node name="BreakingLabel" type="Label" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +theme_override_colors/font_color = Color(0.72549, 0.227451, 0.34902, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +text = "Potential Breaking Changes +in new release" +horizontal_alignment = 1 +uppercase = true + +[node name="BreakingMarginContainer" type="MarginContainer" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBox/Center/VBoxContainer/BreakingMarginContainer"] +layout_mode = 2 + +[node name="RichTextLabel2" type="RichTextLabel" parent="VBox/Center/VBoxContainer/BreakingMarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_fonts/normal_font = ExtResource("4_gwh4i") +theme_override_fonts/bold_font = ExtResource("3_h8uk3") +theme_override_fonts/mono_font = ExtResource("3_h8uk3") +theme_override_font_sizes/normal_font_size = 18 +theme_override_font_sizes/bold_font_size = 14 +theme_override_font_sizes/mono_font_size = 12 +bbcode_enabled = true +text = "[center][b]I am prepared for any breaking +changes that may occur from this update[/b][/center]" +fit_content = true + +[node name="BreakingOptionButton" type="OptionButton" parent="VBox/Center/VBoxContainer/BreakingMarginContainer/VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +mouse_default_cursor_shape = 2 +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 18 +theme_override_icons/arrow = SubResource("ImageTexture_sjwi2") +theme_override_styles/normal = SubResource("StyleBoxFlat_insma") +theme_override_styles/hover = SubResource("StyleBoxFlat_8m63d") +theme_override_styles/pressed = SubResource("StyleBoxFlat_yn22d") +alignment = 1 +item_count = 2 +selected = 0 +popup/item_0/text = "Confirm choice" +popup/item_0/id = 0 +popup/item_1/text = "Yes, I am prepared" +popup/item_1/id = 1 + +[node name="DownloadButton" type="Button" parent="VBox/Center/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(240, 90) +layout_mode = 2 +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_djsbc") +theme_override_styles/hover = SubResource("StyleBoxEmpty_xtrn6") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_o12j0") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_buptb") +theme_override_styles/focus = SubResource("StyleBoxEmpty_g3tf0") + +[node name="DownloadButtonBG" type="NinePatchRect" parent="VBox/Center/VBoxContainer/DownloadButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_bonti") +patch_margin_left = 38 +patch_margin_top = 37 +patch_margin_right = 38 +patch_margin_bottom = 39 + +[node name="UpdateLabel" type="Label" parent="VBox/Center/VBoxContainer/DownloadButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 14 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_top = -14.5 +offset_bottom = 14.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_h8uk3") +theme_override_font_sizes/font_size = 20 +text = "Update" +horizontal_alignment = 1 +uppercase = true + +[node name="MarginContainer" type="MarginContainer" parent="VBox"] +layout_mode = 2 +theme_override_constants/margin_top = 10 + +[node name="RichTextLabel" type="RichTextLabel" parent="VBox/MarginContainer"] +layout_mode = 2 +theme_override_fonts/normal_font = ExtResource("4_gwh4i") +theme_override_fonts/mono_font = ExtResource("3_h8uk3") +theme_override_font_sizes/normal_font_size = 12 +theme_override_font_sizes/mono_font_size = 12 +bbcode_enabled = true +text = "[center]The updater can be disabled within: +[code]Project Settings / Phantom Camera / Updater / Enable Updater[/code][/center]" +fit_content = true + +[connection signal="pressed" from="VBox/Center2/NotesButton" to="." method="_on_notes_button_pressed"] diff --git a/addons/phantom_camera/panel/updater/update_button.tscn b/addons/phantom_camera/panel/updater/update_button.tscn new file mode 100644 index 0000000..00c80de --- /dev/null +++ b/addons/phantom_camera/panel/updater/update_button.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=10 format=3 uid="uid://cuqkqsp3ikv5u"] + +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="1_5e5k4"] +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/updater/update_button.gd" id="1_xtaw5"] +[ext_resource type="Texture2D" uid="uid://d4j4hrb7yusyq" path="res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg" id="2_c4d83"] +[ext_resource type="PackedScene" uid="uid://b25fl4usw0nlp" path="res://addons/phantom_camera/panel/updater/download_update_panel.tscn" id="2_vtgcx"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_c7fd1"] +content_margin_left = 10.0 +content_margin_top = 4.0 +content_margin_right = 10.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0980392, 0.415686, 0.341176, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_y83dj"] +content_margin_left = 10.0 +content_margin_top = 4.0 +content_margin_right = 10.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.960784, 0.960784, 0.960784, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_slf6e"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_lekqh"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dr4n4"] +content_margin_bottom = 20.0 +bg_color = Color(0.0784314, 0.109804, 0.129412, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) + +[node name="UpdateButton" type="Button"] +visible = false +offset_left = 1.0 +offset_right = 149.0 +offset_bottom = 28.0 +size_flags_vertical = 3 +theme_override_colors/font_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_colors/font_hover_color = Color(0.939288, 0.917743, 0.892615, 1) +theme_override_colors/icon_normal_color = Color(0.960784, 0.960784, 0.960784, 1) +theme_override_fonts/font = ExtResource("1_5e5k4") +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_c7fd1") +theme_override_styles/hover = SubResource("StyleBoxFlat_y83dj") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_slf6e") +theme_override_styles/focus = SubResource("StyleBoxEmpty_lekqh") +text = "Update available" +icon = ExtResource("2_c4d83") +script = ExtResource("1_xtaw5") + +[node name="HTTPRequest" type="HTTPRequest" parent="."] +unique_name_in_owner = true + +[node name="DownloadDialog" type="AcceptDialog" parent="."] +unique_name_in_owner = true +transparent_bg = true +title = "New Update" +initial_position = 2 +size = Vector2i(450, 480) +transient = false +unresizable = true +borderless = true +keep_title_visible = false +content_scale_mode = 1 +theme_override_constants/buttons_separation = 30 +theme_override_styles/panel = SubResource("StyleBoxFlat_dr4n4") +ok_button_text = "Close" + +[node name="DownloadUpdatePanel" parent="DownloadDialog" instance=ExtResource("2_vtgcx")] +unique_name_in_owner = true +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -80.0 + +[node name="NeedsReloadDialog" type="ConfirmationDialog" parent="."] +unique_name_in_owner = true + +[node name="UpdateFailedDialog" type="AcceptDialog" parent="."] +unique_name_in_owner = true diff --git a/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres b/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres new file mode 100644 index 0000000..7353299 --- /dev/null +++ b/addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://dpa7yvxlq043a"] + +[resource] +bg_color = Color(0.227451, 0.72549, 0.603922, 0.2) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_detail = 1 +expand_margin_left = 1.0 +expand_margin_top = 1.0 +expand_margin_right = 1.0 +expand_margin_bottom = 1.0 diff --git a/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn b/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn new file mode 100644 index 0000000..5d26888 --- /dev/null +++ b/addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn @@ -0,0 +1,445 @@ +[gd_scene load_steps=22 format=3 uid="uid://dbkr3d716wtx0"] + +[ext_resource type="Script" path="res://addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd" id="1_utvi8"] +[ext_resource type="StyleBox" uid="uid://dpa7yvxlq043a" path="res://addons/phantom_camera/panel/viewfinder/deadzone_style_box.tres" id="2_uabt4"] +[ext_resource type="FontFile" uid="uid://c4mm3of2mc8o5" path="res://addons/phantom_camera/fonts/Nunito-Black.ttf" id="3_li3i3"] +[ext_resource type="Texture2D" uid="uid://5fatldiu7dd5" path="res://addons/phantom_camera/icons/phantom_camera_host.svg" id="4_lcg1p"] +[ext_resource type="FontFile" uid="uid://dve7mgsjik4dg" path="res://addons/phantom_camera/fonts/Nunito-Regular.ttf" id="5_4jhax"] +[ext_resource type="Texture2D" uid="uid://dy8eifa6aw2en" path="res://addons/phantom_camera/icons/misc/PriorityOverride.svg" id="6_ptuth"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fle8t"] +bg_color = Color(0.227451, 0.72549, 0.603922, 0.2) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_detail = 1 +expand_margin_left = 1.0 +expand_margin_top = 1.0 +expand_margin_right = 1.0 +expand_margin_bottom = 1.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xmo1t"] +draw_center = false +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.745098, 0.858824, 0.380392, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_q7vs4"] +bg_color = Color(0.929412, 0.87451, 0.619608, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0, 0, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_iho1a"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_obaj6"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fsxik"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.129412, 0.407843, 0.337255, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.227451, 0.72549, 0.603922, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yh38y"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.129412, 0.407843, 0.337255, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.552941, 0.647059, 0.952941, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gci88"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0.180392, 0.576471, 0.482353, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4b76l"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_g5wua"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x4bx8"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_agqdu"] +bg_color = Color(0.72549, 0.227451, 0.34902, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ja3vm"] +bg_color = Color(0.53, 0.1643, 0.255725, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mk273"] +bg_color = Color(0.43, 0.1333, 0.207475, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_840sd"] + +[node name="ViewfinderPanel" type="Control"] +clip_contents = true +custom_minimum_size = Vector2(0, 300) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +mouse_filter = 2 +script = ExtResource("1_utvi8") + +[node name="FramedViewfinder" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +metadata/_edit_lock_ = true + +[node name="SubViewportContainer" type="SubViewportContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="FramedViewfinder/SubViewportContainer"] +unique_name_in_owner = true +handle_input_locally = false +gui_disable_input = true +size = Vector2i(1152, 648) +size_2d_override_stretch = true +render_target_update_mode = 4 + +[node name="Camera2D" type="Camera2D" parent="FramedViewfinder/SubViewportContainer/SubViewport"] +unique_name_in_owner = true +editor_draw_screen = false + +[node name="DeadZoneHBoxContainer" type="HBoxContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 0 + +[node name="DeadZoneLeftHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 0 + +[node name="DeadZoneLeftTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneLeftCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneLeftBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneLeftHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneCenterHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_constants/separation = 0 + +[node name="DeadZoneCenterTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneCenterCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_fle8t") + +[node name="DeadZoneCenterBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneCenterHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightHBoxContainer" type="VBoxContainer" parent="FramedViewfinder/DeadZoneHBoxContainer"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 0 + +[node name="DeadZoneRightTopPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightCenterPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="DeadZoneRightBottomPanel" type="Panel" parent="FramedViewfinder/DeadZoneHBoxContainer/DeadZoneRightHBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = ExtResource("2_uabt4") + +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="FramedViewfinder"] +unique_name_in_owner = true +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +ratio = 1.77778 + +[node name="CameraViewportPanel" type="Panel" parent="FramedViewfinder/AspectRatioContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_xmo1t") + +[node name="TargetPoint" type="Panel" parent="FramedViewfinder/AspectRatioContainer/CameraViewportPanel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -3.0 +offset_top = -3.0 +offset_right = 3.0 +offset_bottom = 3.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_q7vs4") + +[node name="NoSupportMsg" type="Label" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -8.0 +offset_bottom = -8.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 24 +theme_override_styles/normal = SubResource("StyleBoxEmpty_iho1a") +text = "Control scenes are not supported" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="EmptyStateControl" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="BGColorRect" type="ColorRect" parent="EmptyStateControl"] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) +metadata/_edit_lock_ = true + +[node name="VBoxContainer" type="VBoxContainer" parent="EmptyStateControl"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -200.0 +offset_top = -112.0 +offset_right = 200.0 +offset_bottom = 112.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="EmptyStateIcon" type="TextureRect" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 64) +layout_mode = 2 +texture = ExtResource("4_lcg1p") +expand_mode = 1 +stretch_mode = 5 + +[node name="EmptyStateText" type="RichTextLabel" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_colors/default_color = Color(1, 1, 1, 1) +theme_override_fonts/normal_font = ExtResource("5_4jhax") +theme_override_fonts/bold_font = ExtResource("3_li3i3") +theme_override_font_sizes/normal_font_size = 24 +theme_override_font_sizes/bold_font_size = 24 +theme_override_styles/focus = SubResource("StyleBoxEmpty_obaj6") +theme_override_styles/normal = SubResource("StyleBoxEmpty_iho1a") +bbcode_enabled = true +text = "[center][b]NodeType[/b] Description [/center]" +fit_content = true + +[node name="AddNodeButton" type="Button" parent="EmptyStateControl/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(400, 54) +layout_mode = 2 +size_flags_horizontal = 4 +focus_mode = 0 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 24 +theme_override_styles/normal = SubResource("StyleBoxFlat_fsxik") +theme_override_styles/hover = SubResource("StyleBoxFlat_yh38y") +theme_override_styles/pressed = SubResource("StyleBoxFlat_gci88") +theme_override_styles/focus = SubResource("StyleBoxEmpty_4b76l") + +[node name="AddNodeTypeText" type="RichTextLabel" parent="EmptyStateControl/VBoxContainer/AddNodeButton"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 9.0 +offset_bottom = -11.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_colors/default_color = Color(1, 1, 1, 1) +theme_override_fonts/normal_font = ExtResource("5_4jhax") +theme_override_fonts/bold_font = ExtResource("3_li3i3") +theme_override_font_sizes/normal_font_size = 24 +theme_override_font_sizes/bold_font_size = 24 +theme_override_styles/focus = SubResource("StyleBoxEmpty_g5wua") +theme_override_styles/normal = SubResource("StyleBoxEmpty_x4bx8") +bbcode_enabled = true +text = "[center]Add [img=32]res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg[/img] [b]{NodeType}[/b][/center]" +scroll_active = false + +[node name="PriorityOverrideButton" type="Button" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +offset_left = 5.0 +offset_top = 5.0 +offset_right = 165.0 +offset_bottom = 57.0 +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_agqdu") +theme_override_styles/hover = SubResource("StyleBoxFlat_ja3vm") +theme_override_styles/pressed = SubResource("StyleBoxFlat_mk273") +theme_override_styles/focus = SubResource("StyleBoxEmpty_840sd") + +[node name="PriorityOverrideIcon" type="TextureRect" parent="PriorityOverrideButton"] +layout_mode = 1 +offset_left = 8.0 +offset_top = 4.0 +offset_right = 32.0 +offset_bottom = 28.0 +texture = ExtResource("6_ptuth") +expand_mode = 1 + +[node name="PriorityOverrideByLabel" type="Label" parent="PriorityOverrideButton"] +layout_mode = 0 +offset_left = 30.0 +offset_top = 1.0 +offset_right = 140.0 +offset_bottom = 24.0 +theme_override_fonts/font = ExtResource("3_li3i3") +theme_override_font_sizes/font_size = 14 +text = "OVERRIDDEN BY" +vertical_alignment = 1 + +[node name="PriorityOverrideNameLabel" type="Label" parent="PriorityOverrideButton"] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 6.0 +offset_top = 21.0 +offset_right = 153.0 +offset_bottom = 44.0 +theme_override_fonts/font = ExtResource("5_4jhax") +theme_override_font_sizes/font_size = 14 +text = "PCam_Name +" +vertical_alignment = 1 +text_overrun_behavior = 3 diff --git a/addons/phantom_camera/plugin.cfg b/addons/phantom_camera/plugin.cfg new file mode 100644 index 0000000..a443f15 --- /dev/null +++ b/addons/phantom_camera/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Phantom Camera" +description="Control the movement and dynamically tween 2D & 3D cameras positions. Built for Godot 4. Inspired by Cinemachine." +author="Marcus Skov" +version="0.7.2" +script="plugin.gd" diff --git a/addons/phantom_camera/plugin.gd b/addons/phantom_camera/plugin.gd new file mode 100644 index 0000000..3f58e98 --- /dev/null +++ b/addons/phantom_camera/plugin.gd @@ -0,0 +1,123 @@ +@tool +extends EditorPlugin + +#region Constants + +const PCAM_HOST: String = "PhantomCameraHost" +const PCAM_2D: String = "PhantomCamera2D" +const PCAM_3D: String = "PhantomCamera3D" + +const Pcam3DPlugin = preload("res://addons/phantom_camera/gizmos/phantom_camera_gizmo_plugin_3d.gd") + +const EditorPanel = preload("res://addons/phantom_camera/panel/editor.tscn") + +const updater_constants := preload("res://addons/phantom_camera/scripts/panel/updater/updater_constants.gd") + +const PHANTOM_CAMERA_MANAGER: StringName = "PhantomCameraManager" + +#endregion + + +#region Variables + +var pcam_3D_gizmo_plugin = Pcam3DPlugin.new() + +var editor_panel_instance: Control +var panel_button: Button +#var viewfinder_panel_instance + +#endregion + + +#region Private Functions + +func _enter_tree() -> void: + # Phantom Camera Nodes + add_custom_type(PCAM_2D, "Node2D", preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + add_custom_type(PCAM_3D, "Node3D", preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + add_custom_type(PCAM_HOST, "Node", preload("res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd"), preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg")) + + add_autoload_singleton(PHANTOM_CAMERA_MANAGER, "res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd") + + # Phantom Camera 3D Gizmo + add_node_3d_gizmo_plugin(pcam_3D_gizmo_plugin) + + # TODO - Should be disabled unless in editor + # Viewfinder + editor_panel_instance = EditorPanel.instantiate() + editor_panel_instance.editor_plugin = self + panel_button = add_control_to_bottom_panel(editor_panel_instance, "Phantom Camera") + + # Trigger events in the viewfinder whenever + panel_button.toggled.connect(_btn_toggled) + + scene_changed.connect(editor_panel_instance.viewfinder.scene_changed) + + scene_changed.connect(_scene_changed) + + ## Sets Updater Disabling option for non-forked projects + if not FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn"): + if not ProjectSettings.has_setting(updater_constants.setting_updater_enabled): + ProjectSettings.set_setting(updater_constants.setting_updater_enabled, true) + ProjectSettings.set_initial_value(updater_constants.setting_updater_enabled, true) + + ## Adds Release console log disabler + if not ProjectSettings.has_setting(updater_constants.setting_updater_notify_release): + ProjectSettings.set_setting(updater_constants.setting_updater_notify_release, true) + ProjectSettings.set_initial_value(updater_constants.setting_updater_notify_release, true) + + ## Enables or disable + if not ProjectSettings.has_setting("phantom_camera/tips/show_jitter_tips"): + ProjectSettings.set_setting("phantom_camera/tips/show_jitter_tips", true) + ProjectSettings.set_initial_value("phantom_camera/tips/show_jitter_tips", true) + + +func _btn_toggled(toggled_on: bool): + if toggled_on: + editor_panel_instance.viewfinder.viewfinder_visible = true + editor_panel_instance.viewfinder.visibility_check() + else: + editor_panel_instance.viewfinder.viewfinder_visible = false + + +func _exit_tree() -> void: + remove_custom_type(PCAM_2D) + remove_custom_type(PCAM_3D) + remove_custom_type(PCAM_HOST) + + remove_node_3d_gizmo_plugin(pcam_3D_gizmo_plugin) + + remove_control_from_bottom_panel(editor_panel_instance) + editor_panel_instance.queue_free() +# if framed_viewfinder_panel_instance: + scene_changed.disconnect(_scene_changed) + + remove_autoload_singleton(PHANTOM_CAMERA_MANAGER) + + panel_button.toggled.disconnect(_btn_toggled) + scene_changed.disconnect(editor_panel_instance.viewfinder.scene_changed) + scene_changed.disconnect(_scene_changed) + +#func _has_main_screen(): +# return true; + + +func _make_visible(visible): + if editor_panel_instance: + editor_panel_instance.set_visible(visible) + + +func _scene_changed(scene_root: Node) -> void: + editor_panel_instance.viewfinder.scene_changed(scene_root) + +#endregion + + +#region Public Functions + +func get_version() -> String: + var config: ConfigFile = ConfigFile.new() + config.load(get_script().resource_path.get_base_dir() + "/plugin.cfg") + return config.get_value("plugin", "version") + +#endregion diff --git a/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd b/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd new file mode 100644 index 0000000..8a53e05 --- /dev/null +++ b/addons/phantom_camera/scripts/managers/phantom_camera_manager.gd @@ -0,0 +1,72 @@ +@tool +extends Node + +const PHANTOM_CAMERA_CONSTS = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +var phantom_camera_hosts: Array[PhantomCameraHost]: + get: + return _phantom_camera_host_list +var _phantom_camera_host_list: Array[PhantomCameraHost] + +var phantom_camera_2ds: Array[PhantomCamera2D]: + get: + return _phantom_camera_2d_list +var _phantom_camera_2d_list: Array[PhantomCamera2D] + +var phantom_camera_3ds: Array: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + get: + return _phantom_camera_3d_list +var _phantom_camera_3d_list: Array ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + + +func _enter_tree(): + Engine.physics_jitter_fix = 0 + + +func pcam_host_added(caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _phantom_camera_host_list.append(caller) + else: + printerr("This method can only be called from a PhantomCameraHost node") + +func pcam_host_removed(caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _phantom_camera_host_list.erase(caller) + else: + printerr("This method can only be called from a PhantomCameraHost node") + + +func pcam_added(caller, host_slot: int = 0) -> void: + if is_instance_of(caller, PhantomCamera2D): + _phantom_camera_2d_list.append(caller) + #print("Added PCam2D to PCamManager") + elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _phantom_camera_3d_list.append(caller) + #print("Added PCam3D to PCamManager") + + if not _phantom_camera_host_list.is_empty(): + _phantom_camera_host_list[host_slot].pcam_added_to_scene(caller) + +func pcam_removed(caller) -> void: + if is_instance_of(caller, PhantomCamera2D): + _phantom_camera_2d_list.erase(caller) + elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _phantom_camera_3d_list.erase(caller) + else: + printerr("This method can only be called from a PhantomCamera node") + + +func get_phantom_camera_hosts() -> Array[PhantomCameraHost]: + return _phantom_camera_host_list + +func get_phantom_camera_2ds() -> Array[PhantomCamera2D]: + return _phantom_camera_2d_list + +func get_phantom_camera_3ds() -> Array: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + return _phantom_camera_3d_list + + +func scene_changed() -> void: + _phantom_camera_2d_list.clear() + _phantom_camera_3d_list.clear() + _phantom_camera_host_list.clear() diff --git a/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd b/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd new file mode 100644 index 0000000..b19beb9 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/download_update_panel.gd @@ -0,0 +1,162 @@ +####################################################################### +# Credit goes to the Dialogue Manager plugin for this script +# Check it out at: https://github.com/nathanhoad/godot_dialogue_manager +####################################################################### + +@tool +extends Control + +#region Constants + +const TEMP_FILE_NAME = "user://temp.zip" + +#endregion + + +#region Signals + +signal failed() +signal updated(updated_to_version: String) + +#endregion + + +#region @onready + +#@onready var logo: TextureRect = %Logo +@onready var _download_verion: Label = %DownloadVersionLabel +@onready var _download_http_request: HTTPRequest = %DownloadHTTPRequest +@onready var _download_button: Button = %DownloadButton +@onready var _download_button_bg: NinePatchRect = %DownloadButtonBG +@onready var _download_label: Label = %UpdateLabel + +@onready var _breaking_label: Label = %BreakingLabel +@onready var _breaking_margin_container: MarginContainer = %BreakingMarginContainer +@onready var _breaking_options_button: OptionButton = %BreakingOptionButton +#@onready var current_version_label: Label = %CurrentVersionLabel + +#endregion + + +#region Variables + +# Todo - For 4.2 upgrade - Shows current version +var _download_dialogue: AcceptDialog +var _button_texture_default: Texture2D = load("res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryDefault.png") +var _button_texture_hover: Texture2D = load("res://addons/phantom_camera/assets/PhantomCameraBtnPrimaryHover.png") + +var next_version_release: Dictionary: + set(value): + next_version_release = value + _download_verion.text = "%s update is available for download" % value.tag_name.substr(1) + # Todo - For 4.2 upgrade + #current_version_label.text = "Current version is " + editor_plugin.get_version() + get: + return next_version_release + +var _breaking_window_height: float = 520 +var _breaking_window_height_update: float = 600 + +#endregion + + +#region Private Functions + +func _ready() -> void: + _download_http_request.request_completed.connect(_on_http_request_request_completed) + _download_button.pressed.connect(_on_download_button_pressed) + _download_button.mouse_entered.connect(_on_mouse_entered) + _download_button.mouse_exited.connect(_on_mouse_exited) + + _breaking_label.hide() + _breaking_margin_container.hide() + _breaking_options_button.hide() + + _breaking_options_button.item_selected.connect(_on_item_selected) + + +func _on_item_selected(index: int) -> void: + if index == 1: + _download_button.show() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height_update) + else: + _download_button.hide() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height) + + +func _on_download_button_pressed() -> void: + _download_http_request.request(next_version_release.zipball_url) + _download_button.disabled = true + _download_label.text = "Downloading..." + _download_button_bg.hide() + + +func _on_mouse_entered() -> void: + _download_button_bg.set_texture(_button_texture_hover) + + +func _on_mouse_exited() -> void: + _download_button_bg.set_texture(_button_texture_default) + + +func _on_http_request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: + if result != HTTPRequest.RESULT_SUCCESS: + failed.emit() + return + + # Save the downloaded zip + var zip_file: FileAccess = FileAccess.open(TEMP_FILE_NAME, FileAccess.WRITE) + zip_file.store_buffer(body) + zip_file.close() + + OS.move_to_trash(ProjectSettings.globalize_path("res://addons/phantom_camera")) + + var zip_reader: ZIPReader = ZIPReader.new() + zip_reader.open(TEMP_FILE_NAME) + var files: PackedStringArray = zip_reader.get_files() + + var base_path = files[1] + # Remove archive folder + files.remove_at(0) + # Remove assets folder + files.remove_at(0) + + for path in files: + var new_file_path: String = path.replace(base_path, "") + if path.ends_with("/"): + DirAccess.make_dir_recursive_absolute("res://addons/%s" % new_file_path) + else: + var file: FileAccess = FileAccess.open("res://addons/%s" % new_file_path, FileAccess.WRITE) + file.store_buffer(zip_reader.read_file(path)) + + zip_reader.close() + DirAccess.remove_absolute(TEMP_FILE_NAME) + + updated.emit(next_version_release.tag_name.substr(1)) + + +func _on_notes_button_pressed() -> void: + OS.shell_open(next_version_release.html_url) + +#endregion + +#region Public Functions + +func show_updater_warning(next_version_number: Array, current_version_number: Array) -> void: + var current_version_number_0: int = current_version_number[0] as int + var current_version_number_1: int = current_version_number[1] as int + + var next_version_number_0: int = next_version_number[0] as int # Major release number in the new release + var next_version_number_1: int = next_version_number[1] as int # Minor release number in the new release + + if next_version_number_0 > current_version_number_0 or \ + next_version_number_1 > current_version_number_1: + _breaking_label.show() + _breaking_margin_container.show() + _breaking_options_button.show() + _download_button.hide() + + _download_dialogue = get_parent() + _download_dialogue.size = Vector2(_download_dialogue.size.x, _breaking_window_height) + +#endregion diff --git a/addons/phantom_camera/scripts/panel/updater/update_button.gd b/addons/phantom_camera/scripts/panel/updater/update_button.gd new file mode 100644 index 0000000..965e394 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/update_button.gd @@ -0,0 +1,175 @@ +####################################################################### +# Credit goes to the Dialogue Manager plugin for this script +# Check it out at: https://github.com/nathanhoad/godot_dialogue_manager +####################################################################### + +@tool +extends Button + +#region Constants + +const REMOTE_RELEASE_URL: StringName = "https://api.github.com/repos/ramokz/phantom-camera/releases" +const UPDATER_CONSTANTS := preload("res://addons/phantom_camera/scripts/panel/updater/updater_constants.gd") + +#endregion + + +#region @onready + +@onready var http_request: HTTPRequest = %HTTPRequest +@onready var download_dialog: AcceptDialog = %DownloadDialog +@onready var download_update_panel: Control = %DownloadUpdatePanel +@onready var needs_reload_dialog: AcceptDialog = %NeedsReloadDialog +@onready var update_failed_dialog: AcceptDialog = %UpdateFailedDialog + +#endregion + + +#region Variables + +# The main editor plugin +var editor_plugin: EditorPlugin + +var needs_reload: bool = false + +# A lambda that gets called just before refreshing the plugin. Return false to stop the reload. +var on_before_refresh: Callable = func(): return true + +#endregion + + +#region Private Functions + +func _ready() -> void: + hide() + + # Check for updates on GitHub Releases + check_for_update() + + pressed.connect(_on_update_button_pressed) + http_request.request_completed.connect(_request_request_completed) + download_update_panel.updated.connect(_on_download_update_panel_updated) + needs_reload_dialog.confirmed.connect(_on_needs_reload_dialog_confirmed) + + +func _request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: + if result != HTTPRequest.RESULT_SUCCESS: return + + if not editor_plugin: return + var current_version: String = editor_plugin.get_version() + + # Work out the next version from the releases information on GitHub + var response: Array = JSON.parse_string(body.get_string_from_utf8()) + if typeof(response) != TYPE_ARRAY: return + + # GitHub releases are in order of creation, not order of version + var versions: Array = response.filter(func(release): + var version: String = release.tag_name.substr(1) + return version_to_number(version) > version_to_number(current_version) + ) + + if versions.size() > 0: + # Safeguard forks from being updated itself + if FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn") or \ + not ProjectSettings.get_setting(UPDATER_CONSTANTS.setting_updater_enabled): + + if not ProjectSettings.get_setting(UPDATER_CONSTANTS.setting_updater_notify_release): return + + print_rich(" +[color=#3AB99A] ********[/color] +[color=#3AB99A] ************[/color] +[color=#3AB99A]**************[/color] +[color=#3AB99A]****** *** *[/color] +[color=#3AB99A]****** ***[/color] +[color=#3AB99A]********** *****[/color] +[color=#3AB99A]******** ***********[/color] +[color=#3AB99A]******** *********** **[/color] +[color=#3AB99A]********* **************[/color] +[color=#3AB99A]********** *************[/color] +[color=#3AB99A]** ** ** ******* **[/color] +[font_size=18][b]New Phantom Camera version is available[/b][/font_size]") + + if FileAccess.file_exists("res://dev_scenes/3d/dev_scene_3d.tscn"): + print_rich("[font_size=14][color=#EAA15E][b]As you're using a fork of the project, you will need to update it manually[/b][/color][/font_size]") + + print_rich("[font_size=12]If you don't want to see this message, then it can be disabled inside:\n[code]Project Settings/Phantom Camera/Updater/Show New Release Info on Editor Launch in Output[/code]") + + return + + download_update_panel.next_version_release = versions[0] + download_update_panel.show_updater_warning( + versions[0].tag_name.substr(1).split("."), + current_version.split(".") + ) + _set_scale() + editor_plugin.panel_button.add_theme_color_override("font_color", Color("#3AB99A")) + editor_plugin.panel_button.icon = load("res://addons/phantom_camera/icons/phantom_camera_updater_panel_icon.svg") + editor_plugin.panel_button.add_theme_color_override("icon_normal_color", Color("#3AB99A")) + show() + + +func _on_update_button_pressed() -> void: + if needs_reload: + var will_refresh = on_before_refresh.call() + if will_refresh: + EditorInterface.restart_editor(true) + else: + _set_scale() + download_dialog.popup_centered() + + +func _set_scale() -> void: + var scale: float = EditorInterface.get_editor_scale() + download_dialog.min_size = Vector2(300, 250) * scale + + +func _on_download_dialog_close_requested() -> void: + download_dialog.hide() + + +func _on_download_update_panel_updated(updated_to_version: String) -> void: + download_dialog.hide() + + needs_reload_dialog.dialog_text = "Reload to finish update" + needs_reload_dialog.ok_button_text = "Reload" + needs_reload_dialog.cancel_button_text = "Cancel" + needs_reload_dialog.popup_centered() + + needs_reload = true + text = "Reload Project" + + +func _on_download_update_panel_failed() -> void: + download_dialog.hide() + update_failed_dialog.dialog_text = "Updated Failed" + update_failed_dialog.popup_centered() + + +func _on_needs_reload_dialog_confirmed() -> void: + EditorInterface.restart_editor(true) + + +func _on_timer_timeout() -> void: + if not needs_reload: + check_for_update() + +#endregion + + +#region Public Functions + +# Convert a version number to an actually comparable number +func version_to_number(version: String) -> int: + var bits = version.split(".") + var version_bit: int + var multiplier: int = 10000 + for i in bits.size(): + version_bit += bits[i].to_int() * multiplier / (10 ** (i)) + + return version_bit + + +func check_for_update() -> void: + http_request.request(REMOTE_RELEASE_URL) + +#endregion diff --git a/addons/phantom_camera/scripts/panel/updater/updater_constants.gd b/addons/phantom_camera/scripts/panel/updater/updater_constants.gd new file mode 100644 index 0000000..2cd69cb --- /dev/null +++ b/addons/phantom_camera/scripts/panel/updater/updater_constants.gd @@ -0,0 +1,9 @@ +extends RefCounted + +# Plugin Project Settings Sections +const setting_phantom_camera: StringName = "phantom_camera/" +const setting_updater_name: StringName = setting_phantom_camera + "updater/" + +# Updater Settings +const setting_updater_enabled: StringName = setting_updater_name + "enable_updater" +const setting_updater_notify_release: StringName = setting_updater_name + "show_new_release_info_on_editor_launch_in_output" diff --git a/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd b/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd new file mode 100644 index 0000000..27aedd0 --- /dev/null +++ b/addons/phantom_camera/scripts/panel/viewfinder/viewfinder.gd @@ -0,0 +1,468 @@ +@tool +extends Control + +#region Constants + +const Constants = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +# TODO - Should be in a central location +const _camera_2d_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/Camera2DIcon.svg") +const _camera_3d_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/Camera3DIcon.svg") +const _pcam_host_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_host.svg") +const _pcam_2D_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_2d.svg") +const _pcam_3D_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/phantom_camera_3d.svg") + +const _overlay_color_alpha: float = 0.3 + +#endregion + +#region @onready + +@onready var dead_zone_center_hbox: VBoxContainer = %DeadZoneCenterHBoxContainer +@onready var dead_zone_center_center_panel: Panel = %DeadZoneCenterCenterPanel +@onready var dead_zone_left_center_panel: Panel = %DeadZoneLeftCenterPanel +@onready var dead_zone_right_center_panel: Panel = %DeadZoneRightCenterPanel +@onready var target_point: Panel = %TargetPoint + +@onready var aspect_ratio_container: AspectRatioContainer = %AspectRatioContainer +@onready var camera_viewport_panel: Panel = aspect_ratio_container.get_child(0) +@onready var _framed_viewfinder: Control = %FramedViewfinder +@onready var _dead_zone_h_box_container: Control = %DeadZoneHBoxContainer +@onready var sub_viewport: SubViewport = %SubViewport + +@onready var _empty_state_control: Control = %EmptyStateControl +@onready var _empty_state_icon: Control = %EmptyStateIcon +@onready var _empty_state_text: RichTextLabel = %EmptyStateText +@onready var _add_node_button: Button = %AddNodeButton +@onready var _add_node_button_text: RichTextLabel = %AddNodeTypeText + +@onready var _priority_override_button: Button = %PriorityOverrideButton +@onready var _priority_override_name_label: Label = %PriorityOverrideNameLabel + +@onready var _camera_2d: Camera2D = %Camera2D + +#endregion + +#region Private Variables +var _no_open_scene_icon: CompressedTexture2D = preload("res://addons/phantom_camera/icons/viewfinder/SceneTypesIcon.svg") +var _no_open_scene_string: String = "[b]2D[/b] or [b]3D[/b] scene open" + +var _selected_camera: Node +var _active_pcam: Node + +var _is_2d: bool + +var root_node: Node + +#endregion + +#region Public variables + +var pcam_host_group: Array[PhantomCameraHost] + +var is_scene: bool + +var viewfinder_visible: bool + +var min_horizontal: float +var max_horizontal: float +var min_vertical: float +var max_vertical: float + +var pcam_host: PhantomCameraHost + +#endregion + + +#region Private Functions + +func _ready() -> void: + if not Engine.is_editor_hint(): + set_process(true) + camera_viewport_panel.self_modulate.a = 0 + + root_node = get_tree().current_scene + + if root_node is Node2D || root_node is Node3D: + %SubViewportContainer.set_visible(false) + if root_node is Node2D: + _is_2d = true + else: + _is_2d = false + + _set_viewfinder(root_node, false) + + if Engine.is_editor_hint(): + # BUG - Both signals below are called whenever a noe is selected in the scenetree + # Should only be triggered whenever a node is added or removed. + get_tree().node_added.connect(_node_added_or_removed) + get_tree().node_removed.connect(_node_added_or_removed) + else: + _empty_state_control.set_visible(false) + + _priority_override_button.set_visible(false) + + # Triggered when viewport size is changed in Project Settings + ProjectSettings.settings_changed.connect(_settings_changed) + + +func _exit_tree() -> void: + if Engine.is_editor_hint(): + if get_tree().node_added.is_connected(_node_added_or_removed): + get_tree().node_added.disconnect(_node_added_or_removed) + get_tree().node_removed.disconnect(_node_added_or_removed) + + if aspect_ratio_container.resized.is_connected(_resized): + aspect_ratio_container.resized.disconnect(_resized) + + if _add_node_button.pressed.is_connected(visibility_check): + _add_node_button.pressed.disconnect(visibility_check) + + if is_instance_valid(_active_pcam): + if _active_pcam.dead_zone_changed.is_connected(_on_dead_zone_changed): + _active_pcam.dead_zone_changed.disconnect(_on_dead_zone_changed) + + if _priority_override_button.pressed.is_connected(_select_override_pcam): + _priority_override_button.pressed.disconnect(_select_override_pcam) + + +func _process(_delta: float) -> void: + if Engine.is_editor_hint() and not viewfinder_visible: return + if not is_instance_valid(_active_pcam): return + + var unprojected_position_clamped: Vector2 = Vector2( + clamp(_active_pcam.viewport_position.x, min_horizontal, max_horizontal), + clamp(_active_pcam.viewport_position.y, min_vertical, max_vertical) + ) + + if not Engine.is_editor_hint(): + target_point.position = camera_viewport_panel.size * unprojected_position_clamped - target_point.size / 2 + + if _is_2d: + if not is_instance_valid(pcam_host): return + if not is_instance_valid(pcam_host.camera_2d): return + + var window_size_height: float = ProjectSettings.get_setting("display/window/size/viewport_height") + sub_viewport.size_2d_override = sub_viewport.size * (window_size_height / sub_viewport.size.y) + + _camera_2d.global_transform = pcam_host.camera_2d.global_transform + _camera_2d.offset = pcam_host.camera_2d.offset + _camera_2d.zoom = pcam_host.camera_2d.zoom + _camera_2d.ignore_rotation = pcam_host.camera_2d.ignore_rotation + _camera_2d.anchor_mode = pcam_host.camera_2d.anchor_mode + _camera_2d.limit_left = pcam_host.camera_2d.limit_left + _camera_2d.limit_top = pcam_host.camera_2d.limit_top + _camera_2d.limit_right = pcam_host.camera_2d.limit_right + _camera_2d.limit_bottom = pcam_host.camera_2d.limit_bottom + + +func _settings_changed() -> void: + var viewport_width: float = ProjectSettings.get_setting("display/window/size/viewport_width") + var viewport_height: float = ProjectSettings.get_setting("display/window/size/viewport_height") + var ratio: float = viewport_width / viewport_height + aspect_ratio_container.set_ratio(ratio) + camera_viewport_panel.size.x = viewport_width / (viewport_height / sub_viewport.size.y) + # TODO - Add resizer for Framed Viewfinder + + +func _node_added_or_removed(_node: Node) -> void: + visibility_check() + + +func visibility_check() -> void: + if not viewfinder_visible: return + + var phantom_camera_host: PhantomCameraHost + var has_camera: bool = false + if not PhantomCameraManager.get_phantom_camera_hosts().is_empty(): + has_camera = true + phantom_camera_host = PhantomCameraManager.get_phantom_camera_hosts()[0] + + var root: Node = EditorInterface.get_edited_scene_root() + + if root is Node2D: + var camera_2d: Camera2D + + if has_camera: + camera_2d = phantom_camera_host.camera_2d + else: + camera_2d = _get_camera_2d() + + _is_2d = true + is_scene = true + _add_node_button.set_visible(true) + _check_camera(root, camera_2d, true) + elif root is Node3D: + var camera_3d: Camera3D + + if has_camera: + camera_3d = phantom_camera_host.camera_3d + else: + camera_3d = root.get_viewport().get_camera_3d() + + _is_2d = false + is_scene = true + _add_node_button.set_visible(true) + _check_camera(root, camera_3d, false) + else: + is_scene = false +# Is not a 2D or 3D scene + _set_empty_viewfinder_state(_no_open_scene_string, _no_open_scene_icon) + _add_node_button.set_visible(false) + + if not _priority_override_button.pressed.is_connected(_select_override_pcam): + _priority_override_button.pressed.connect(_select_override_pcam) + + +func _get_camera_2d() -> Camera2D: + var camerasGroupName = "__cameras_%d" % EditorInterface.get_edited_scene_root().get_viewport().get_viewport_rid().get_id() + var cameras = get_tree().get_nodes_in_group(camerasGroupName) + + for camera in cameras: + if camera is Camera2D and camera.is_current: + return camera + return null + + +func _check_camera(root: Node, camera: Node, is_2D: bool) -> void: + var camera_string: String + var pcam_string: String + var color: Color + var color_alpha: Color + var camera_icon: CompressedTexture2D + var pcam_icon: CompressedTexture2D + + if is_2D: + camera_string = Constants.CAMERA_2D_NODE_NAME + pcam_string = Constants.PCAM_2D_NODE_NAME + color = Constants.COLOR_2D + camera_icon = _camera_2d_icon + pcam_icon = _pcam_2D_icon + else: + camera_string = Constants.CAMERA_3D_NODE_NAME + pcam_string = Constants.PCAM_3D_NODE_NAME + color = Constants.COLOR_3D + camera_icon = _camera_3d_icon + pcam_icon = _pcam_3D_icon + + if camera: +# Has Camera + if camera.get_children().size() > 0: + for cam_child in camera.get_children(): + if cam_child is PhantomCameraHost: + pcam_host = cam_child + + if pcam_host: + if PhantomCameraManager.get_phantom_camera_2ds() or PhantomCameraManager.get_phantom_camera_3ds(): + # Pcam exists in tree + _set_viewfinder(root, true) +# if pcam_host.get_active_pcam().get_get_follow_mode(): +# _on_dead_zone_changed() + + _set_viewfinder_state() + + %NoSupportMsg.set_visible(false) + + else: +# No PCam in scene + _update_button(pcam_string, pcam_icon, color) + _set_empty_viewfinder_state(pcam_string, pcam_icon) + else: +# No PCamHost in scene + _update_button(Constants.PCAM_HOST_NODE_NAME, _pcam_host_icon, Constants.PCAM_HOST_COLOR) + _set_empty_viewfinder_state(Constants.PCAM_HOST_NODE_NAME, _pcam_host_icon) + else: +# No PCamHost in scene + _update_button(Constants.PCAM_HOST_NODE_NAME, _pcam_host_icon, Constants.PCAM_HOST_COLOR) + _set_empty_viewfinder_state(Constants.PCAM_HOST_NODE_NAME, _pcam_host_icon) + else: +# No Camera + _update_button(camera_string, camera_icon, color) + _set_empty_viewfinder_state(camera_string, camera_icon) + + +func _update_button(text: String, icon: CompressedTexture2D, color: Color) -> void: + _add_node_button_text.set_text("[center]Add [img=32]" + icon.resource_path + "[/img] [b]"+ text + "[/b][/center]"); + var button_theme_hover: StyleBoxFlat = _add_node_button.get_theme_stylebox("hover") + button_theme_hover.border_color = color + _add_node_button.add_theme_stylebox_override("hover", button_theme_hover) + + +func _set_viewfinder_state() -> void: + _empty_state_control.set_visible(false) + + _framed_viewfinder.set_visible(true) + + if is_instance_valid(_active_pcam): + if _active_pcam.get_follow_mode() == _active_pcam.FollowMode.FRAMED: + _dead_zone_h_box_container.set_visible(true) + target_point.set_visible(true) + else: + _dead_zone_h_box_container.set_visible(false) + target_point.set_visible(false) + + +func _set_empty_viewfinder_state(text: String, icon: CompressedTexture2D) -> void: + _framed_viewfinder.set_visible(false) + target_point.set_visible(false) + + _empty_state_control.set_visible(true) + _empty_state_icon.set_texture(icon) + if icon == _no_open_scene_icon: + _empty_state_text.set_text("[center]No " + text + "[/center]") + else: + _empty_state_text.set_text("[center]No [b]" + text + "[/b] in scene[/center]") + + if _add_node_button.pressed.is_connected(_add_node): + _add_node_button.pressed.disconnect(_add_node) + + _add_node_button.pressed.connect(_add_node.bind(text)) + + +func _add_node(node_type: String) -> void: + var root: Node = EditorInterface.get_edited_scene_root() + + match node_type: + _no_open_scene_string: + pass + Constants.CAMERA_2D_NODE_NAME: + var camera: Camera2D = Camera2D.new() + _instantiate_node(root, camera, Constants.CAMERA_2D_NODE_NAME) + Constants.CAMERA_3D_NODE_NAME: + var camera: Camera3D = Camera3D.new() + _instantiate_node(root, camera, Constants.CAMERA_3D_NODE_NAME) + Constants.PCAM_HOST_NODE_NAME: + var pcam_host: PhantomCameraHost = PhantomCameraHost.new() + pcam_host.set_name(Constants.PCAM_HOST_NODE_NAME) + if _is_2d: +# get_tree().get_edited_scene_root().get_viewport().get_camera_2d().add_child(pcam_host) + _get_camera_2d().add_child(pcam_host) + pcam_host.set_owner(get_tree().get_edited_scene_root()) + else: +# var pcam_3D := get_tree().get_edited_scene_root().get_viewport().get_camera_3d() + get_tree().get_edited_scene_root().get_viewport().get_camera_3d().add_child(pcam_host) + pcam_host.set_owner(get_tree().get_edited_scene_root()) + Constants.PCAM_2D_NODE_NAME: + var pcam_2D: PhantomCamera2D = PhantomCamera2D.new() + _instantiate_node(root, pcam_2D, Constants.PCAM_2D_NODE_NAME) + Constants.PCAM_3D_NODE_NAME: + var pcam_3D: PhantomCamera3D = PhantomCamera3D.new() + _instantiate_node(root, pcam_3D, Constants.PCAM_3D_NODE_NAME) + + +func _instantiate_node(root: Node, node: Node, name: String) -> void: + node.set_name(name) + root.add_child(node) + node.set_owner(get_tree().get_edited_scene_root()) + + +func _set_viewfinder(root: Node, editor: bool) -> void: + pcam_host_group = PhantomCameraManager.get_phantom_camera_hosts() + if pcam_host_group.size() != 0: + if pcam_host_group.size() == 1: + var pcam_host: PhantomCameraHost = pcam_host_group[0] + if _is_2d: + _selected_camera = pcam_host.camera_2d + _active_pcam = pcam_host.get_active_pcam() as PhantomCamera2D + if editor: + var camera_2d_rid: RID = _selected_camera.get_canvas() + sub_viewport.disable_3d = true + _camera_2d.zoom = pcam_host.camera_2d.zoom + _camera_2d.offset = pcam_host.camera_2d.offset + _camera_2d.ignore_rotation = pcam_host.camera_2d.ignore_rotation + + sub_viewport.world_2d = pcam_host.camera_2d.get_world_2d() + sub_viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + sub_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS + sub_viewport.size_2d_override_stretch = true + else: + _selected_camera = pcam_host.camera_3d + _active_pcam = pcam_host.get_active_pcam() as PhantomCamera3D + if editor: + var camera_3d_rid: RID = _selected_camera.get_camera_rid() + sub_viewport.disable_3d = false + sub_viewport.world_3d = pcam_host.camera_3d.get_world_3d() + RenderingServer.viewport_attach_camera(sub_viewport.get_viewport_rid(), camera_3d_rid) + + if _selected_camera.keep_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: + aspect_ratio_container.set_stretch_mode(AspectRatioContainer.STRETCH_HEIGHT_CONTROLS_WIDTH) + else: + aspect_ratio_container.set_stretch_mode(AspectRatioContainer.STRETCH_WIDTH_CONTROLS_HEIGHT) + + _on_dead_zone_changed() + set_process(true) + + if not pcam_host.update_editor_viewfinder.is_connected(_on_update_editor_viewfinder): + pcam_host.update_editor_viewfinder.connect(_on_update_editor_viewfinder.bind(pcam_host)) + + if not aspect_ratio_container.resized.is_connected(_resized): + aspect_ratio_container.resized.connect(_resized) + + if not _active_pcam.dead_zone_changed.is_connected(_on_dead_zone_changed): + _active_pcam.dead_zone_changed.connect(_on_dead_zone_changed) + + +func _resized() -> void: + _on_dead_zone_changed() + + +func _on_dead_zone_changed() -> void: + if not is_instance_valid(_active_pcam): return + if not _active_pcam.follow_mode == _active_pcam.FollowMode.FRAMED: return + + # Waits until the camera_viewport_panel has been resized when launching the game + if camera_viewport_panel.size.x == 0: + await camera_viewport_panel.resized + + #print(_active_pcam.get_pcam_host_owner()) + if is_instance_valid(_active_pcam.get_pcam_host_owner()): + pcam_host = _active_pcam.get_pcam_host_owner() + if not _active_pcam == pcam_host.get_active_pcam(): + _active_pcam == pcam_host.get_active_pcam() + print("Active pcam in viewfinder: ", _active_pcam) + + var dead_zone_width: float = _active_pcam.dead_zone_width * camera_viewport_panel.size.x + var dead_zone_height: float = _active_pcam.dead_zone_height * camera_viewport_panel.size.y + dead_zone_center_hbox.set_custom_minimum_size(Vector2(dead_zone_width, 0)) + dead_zone_center_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + dead_zone_left_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + dead_zone_right_center_panel.set_custom_minimum_size(Vector2(0, dead_zone_height)) + + min_horizontal = 0.5 - _active_pcam.dead_zone_width / 2 + max_horizontal = 0.5 + _active_pcam.dead_zone_width / 2 + min_vertical = 0.5 - _active_pcam.dead_zone_height / 2 + max_vertical = 0.5 + _active_pcam.dead_zone_height / 2 + + +#################### +## Priority Override +#################### +func _on_update_editor_viewfinder(pcam_host: PhantomCameraHost) -> void: + if pcam_host.get_active_pcam().priority_override: + _active_pcam = pcam_host.get_active_pcam() + _priority_override_button.set_visible(true) + _priority_override_name_label.set_text(_active_pcam.name) + _priority_override_button.set_tooltip_text(_active_pcam.name) + else: + _priority_override_button.set_visible(false) + +func _select_override_pcam() -> void: + EditorInterface.get_selection().clear() + EditorInterface.get_selection().add_node(_active_pcam) + +#endregion + + +#region Public Functions + +func update_dead_zone() -> void: + _set_viewfinder(root_node, true) + + +func scene_changed(scene_root: Node) -> void: + if not scene_root is Node2D and not scene_root is Node3D: + is_scene = false + _set_empty_viewfinder_state(_no_open_scene_string, _no_open_scene_icon) + _add_node_button.set_visible(false) + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd new file mode 100644 index 0000000..4e3996e --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd @@ -0,0 +1,1300 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_2d.svg") +class_name PhantomCamera2D +extends Node2D + +## Controls a scene's [Camera2D] and applies logic to it. +## +## The scene's [param Camera2D] will follow the position of the +## [param PhantomCamera2D] with the highest priority. +## Each instance can have different positional and rotational logic applied +## to them. + +#region Constants + +const _constants := preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Emitted when the [param PhantomCamera2D] becomes active. +signal became_active +## Emitted when the [param PhantomCamera2D] becomes inactive. +signal became_inactive + +## Emitted when [member follow_target] changes. +signal follow_target_changed + +## Emitted when dead zones changes.[br] +## [b]Note:[/b] Only applicable in [param Framed] [enum FollowMode]. +signal dead_zone_changed + +## Emitted when the [param Camera2D] starts to tween to another [param PhantomCamera2D]. +signal tween_started +## Emitted when the [param Camera2D] is to tweening towards another [param PhantomCamera2D]. +signal is_tweening +## Emitted when the tween is interrupted due to another [param PhantomCamera2D] +## becoming active. The argument is the [param PhantomCamera2D] that interrupted +## the tween. +signal tween_interrupted(pcam_2d: PhantomCamera2D) +## Emitted when the [param Camera2D] completes its tween to the +## [param PhantomCamera2D]. +signal tween_completed + +#endregion + +#region Enums + +## Determines the positional logic for a given [param PCamPhantomCamera2D] +## [br][br] +## The different modes have different functionalities and purposes, so choosing +## the correct one depends on what each [param PhantomCamera2D] is meant to do. +enum FollowMode { + NONE = 0, ## Default - No follow logic is applied. + GLUED = 1, ## Sticks to its target. + SIMPLE = 2, ## Follows its target with an optional offset. + GROUP = 3, ## Follows multiple targets with option to dynamically reframe itself. + PATH = 4, ## Follows a target while being positionally confined to a [Path2D] node. + FRAMED = 5, ## Applies a dead zone on the frame and only follows its target when it tries to leave it. +} + +## Determines how often an inactive [param PhantomCamera2D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera2D] are doing when idling to +## improve performance. +enum InactiveUpdateMode { + ALWAYS, ## Always updates the [param PhantomCamera2D], even when it's inactive. + NEVER, ## Never updates the [param PhantomCamera2D] when it's inactive. Reduces the amount of computational resources when inactive. +# EXPONENTIALLY, +} + +#endregion + +#region Variables + +var _is_active: bool = false + +## The [PhantomCameraHost] that owns this [param PhantomCamera2D]. +var pcam_host_owner: PhantomCameraHost = null: + set = set_pcam_host_owner, + get = get_pcam_host_owner + +## To quickly preview a [param PhantomCamera2D] without adjusting its +## [member priority], this property allows the selected PCam to ignore the +## Priority system altogether and forcefully become the active one. It's +## partly designed to work within the Viewfinder, and will be disabled when +## running a build export of the game. +@export var priority_override: bool = false: + set(value): + if Engine.is_editor_hint() and _has_valid_pcam_owner(): + if value == true: + priority_override = value + get_pcam_host_owner().pcam_priority_override(self) + else: + priority_override = value + get_pcam_host_owner().pcam_priority_updated(self) + get_pcam_host_owner().pcam_priority_override_disabled() + get: + return priority_override + +## It defines which [param PhantomCamera2D] a scene's [param Camera2D] should +## be corresponding with and be attached to. This is decided by the PCam with +## the highest [param Priority]. +## [br][br] +## Changing [param Priority] will send an event to the scene's +## [PhantomCameraHost], which will then determine whether if the +## [param Priority] value is greater than or equal to the currently +## highest [param PhantomCamera2D]'s in the scene. The [param PhantomCamera2D] +## with the highest value will then reattach the [param Camera2D] accordingly. +@export var priority: int = 0: + set = set_priority, + get = get_priority + +## Determines the positional logic for a given [param PhantomCamera2D]. +## The different modes have different functionalities and purposes, so +## choosing the correct one depends on what each [param PhantomCamera2D] +## is meant to do. +@export var follow_mode: FollowMode = FollowMode.NONE: + set(value): + follow_mode = value + + if value == FollowMode.FRAMED: + if _follow_framed_initial_set and follow_target: + _follow_framed_initial_set = false + dead_zone_changed.connect(_on_dead_zone_changed) + else: + if dead_zone_changed.is_connected(_on_dead_zone_changed): + dead_zone_changed.disconnect(_on_dead_zone_changed) + + if follow_mode == FollowMode.NONE: + _should_follow = false + elif follow_mode == FollowMode.GROUP and follow_targets or follow_target: + _should_follow = true + notify_property_list_changed() + get: + return follow_mode + + +## Determines which target should be followed. +## The [param Camera2D] will follow the position of the Follow Target +## based on the [member follow_mode] type and its parameters. +@export var follow_target: Node2D = null: + set = set_follow_target, + get = get_follow_target +var _should_follow: bool = false +var _follow_framed_offset: Vector2 = Vector2.ZERO +var _follow_target_physics_based: bool = false +var _physics_interpolation_enabled = false # NOTE - Enable for Godot 4.3 and when PhysicsInterpolationMode bug is resolved + +### Defines the targets that the [param PhantomCamera2D] should be following. +@export var follow_targets: Array[Node2D] = []: + set = set_follow_targets, + get = get_follow_targets +var _has_multiple_follow_targets: bool = false + + +## Determines the [Path2D] the [param PhantomCamera2D] +## should be bound to. +## The [param PhantomCamera2D] will follow the position of the +## [member follow_target] while sticking to the closest point on this path. +@export var follow_path: Path2D = null: + set = set_follow_path, + get = get_follow_path +var _has_follow_path: bool = false + +## Applies a zoom level to the [param PhantomCamera2D], which effectively +## overrides the [param zoom] property of the [param Camera2D] node. +@export var zoom: Vector2 = Vector2.ONE: + set = set_zoom, + get = get_zoom + +## If enabled, will snap the [param Camera2D] to whole pixels as it moves. +## [br][br] +## This should be particularly useful in pixel art projects, +## where assets should always be aligned to the monitor's pixels to avoid +## unintended stretching. +@export var snap_to_pixel: bool = false: + set = set_snap_to_pixel, + get = get_snap_to_pixel + +## Enables a preview of what the [PhantomCamera2D] will see in the +## scene. It works identically to how a [param Camera2D] shows which area +## will be visible during runtime. Likewise, this too will be affected by the +## [member zoom] property and the [param viewport_width] and +## [param Viewport Height] defined in the [param Project Settings]. +@export var frame_preview: bool = true: + set(value): + frame_preview = value + queue_redraw() + get: + return frame_preview + +## Defines how the [param PhantomCamera2D] transition between one another. +## Changing the tween values for a given [param PhantomCamera2D] +## determines how transitioning to that instance will look like. +## This is a resource type that can be either used for one +## [param PhantomCamera] or reused across multiple - both 2D and 3D. +## By default, all [param PhantomCameras] will use a [param linear] +## transition, [param easeInOut] ease with a [param 1s] duration. +@export var tween_resource: PhantomCameraTween = PhantomCameraTween.new(): + set = set_tween_resource, + get = get_tween_resource +var _has_tweened: bool = false + +## If enabled, the moment a [param PhantomCamera3D] is instantiated into +## a scene, and has the highest priority, it will perform its tween transition. +## This is most obvious if a [param PhantomCamera3D] has a long duration and +## is attached to a playable character that can be moved the moment a scene +## is loaded. Disabling the [param tween_on_load] property will +## disable this behaviour and skip the tweening entirely when instantiated. +@export var tween_on_load: bool = true: + set = set_tween_on_load, + get = get_tween_on_load + +## Determines how often an inactive [param PhantomCamera2D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera2Ds] are doing when idling +## to improve performance. +@export var inactive_update_mode: InactiveUpdateMode = InactiveUpdateMode.ALWAYS + +@export_group("Follow Parameters") +## Offsets the [member follow_target] position. +@export var follow_offset: Vector2 = Vector2.ZERO: + set = set_follow_offset, + get = get_follow_offset + +## Applies a damping effect on the [param Camera2D]'s movement. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera movement. +@export var follow_damping: bool = false: + set = set_follow_damping, + get = get_follow_damping + +## Defines the damping amount. The ideal range should be somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera movement.[br] +## [b]Higher value[/b] = slower / heavier camera movement. +@export var follow_damping_value: Vector2 = Vector2(0.1, 0.1): + set = set_follow_damping_value, + get = get_follow_damping_value +var _velocity_ref: Vector2 = Vector2.ZERO # Stores and applies the velocity of the movement + +@export_subgroup("Follow Group") +## Enables the [param PhantomCamera2D] to dynamically zoom in and out based on +## the targets' distances between each other. +## Once enabled, the [param Camera2D] will stay as zoomed in as possible, +## limited by the [member auto_zoom_max] and start zooming out as the targets +## move further apart, limited by the [member auto_zoom_min]. +## Note: Enabling this property hides and disables the [member zoom] property +## as this effectively overrides that value. +@export var auto_zoom: bool = false: + set = set_auto_zoom, + get = get_auto_zoom +## Sets the param minimum zoom amount, in other words how far away the +## [param Camera2D] can be from scene.[br][br] +## This only works when [member auto_zoom] is enabled. +@export var auto_zoom_min: float = 1: + set = set_auto_zoom_min, + get = get_auto_zoom_min + +## Sets the maximum zoom amount, in other words how close the [param Camera2D] +## can move towards the scene.[br][br] +## This only works when [member auto_zoom] is enabled. +@export var auto_zoom_max: float = 5: + set = set_auto_zoom_max, + get = get_auto_zoom_max +## Determines how close to the edges the targets are allowed to be. +## This is useful to avoid targets being cut off at the edges of the screen. +## [br][br] + +## The Vector4 parameter order goes: [param Left] - [param Top] - [param Right] +## - [param Bottom]. +@export var auto_zoom_margin: Vector4 = Vector4.ZERO: + set = set_auto_zoom_margin, + get = get_auto_zoom_margin + +@export_subgroup("Dead Zones") +## Defines the horizontal dead zone area. While the target is within it, the +## [param PhantomCamera2D] will not move in the horizontal axis. +## If the targeted node leaves the horizontal bounds, the +## [param PhantomCamera2D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_width: float = 0: + set(value): + dead_zone_width = value + dead_zone_changed.emit() + get: + return dead_zone_width + +## Defines the vertical dead zone area. While the target is within it, the +## [param PhantomCamera2D] will not move in the vertical axis. +## If the targeted node leaves the vertical bounds, the +## [param PhantomCamera2D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_height: float = 0: + set(value): + dead_zone_height = value + dead_zone_changed.emit() + get: + return dead_zone_height + +## Enables the [param dead zones] to be visible when running the game from the editor. +## [br] +## [param dead zones] will never be visible in build exports. +@export var show_viewfinder_in_play: bool = false + +## Defines the position of the [member follow_target] within the viewport.[br] +## This is only used for when [member follow_mode] is set to [param Framed]. +var viewport_position: Vector2 +var _follow_framed_initial_set: bool = false + +@export_group("Limit") + +## Shows the [param Camera2D]'s built-in limit border.[br] +## The [param PhantomCamera2D] and [param Camera2D] can move around anywhere within it. +@export var draw_limits: bool = false: + set(value): + _draw_limits = value + if Engine.is_editor_hint(): + _draw_camera_2d_limit() + get: + return _draw_limits + +static var _draw_limits: bool + +var _limit_sides: Vector4i +var _limit_sides_default: Vector4i = Vector4i(-10000000, -10000000, 10000000, 10000000) +## Defines the left side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_left: int = -10000000: + set = set_limit_left, + get = get_limit_left +## Defines the top side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_top: int = -10000000: + set = set_limit_top, + get = get_limit_top +## Defines the right side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_right: int = 10000000: + set = set_limit_right, + get = get_limit_right +## Defines the bottom side of the [param Camera2D] limit. +## The camera will not be able to move past this point. +@export var limit_bottom: int = 10000000: + set = set_limit_bottom, + get = get_limit_bottom + +## Allows for setting either a [TileMap] or [CollisionShape2D] node to +## automatically apply a limit size instead of manually adjusting the Left, +## Top, Right and Left properties.[br][br] +## [b]TileMap[/b][br] +## The Limit will update after the [TileSet] of the [TileMap] has changed.[br] +## [b]Note:[/b] The limit size will only update after closing the TileMap editor +## bottom panel. +## [br][br] +## [b]CollisionShape2D[/b][br] +## The limit will update in realtime as the Shape2D changes its size. +## Note: For performance reasons, resizing the [Shape2D] during runtime will not change the Limits sides. +@export_node_path("TileMap", "CollisionShape2D") var limit_target = NodePath(""): + set = set_limit_target, + get = get_limit_target +var _limit_node: Node2D +## Applies an offset to the [TileMap] Limit or [Shape2D] Limit. +## The values goes from [param Left], [param Top], [param Right] +## and [param Bottom]. +@export var limit_margin: Vector4i: + set = set_limit_margin, + get = get_limit_margin +#@export var limit_smoothed: bool = false: # TODO - Needs proper support + #set = set_limit_smoothing, + #get = get_limit_smoothing +var _limit_inactive_pcam: bool + +#endregion + + +func _validate_property(property: Dictionary) -> void: + ################ + ## Follow Target + ################ + if property.name == "follow_target": + if follow_mode == FollowMode.NONE or \ + follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + elif property.name == "follow_path" and \ + follow_mode != FollowMode.PATH: + property.usage = PROPERTY_USAGE_NO_EDITOR + + + #################### + ## Follow Parameters + #################### + + + if follow_mode == FollowMode.NONE: + match property.name: + "follow_offset", \ + "follow_damping", \ + "follow_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_offset": + if follow_mode == FollowMode.PATH or \ + follow_mode == FollowMode.GLUED: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_damping_value" and not follow_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Follow Group + ############### + if follow_mode != FollowMode.GROUP: + match property.name: + "follow_targets", \ + "auto_zoom": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if not auto_zoom: + match property.name: + "auto_zoom_min", \ + "auto_zoom_max", \ + "auto_zoom_margin": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ################ + ## Follow Framed + ################ + if not follow_mode == FollowMode.FRAMED: + match property.name: + "dead_zone_width", \ + "dead_zone_height", \ + "show_viewfinder_in_play": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ####### + ## Zoom + ####### + if property.name == "zoom" and auto_zoom: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ######## + ## Limit + ######## + if is_instance_valid(_limit_node): + match property.name: + "limit_left", \ + "limit_top", \ + "limit_right", \ + "limit_bottom": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "limit_margin" and not _limit_node: + property.usage = PROPERTY_USAGE_NO_EDITOR + + ################ + ## Frame Preview + ################ + if property.name == "frame_preview" and _is_active: + property.usage |= PROPERTY_USAGE_READ_ONLY + + notify_property_list_changed() + +#region Private Functions + +func _enter_tree() -> void: + PhantomCameraManager.pcam_added(self) + update_limit_all_sides() + + if not PhantomCameraManager.get_phantom_camera_hosts().is_empty(): + set_pcam_host_owner(PhantomCameraManager.get_phantom_camera_hosts()[0]) + + +func _exit_tree() -> void: + PhantomCameraManager.pcam_removed(self) + + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_removed_from_scene(self) + + +func _process(delta: float) -> void: + if _follow_target_physics_based: return + _process_logic(delta) + + +func _physics_process(delta: float): + if not _follow_target_physics_based: return + _process_logic(delta) + + +func _process_logic(delta: float) -> void: + if not _is_active: + match inactive_update_mode: + InactiveUpdateMode.NEVER: return + InactiveUpdateMode.ALWAYS: + # Only triggers if limit isn't default + if _limit_inactive_pcam: + global_position = _set_limit_clamp_position(global_position) +# InactiveUpdateMode.EXPONENTIALLY: +# TODO - Trigger positional updates less frequently as more Pcams gets added + _limit_checker() + if _should_follow: + _follow(delta) + + +func _limit_checker() -> void: + ## TODO - Needs to see if this can be triggerd only from CollisionShape2D Transform changes + if Engine.is_editor_hint(): + if draw_limits: + update_limit_all_sides() + + +func _follow(delta: float) -> void: + var follow_position: Vector2 + + match follow_mode: + FollowMode.GLUED: + if follow_target: + follow_position = follow_target.global_position + FollowMode.SIMPLE: + if follow_target: + follow_position = _target_position_with_offset() + FollowMode.GROUP: + if follow_targets.size() == 1: + follow_position = follow_targets[0].global_position + elif _has_multiple_follow_targets and follow_targets.size() > 1: + var rect: Rect2 = Rect2(follow_targets[0].global_position, Vector2.ZERO) + for node in follow_targets: + rect = rect.expand(node.global_position) + if auto_zoom: + rect = rect.grow_individual( + auto_zoom_margin.x, + auto_zoom_margin.y, + auto_zoom_margin.z, + auto_zoom_margin.w + ) +# else: +# rect = rect.grow_individual(-80, 0, 0, 0) + if auto_zoom: + var screen_size: Vector2 = get_viewport_rect().size + if rect.size.x > rect.size.y * screen_size.aspect(): + zoom = clamp(screen_size.x / rect.size.x, auto_zoom_min, auto_zoom_max) * Vector2.ONE + else: + zoom = clamp(screen_size.y / rect.size.y, auto_zoom_min, auto_zoom_max) * Vector2.ONE + follow_position = rect.get_center() + FollowMode.PATH: + if follow_target and follow_path: + var path_position: Vector2 = follow_path.global_position + + follow_position = \ + follow_path.curve.get_closest_point( + _target_position_with_offset() - path_position + ) + path_position + + FollowMode.FRAMED: + if follow_target: + if not Engine.is_editor_hint(): + viewport_position = (get_follow_target().get_global_transform_with_canvas().get_origin() + follow_offset) / get_viewport_rect().size + + if _get_framed_side_offset() != Vector2.ZERO: + var glo_pos: Vector2 + var target_position: Vector2 = _target_position_with_offset() + _follow_framed_offset + + if dead_zone_width == 0 || dead_zone_height == 0: + if dead_zone_width == 0 && dead_zone_height != 0: + follow_position = _target_position_with_offset() + elif dead_zone_width != 0 && dead_zone_height == 0: + glo_pos = _target_position_with_offset() + glo_pos.x += target_position.x - global_position.x + follow_position = glo_pos + else: + follow_position = _target_position_with_offset() + else: + follow_position = target_position + else: + _follow_framed_offset = global_position - _target_position_with_offset() + return + else: + follow_position = _target_position_with_offset() + + _interpolate_position(follow_position, delta) + + +func _set_velocity(index: int, value: float): + _velocity_ref[index] = value + + +func _interpolate_position(target_position: Vector2, delta: float) -> void: + if _limit_inactive_pcam and not _has_tweened: + target_position = _set_limit_clamp_position(target_position) + + if follow_damping: + for index in 2: + global_position[index] = \ + _smooth_damp( + target_position[index], + global_position[index], + index, + _velocity_ref[index], + _set_velocity, + follow_damping_value[index], + delta + ) + else: + global_position = target_position + + +func _smooth_damp(target_axis: float, self_axis: float, index: int, current_velocity: float, set_velocity: Callable, damping_time: float, delta: float) -> float: + damping_time = maxf(0.0001, damping_time) + var omega: float = 2 / damping_time + var x: float = omega * delta + var exponential: float = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x) + var diff: float = self_axis - target_axis + var _target_axis: float = target_axis + + var max_change: float = INF * damping_time + diff = clampf(diff, -max_change, max_change) + target_axis = self_axis - diff + + var temp: float = (current_velocity + omega * diff) * delta + set_velocity.call(index, (current_velocity - omega * temp) * exponential) + var output: float = target_axis + (diff + temp) * exponential + + ## To prevent overshooting + if (_target_axis - self_axis > 0.0) == (output > _target_axis): + output = _target_axis + set_velocity.call(index, (output - _target_axis) / delta) + + return output + + +func _set_limit_clamp_position(value: Vector2) -> Vector2: + var camera_frame_rect_size: Vector2 = _camera_frame_rect().size + value.x = clampf(value.x, _limit_sides.x + camera_frame_rect_size.x / 2, _limit_sides.z - camera_frame_rect_size.x / 2) + value.y = clampf(value.y, _limit_sides.y + camera_frame_rect_size.y / 2, _limit_sides.w - camera_frame_rect_size.y / 2) + return value + + +func _draw(): + if not Engine.is_editor_hint(): return + + if frame_preview and not _is_active: + var screen_size_width: int = ProjectSettings.get_setting("display/window/size/viewport_width") + var screen_size_height: int = ProjectSettings.get_setting("display/window/size/viewport_height") + var screen_size_zoom: Vector2 = Vector2(screen_size_width / get_zoom().x, screen_size_height / get_zoom().y) + draw_rect(_camera_frame_rect(), Color("3ab99a"), false, 2) + + +func _camera_frame_rect() -> Rect2: + var screen_size_width: int = ProjectSettings.get_setting("display/window/size/viewport_width") + var screen_size_height: int = ProjectSettings.get_setting("display/window/size/viewport_height") + var screen_size_zoom: Vector2 = Vector2(screen_size_width / get_zoom().x, screen_size_height / get_zoom().y) + + return Rect2(-screen_size_zoom / 2, screen_size_zoom) + + +func _on_tile_map_changed() -> void: + update_limit_all_sides() + + +func _target_position_with_offset() -> Vector2: + return follow_target.global_position + follow_offset + + +func _on_dead_zone_changed() -> void: + set_global_position( _target_position_with_offset() ) + + +func _has_valid_pcam_owner() -> bool: + if not is_instance_valid(get_pcam_host_owner()): return false + if not is_instance_valid(get_pcam_host_owner().camera_2d): return false + return true + + +func _get_framed_side_offset() -> Vector2: + var frame_out_bounds: Vector2 + + if viewport_position.x < 0.5 - dead_zone_width / 2: + # Is outside left edge + frame_out_bounds.x = -1 + + if viewport_position.y < 0.5 - dead_zone_height / 2: + # Is outside top edge + frame_out_bounds.y = 1 + + if viewport_position.x > 0.5 + dead_zone_width / 2: + # Is outside right edge + frame_out_bounds.x = 1 + + if viewport_position.y > 0.5001 + dead_zone_height / 2: # 0.501 to resolve an issue where the bottom vertical Dead Zone never becoming 0 when the Dead Zone Vertical parameter is set to 0 + # Is outside bottom edge + frame_out_bounds.y = -1 + + return frame_out_bounds + + +func _draw_camera_2d_limit() -> void: + if _has_valid_pcam_owner(): + get_pcam_host_owner().camera_2d.set_limit_drawing_enabled(draw_limits) + + +func _check_limit_is_not_default() -> void: + if _limit_sides == _limit_sides_default: + _limit_inactive_pcam = false + else: + _limit_inactive_pcam = true + + +func _set_camera_2d_limit(side: int, limit: int) -> void: + if not _has_valid_pcam_owner(): return + if not _is_active: return + get_pcam_host_owner().camera_2d.set_limit(side, limit) + +#endregion + + +#region Public Functions + +## Updates the limit sides based what has been set to define it +## This should be automatic, but can be called manully if need be. +func update_limit_all_sides() -> void: + var limit_rect: Rect2 + + if not is_instance_valid(_limit_node): + _limit_sides.x = limit_left + _limit_sides.y = limit_top + _limit_sides.z = limit_right + _limit_sides.w = limit_bottom + elif _limit_node is TileMap: + var tile_map: TileMap = _limit_node as TileMap + var tile_map_size: Vector2 = Vector2(tile_map.get_used_rect().size) * Vector2(tile_map.tile_set.tile_size) * tile_map.get_scale() + var tile_map_position: Vector2 = tile_map.global_position + Vector2(tile_map.get_used_rect().position) * Vector2(tile_map.tile_set.tile_size) * tile_map.get_scale() + + ## Calculates the Rect2 based on the Tile Map position and size + margin + limit_rect = Rect2( + tile_map_position + Vector2(limit_margin.x, limit_margin.y), + tile_map_size - Vector2(limit_margin.x, limit_margin.y) - Vector2(limit_margin.z, limit_margin.w) + ) + + # Left + _limit_sides.x = roundi(limit_rect.position.x) + # Top + _limit_sides.y = roundi(limit_rect.position.y) + # Right + _limit_sides.z = roundi(limit_rect.position.x + limit_rect.size.x) + # Bottom + _limit_sides.w = roundi(limit_rect.position.y + limit_rect.size.y) + elif _limit_node is CollisionShape2D: + var collision_shape_2d = _limit_node as CollisionShape2D + + if not collision_shape_2d.get_shape(): return + + var shape_2d: Shape2D = collision_shape_2d.get_shape() + var shape_2d_size: Vector2 = shape_2d.get_rect().size + var shape_2d_position: Vector2 = collision_shape_2d.global_position + Vector2(shape_2d.get_rect().position) + + ## Calculates the Rect2 based on the Tile Map position and size + limit_rect = Rect2(shape_2d_position, shape_2d_size) + + ## Calculates the Rect2 based on the Tile Map position and size + margin + limit_rect = Rect2( + limit_rect.position + Vector2(limit_margin.x, limit_margin.y), + limit_rect.size - Vector2(limit_margin.x, limit_margin.y) - Vector2(limit_margin.z, limit_margin.w) + ) + + # Left + _limit_sides.x = roundi(limit_rect.position.x) + # Top + _limit_sides.y = roundi(limit_rect.position.y) + # Right + _limit_sides.z = roundi(limit_rect.position.x + limit_rect.size.x) + # Bottom + _limit_sides.w = roundi(limit_rect.position.y + limit_rect.size.y) + + _check_limit_is_not_default() + + if _is_active and _has_valid_pcam_owner(): + _set_camera_2d_limit(SIDE_LEFT, _limit_sides.x) + _set_camera_2d_limit(SIDE_TOP, _limit_sides.y) + _set_camera_2d_limit(SIDE_RIGHT, _limit_sides.z) + _set_camera_2d_limit(SIDE_BOTTOM, _limit_sides.w) + + +func reset_limit() -> void: + if not _has_valid_pcam_owner(): return + if not _is_active: return + get_pcam_host_owner().camera_2d.set_limit(SIDE_LEFT, _limit_sides_default.x) + get_pcam_host_owner().camera_2d.set_limit(SIDE_TOP, _limit_sides_default.y) + get_pcam_host_owner().camera_2d.set_limit(SIDE_RIGHT, _limit_sides_default.z) + get_pcam_host_owner().camera_2d.set_limit(SIDE_BOTTOM, _limit_sides_default.w) + + +## Assigns the value of the [param has_tweened] property. +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_has_tweened(caller: Node, value: bool) -> void: + if is_instance_of(caller, PhantomCameraHost): + _has_tweened = value + else: + printerr("Can only be called PhantomCameraHost class") +## Returns the current [param has_tweened] value. +func get_has_tweened() -> bool: + return _has_tweened + +#endregion + + +#region Setter & Getter Functions + +## Assigns the [param PhantomCamera2D] to a new [PhantomCameraHost].[br] +## [b][color=yellow]Important:[/color][/b] This is currently restricted to +## plugin internals. Proper support will be added in issue #26. +func set_pcam_host_owner(value: PhantomCameraHost) -> void: + pcam_host_owner = value + if is_instance_valid(pcam_host_owner): + pcam_host_owner.pcam_added_to_scene(self) + #if value.size() == 1: +# else: +# for camera_host in camera_host_group: +# print("Multiple PhantomCameraBases in scene") +# print(pcam_host_group) +# print(pcam.get_tree().get_nodes_in_group(PhantomCameraGroupNames.PHANTOM_CAMERA_HOST_GROUP_NAME)) +# multiple_pcam_host_group.append(camera_host) +# return nullfunc assign_pcam_host() -> void: +## Gets the current [PhantomCameraHost] this [param PhantomCamera2D] is +## assigned to. +func get_pcam_host_owner() -> PhantomCameraHost: + return pcam_host_owner + + +## Assigns new Zoom value. +func set_zoom(value: Vector2) -> void: + zoom = value + queue_redraw() + +## Gets current Zoom value. +func get_zoom() -> Vector2: + return zoom + + +## Assigns new Priority value. +func set_priority(value: int) -> void: + priority = abs(value) + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_priority_updated(self) + +## Gets current Priority value. +func get_priority() -> int: + return priority + + +## Assigns a new PhantomCameraTween resource to the PhantomCamera2D +func set_tween_resource(value: PhantomCameraTween) -> void: + tween_resource = value + +## Gets the PhantomCameraTween resource assigned to the PhantomCamera2D +## Returns null if there's nothing assigned to it. +func get_tween_resource() -> PhantomCameraTween: + return tween_resource + + +## Assigns a new [param Tween Duration] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_duration(value: float) -> void: + tween_resource.duration = value + +## Gets the current [param Tween Duration] value inside the +## [member tween_resource].[br] +## The duration value is in seconds. +func get_tween_duration() -> float: + return tween_resource.duration + + +## Assigns a new [param Tween Transition] value inside the +## [member tween_resource]. +func set_tween_transition(value: int) -> void: + tween_resource.transition = value + +## Gets the current [param Tween Transition] value inside the +## [member tween_resource]. +func get_tween_transition() -> int: + return tween_resource.transition + + +## Assigns a new [param Tween Ease] value inside the [member tween_resource]. +func set_tween_ease(value: int) -> void: + tween_resource.ease = value + +## Gets the current [param Tween Ease] value inside the [member tween_resource]. +func get_tween_ease() -> int: + return tween_resource.ease + + +## Sets the [param PhantomCamera2D] active state.[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_is_active(node, value) -> void: + if node is PhantomCameraHost: + _is_active = value + else: + printerr("PCams can only be set from the PhantomCameraHost") + +## Gets current active state of the [param PhantomCamera2D]. +## If it returns true, it means the [param PhantomCamera2D] is what the +## [param Camera2D] is currently following. +func is_active() -> bool: + return _is_active + + +## Enables or disables the [member tween_on_load]. +func set_tween_on_load(value: bool) -> void: + tween_on_load = value + +## Gets the current [member tween_on_load] value. +func get_tween_on_load() -> bool: + return tween_on_load + + +## Gets the current follow mode as an enum int based on [enum FollowMode].[br] +## [b]Note:[/b] Setting [enum FollowMode] purposely not added. +## A separate PCam should be used instead. +func get_follow_mode() -> int: + return follow_mode + + +## Assigns a new [Node2D] as the [member follow_target]. +func set_follow_target(value: Node2D) -> void: + if follow_target == value: return + follow_target = value + _follow_target_physics_based = false + if is_instance_valid(value): + _should_follow = true + _check_physics_body(value) + else: + _should_follow = false + follow_target_changed.emit() + notify_property_list_changed() + +## Erases the current [member follow_target]. +func erase_follow_target() -> void: + if follow_target == null: return + _should_follow = false + follow_target = null + _follow_target_physics_based = false + follow_target_changed.emit() + +## Gets the current [member follow_target]. +func get_follow_target() -> Node2D: + return follow_target + + +## Assigns a new [Path2D] to the [member follow_path]. +func set_follow_path(value: Path2D) -> void: + follow_path = value + +## Erases the current [Path2D] from the [member follow_path] property. +func erase_follow_path() -> void: + follow_path = null + +## Gets the current [Path2D] from the [member follow_path]. +func get_follow_path() -> Path2D: + return follow_path + + +## Assigns a new [param follow_targets] array value. +func set_follow_targets(value: Array[Node2D]) -> void: + if follow_targets == value: return + + follow_targets = value + + if follow_targets.is_empty(): + _should_follow = false + _has_multiple_follow_targets = false + return + + _follow_target_physics_based = false + var valid_instances: int = 0 + for target in follow_targets: + if is_instance_valid(target): + _should_follow = true + valid_instances += 1 + + _check_physics_body(target) + + if valid_instances > 1: + _has_multiple_follow_targets = true + +## Appends a single [Node2D] to [member follow_targets]. +func append_follow_targets(value: Node2D) -> void: + if not is_instance_valid(value): + printerr(value, " is not a valid Node2D instance.") + return + if not follow_targets.has(value): + follow_targets.append(value) + _should_follow = true + _has_multiple_follow_targets = true + _check_physics_body(value) + else: + printerr(value, " is already part of Follow Group") + +## Adds an Array of type [Node2D] to [member follow_targets]. +func append_follow_targets_array(value: Array[Node2D]) -> void: + for target in value: + if not is_instance_valid(target): continue + if not follow_targets.has(target): + follow_targets.append(target) + _should_follow = true + _check_physics_body(target) + if follow_targets.size() > 1: + _has_multiple_follow_targets = true + else: + printerr(value, " is already part of Follow Group") + +## Removes a [Node2D] from [member follow_targets] array. +func erase_follow_targets(value: Node2D) -> void: + follow_targets.erase(value) + _follow_target_physics_based = false + for target in follow_targets: + _check_physics_body(target) + if follow_targets.size() < 2: + _has_multiple_follow_targets = false + if follow_targets.size() < 1: + _should_follow = false + +## Gets all [Node2D] from [member follow_targets] array. +func get_follow_targets() -> Array[Node2D]: + return follow_targets + + +func _check_physics_body(target: Node2D) -> void: + if target is PhysicsBody2D: + ## NOTE - Feature Toggle + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor < 3: + if ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + print_rich("Following a [b]PhysicsBody2D[/b] node will likely result in jitter - on lower physics ticks in particular.") + print_rich("Once Godot 4.3 is released, will strongly recommend upgrading to that as it has built-in support for 2D Physics Interpolation.") + print_rich("Until then, try following the guide on the [url=https://phantom-camera.dev/support/faq#i-m-seeing-jitter-what-can-i-do]documentation site[/url] for better results.") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + return + ## NOTE - Only supported in Godot 4.3 or above + elif not ProjectSettings.get_setting("physics/common/physics_interpolation") and ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + printerr("Physics Interpolation is disabled in the Project Settings, recommend enabling it to smooth out physics-based camera movement") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + _follow_target_physics_based = true + + +## Assigns a new Vector2 for the Follow Target Offset property. +func set_follow_offset(value: Vector2) -> void: + follow_offset = value + +## Gets the current Vector2 for the Follow Target Offset property. +func get_follow_offset() -> Vector2: + return follow_offset + + +## Enables or disables Follow Damping. +func set_follow_damping(value: bool) -> void: + follow_damping = value + notify_property_list_changed() + +## Gets the current Follow Damping property. +func get_follow_damping() -> bool: + return follow_damping + + +## Assigns new Damping value. +func set_follow_damping_value(value: Vector2) -> void: + ## TODO - Should be using @export_range once minimum version support is Godot 4.3 + if value.x < 0: value.x = 0 + elif value.y < 0: value.y = 0 + follow_damping_value = value + +## Gets the current Follow Damping value. +func get_follow_damping_value() -> Vector2: + return follow_damping_value + + +## Enables or disables [member snap_to_pixel]. +func set_snap_to_pixel(value: bool) -> void: + snap_to_pixel = value + +## Gets the current [member snap_to_pixel] value. +func get_snap_to_pixel() -> bool: + return snap_to_pixel + + +## Returns true if the [param PhantomCamera2D] has more than one member in the +## [follow_targets] array. +func get_has_multiple_follow_targets() -> bool: + return _has_multiple_follow_targets + + +## Enables or disables Auto zoom when using Group Follow. +func set_auto_zoom(value: bool) -> void: + auto_zoom = value + notify_property_list_changed() + +## Gets Auto Zoom state. +func get_auto_zoom() -> bool: + return auto_zoom + + +## Assigns new Min Auto Zoom value. +func set_auto_zoom_min(value: float) -> void: + auto_zoom_min = value + +## Gets Min Auto Zoom value. +func get_auto_zoom_min() -> float: + return auto_zoom_min + + +## Assigns new Max Auto Zoom value. +func set_auto_zoom_max(value: float) -> void: + auto_zoom_max = value + +## Gets Max Auto Zoom value. +func get_auto_zoom_max() -> float: + return auto_zoom_max + + +## Assigns new Zoom Auto Margin value. +func set_auto_zoom_margin(value: Vector4) -> void: + auto_zoom_margin = value + +## Gets Zoom Auto Margin value. +func get_auto_zoom_margin() -> Vector4: + return auto_zoom_margin + + +## Sets a limit side based on the side parameter.[br] +## It's recommended to pass the [enum Side] enum as the sid parameter. +func set_limit(side: int, value: int) -> void: + match side: + SIDE_LEFT: limit_left = value + SIDE_TOP: limit_top = value + SIDE_RIGHT: limit_right = value + SIDE_BOTTOM: limit_bottom = value + _: printerr("Not a valid Side.") + +## Gets the limit side +func get_limit(value: int) -> int: + match value: + SIDE_LEFT: return limit_left + SIDE_TOP: return limit_top + SIDE_RIGHT: return limit_right + SIDE_BOTTOM: return limit_bottom + _: + printerr("Not a valid Side.") + return -1 + + +## Assign a the Camera2D Left Limit Side value. +func set_limit_left(value: int) -> void: + _limit_target_exist_error() + limit_left = value + update_limit_all_sides() + +## Gets the Camera2D Left Limit value. +func get_limit_left() -> int: + return limit_left + + +## Assign a the Camera2D Top Limit Side value. +func set_limit_top(value: int) -> void: + _limit_target_exist_error() + limit_top = value + update_limit_all_sides() + +## Gets the Camera2D Top Limit value. +func get_limit_top() -> int: + return limit_top + + +## Assign a the Camera2D Right Limit Side value. +func set_limit_right(value: int) -> void: + _limit_target_exist_error() + limit_right = value + update_limit_all_sides() + +## Gets the Camera2D Right Limit value. +func get_limit_right() -> int: + return limit_right + + +## Assign a the Camera2D Bottom Limit Side value. +func set_limit_bottom(value: int) -> void: + _limit_target_exist_error() + limit_bottom = value + update_limit_all_sides() + +## Gets the Camera2D Bottom Limit value. +func get_limit_bottom() -> int: + return limit_bottom + + +func _limit_target_exist_error() -> void: + if not limit_target.is_empty(): + printerr("Unable to set Limit Side due to Limit Target ", _limit_node.name, " being assigned") + + +# Sets a [memeber limit_target] node. +func set_limit_target(value: NodePath) -> void: + limit_target = value + + # Waits for PCam2d's _ready() before trying to validate limit_node_path + if not is_node_ready(): await ready + + # Removes signal from existing TileMap node + if is_instance_valid(get_node_or_null(value)): + var prev_limit_node: Node2D = _limit_node + var new_limit_node: Node2D = get_node(value) + + if prev_limit_node is TileMap: + if prev_limit_node.changed.is_connected(_on_tile_map_changed): + prev_limit_node.changed.disconnect(_on_tile_map_changed) + + if new_limit_node is TileMap: + if not new_limit_node.changed.is_connected(_on_tile_map_changed): + new_limit_node.changed.connect(_on_tile_map_changed) + elif new_limit_node is CollisionShape2D: + var col_shape: CollisionShape2D = get_node(value) + + if col_shape.shape == null: + printerr("No Shape2D in: ", col_shape.name) + reset_limit() + limit_target = null + return + else: + printerr("Limit Target is not a TileMap or CollisionShape2D node") + return + + elif value == NodePath(""): + reset_limit() + limit_target = null + else: + printerr("Limit Target cannot be found") + return + + _limit_node = get_node_or_null(value) + + notify_property_list_changed() + update_limit_all_sides() + +## Get [member limit_target] node. +func get_limit_target() -> NodePath: + if not limit_target: # TODO - Fixes an spam error if if limit_taret is empty + return NodePath("") + else: + return limit_target + + +## Set Tile Map Limit Margin. +func set_limit_margin(value: Vector4i) -> void: + limit_margin = value + update_limit_all_sides() +## Get Tile Map Limit Margin. +func get_limit_margin() -> Vector4i: + return limit_margin + + +### Enables or disables the Limit Smoothing beaviour. +#func set_limit_smoothing(value: bool) -> void: + #limit_smoothed = value + #if is_active() and _has_valid_pcam_owner(): + #get_pcam_host_owner().camera_2d.reset_smoothing() +### Returns the Limit Smoothing beaviour. +#func get_limit_smoothing() -> bool: + #return limit_smoothed + + +## Sets [member inactive_update_mode] property. +func set_inactive_update_mode(value: int) -> void: + inactive_update_mode = value + +## Gets [enum InactiveUpdateMode] value. +func get_inactive_update_mode() -> int: + return inactive_update_mode + + +func set_follow_target_physics_based(value: bool, caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _follow_target_physics_based = value + else: + printerr("set_follow_target_physics_based() is for internal use only.") +func get_follow_target_physics_based() -> bool: + return _follow_target_physics_based + + +func get_class() -> String: + return "PhantomCamera2D" + + +func is_class(value) -> bool: + return value == "PhantomCamera2D" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd new file mode 100644 index 0000000..e5868a1 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd @@ -0,0 +1,1557 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_3d.svg") +class_name PhantomCamera3D +extends Node3D + +## Controls a scene's [Camera3D] and applies logic to it. +## +## The scene's [param Camera3D] will follow the position of the +## [param PhantomCamera3D] with the highest priority. +## Each instance can have different positional and rotational logic applied +## to them. + +#region Constants + +const _constants = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Emitted when the [param PhantomCamera3D] becomes active. +signal became_active +## Emitted when the [param PhantomCamera3D] becomes inactive. +signal became_inactive + +## Emitted when [member follow_target] changes. +signal follow_target_changed + +## Emitted when [member look_at_target] changes. +signal look_at_target_changed + +## Emitted when dead zones changes. [br] +## [b]Note:[/b] Only applicable in [param Framed] [member FollowMode]. +signal dead_zone_changed + +## Emitted when the [param Camera3D] starts to tween to another +## [param PhantomCamera3D]. +signal tween_started +## Emitted when the [param Camera3D] is to tweening towards another +## [param PhantomCamera3D]. +signal is_tweening +## Emitted when the tween is interrupted due to another [param PhantomCamera3D] +## becoming active. The argument is the [param PhantomCamera3D] that +## interrupted the tween. +signal tween_interrupted(pcam_3d: PhantomCamera3D) +## Emitted when the [param Camera3D] completes its tween to the +## [param PhantomCamera3D]. +signal tween_completed + +#endregion + + +#region Enums + +## Determines the positional logic for a given [param PhantomCamera3D] +## [br][br] +## The different modes have different functionalities and purposes, so choosing +## the correct one depends on what each [param PhantomCamera3D] is meant to do. +enum FollowMode { + NONE = 0, ## Default - No follow logic is applied. + GLUED = 1, ## Sticks to its target. + SIMPLE = 2, ## Follows its target with an optional offset. + GROUP = 3, ## Follows multiple targets with option to dynamically reframe itself. + PATH = 4, ## Follows a target while being positionally confined to a [Path3D] node. + FRAMED = 5, ## Applies a dead zone on the frame and only follows its target when it tries to leave it. + THIRD_PERSON = 6, ## Applies a [SpringArm3D] node to the target's position and allows for rotating around it. +} + +## Determines the rotational logic for a given [param PhantomCamera3D].[br][br] +## The different modes has different functionalities and purposes, so +## choosing the correct mode depends on what each [param PhantomCamera3D] +## is meant to do. +enum LookAtMode { + NONE = 0, ## Default - No Look At logic is applied. + MIMIC = 1, ## Copies its target's rotational value. + SIMPLE = 2, ## Looks at its target in a straight line. + GROUP = 3, ## Looks at the centre of its targets. +} + +## Determines how often an inactive [param PhantomCamera3D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera3D] are doing when idling +## to improve performance. +enum InactiveUpdateMode { + ALWAYS, ## Always updates the [param PhantomCamera3D], even when it's inactive. + NEVER, ## Never updates the [param PhantomCamera3D] when it's inactive. Reduces the amount of computational resources when inactive. +# EXPONENTIALLY, +} + +#endregion + + +#region Variables + +## The [PhantomCameraHost] that owns this [param PhantomCamera2D]. +var pcam_host_owner: PhantomCameraHost = null: + set = set_pcam_host_owner, + get = get_pcam_host_owner + +var _is_active: bool = false + +## To quickly preview a [param PhantomCamera3D] without adjusting its +## [member Priority], this property allows the selected [param PhantomCamera3D] +## to ignore the Priority system altogether and forcefully become the active +## one. It's partly designed to work within the [param viewfinder], and will be +## disabled when running a build export of the game. +@export var priority_override: bool = false: + set(value): + if Engine.is_editor_hint() and _has_valid_pcam_owner(): + if value == true: + priority_override = value + get_pcam_host_owner().pcam_priority_override(self) + else: + priority_override = value + get_pcam_host_owner().pcam_priority_updated(self) + get_pcam_host_owner().pcam_priority_override_disabled() + get: + return priority_override + +## It defines which [param PhantomCamera3D] a scene's [param Camera3D] should +## be corresponding with and be attached to. This is decided by the +## [param PhantomCamera3D] with the highest [param priority]. +## [br][br] +## Changing [param priority] will send an event to the scene's +## [PhantomCameraHost], which will then determine whether if the +## [param priority] value is greater than or equal to the currently +## highest [param PhantomCamera3D]'s in the scene. The +## [param PhantomCamera3D] with the highest value will then reattach the +## Camera accordingly. +@export var priority: int = 0: + set = set_priority, + get = get_priority + +## Determines the positional logic for a given [param PhantomCamera3D]. +## The different modes have different functionalities and purposes, so +## choosing the correct one depends on what each [param PhantomCamera3D] +## is meant to do. +@export var follow_mode: FollowMode = FollowMode.NONE: + set(value): + follow_mode = value + + if value == FollowMode.FRAMED: + if _follow_framed_initial_set and follow_target: + _follow_framed_initial_set = false + dead_zone_changed.connect(_on_dead_zone_changed) + else: + if dead_zone_changed.is_connected(_on_dead_zone_changed): + dead_zone_changed.disconnect(_on_dead_zone_changed) + + if follow_mode == FollowMode.NONE: + _should_follow = false + elif follow_mode == FollowMode.GROUP and follow_targets or follow_target: + _should_follow = true + + notify_property_list_changed() + get: + return follow_mode + + +## Determines which target should be followed. +## The [param Camera3D] will follow the position of the Follow Target based on +## the [member follow_mode] type and its parameters. +@export var follow_target: Node3D = null: + set = set_follow_target, + get = get_follow_target +var _should_follow: bool = false +var _follow_target_physics_based: bool = false +var _physics_interpolation_enabled = false ## TOOD - Should be anbled once toggling physics_interpolation_mode ON, when previously OFF, works in 3D + +## Defines the targets that the [param PhantomCamera3D] should be following. +@export var follow_targets: Array[Node3D] = []: + set = set_follow_targets, + get = get_follow_targets +var _has_multiple_follow_targets: bool = false + + +## Determines the [Path3D] node the [param PhantomCamera3D] +## should be bound to. +## The [param PhantomCamera3D] will follow the position of the +## [member follow_target] while sticking to the closest point on this path. +@export var follow_path: Path3D = null: + set = set_follow_path, + get = get_follow_path + + +## Determines the rotational logic for a given [param PhantomCamera3D]. +## The different modes has different functionalities and purposes, +## so choosing the correct mode depends on what each +## [param PhantomCamera3D] is meant to do. +@export var look_at_mode: LookAtMode = LookAtMode.NONE: + set(value): + look_at_mode = value + if look_at_target is Node3D: + _should_look_at = true + + if look_at_mode == LookAtMode.NONE: + _should_look_at = false + elif look_at_mode == LookAtMode.GROUP and look_at_targets or look_at_target: + _should_look_at = true + + notify_property_list_changed() + get: + return look_at_mode +var _should_look_at: bool = false +var _multiple_look_at_targets: bool = false + +## Determines which target should be looked at. +## The [param PhantomCamera3D] will update its rotational value as the +## target changes its position. +@export var look_at_target: Node3D = null: + set = set_look_at_target, + get = get_look_at_target + +## Defines the targets that the camera should looking at. +## It will be looking at the centre of all the assigned targets. +@export var look_at_targets: Array[Node3D] = []: + set = set_look_at_targets, + get = get_look_at_targets +var _valid_look_at_targets: Array[Node3D] = [] + +## Defines how [param ]PhantomCamera3Ds] transition between one another. +## Changing the tween values for a given [param PhantomCamera3D] +## determines how transitioning to that instance will look like. +## This is a resource type that can be either used for one +## [param PhantomCamera] or reused across multiple - both 2D and 3D. +## By default, all [param PhantomCameras] will use a [param linear] +## transition, [param easeInOut] ease with a [param 1s] duration. +@export var tween_resource: PhantomCameraTween = PhantomCameraTween.new(): + set = set_tween_resource, + get = get_tween_resource +var _has_tweened: bool = false + +## If enabled, the moment a [param PhantomCamera3D] is instantiated into +## a scene, and has the highest priority, it will perform its tween transition. +## This is most obvious if a [param PhantomCamera3D] has a long duration and +## is attached to a playable character that can be moved the moment a scene +## is loaded. Disabling the [param tween_on_load] property will +## disable this behaviour and skip the tweening entirely when instantiated. +@export var tween_on_load: bool = true: + set = set_tween_on_load, + get = get_tween_on_load + +## Determines how often an inactive [param PhantomCamera3D] should update +## its positional and rotational values. This is meant to reduce the amount +## of calculations inactive [param PhantomCamera3Ds] are doing when idling +## to improve performance. +@export var inactive_update_mode: InactiveUpdateMode = InactiveUpdateMode.ALWAYS: + set = set_inactive_update_mode, + get = get_inactive_update_mode + + +## A resource type that allows for overriding the [param Camera3D] node's +## properties. +@export var camera_3d_resource: Camera3DResource = Camera3DResource.new(): + set = set_camera_3d_resource, + get = get_camera_3d_resource + +@export_group("Follow Parameters") +## Offsets the [member follow_target] position. +@export var follow_offset: Vector3 = Vector3.ZERO: + set = set_follow_offset, + get = get_follow_offset + +## Applies a damping effect on the camera's movement. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera movement. +@export var follow_damping: bool = false: + set = set_follow_damping, + get = get_follow_damping + +## Defines the damping amount. The ideal range should be somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera movement.[br] +## [b]Higher value[/b] = slower / heavier camera movement. +@export var follow_damping_value: Vector3 = Vector3(0.1, 0.1, 0.1): + set = set_follow_damping_value, + get = get_follow_damping_value +var _follow_velocity_ref: Vector3 = Vector3.ZERO # Stores and applies the velocity of the movement + +## Sets a distance offset from the centre of the target's position. +## The distance is applied to the [param PhantomCamera3D]'s local z axis. +@export var follow_distance: float = 1: + set = set_follow_distance, + get = get_follow_distance + +## Enables the [param PhantomCamera3D] to automatically distance +## itself as the [param follow targets] move further apart.[br] +## It looks at the longest axis between the different targets and interpolates +## the distance length between the [member auto_follow_distance_min] and +## [member follow_group_distance] properties.[br][br] +## Note: Enabling this property hides and disables the [member follow_distance] +## property as this effectively overrides that property. +@export var auto_follow_distance: bool = false: + set = set_auto_follow_distance, + get = get_auto_follow_distance + +## Sets the minimum distance between the Camera and centre of [AABB]. +## [br][br] +## Note: This distance will only ever be reached when all the targets are in +## the exact same [param Vector3] coordinate, which will very unlikely +## happen, so adjust the value here accordingly. +@export var auto_follow_distance_min: float = 1: + set = set_auto_follow_distance_min, + get = get_auto_follow_distance_min + +## Sets the maximum distance between the Camera and centre of [AABB]. +@export var auto_follow_distance_max: float = 5: + set = set_auto_follow_distance_max, + get = get_auto_follow_distance_max + +## Determines how fast the [member auto_follow_distance] moves between the +## maximum and minimum distance. The higher the value, the sooner the +## maximum distance is reached.[br][br] +## This value should be based on the sizes of the [member auto_follow_distance_min] +## and [member auto_follow_distance_max].[br] +## E.g. if the value between the [member auto_follow_distance_min] and +## [member auto_follow_distance_max] is small, consider keeping the number low +## and vice versa. +@export var auto_follow_distance_divisor: float = 10: + set = set_auto_follow_distance_divisor, + get = get_auto_follow_distance_divisor + +@export_subgroup("Dead Zones") +## Defines the horizontal dead zone area. While the target is within it, the +## [param PhantomCamera3D] will not move in the horizontal axis. +## If the targeted node leaves the horizontal bounds, the +## [param PhantomCamera3D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_width: float = 0: + set(value): + dead_zone_width = value + dead_zone_changed.emit() + get: + return dead_zone_width + +## Defines the vertical dead zone area. While the target is within it, the +## [param PhantomCamera3D] will not move in the vertical axis. +## If the targeted node leaves the vertical bounds, the +## [param PhantomCamera3D] will follow the target horizontally to keep +## it within bounds. +@export_range(0, 1) var dead_zone_height: float = 0: + set(value): + dead_zone_height = value + dead_zone_changed.emit() + get: + return dead_zone_height + +## Enables the dead zones to be visible when running the game from the editor. +## Dead zones will never be visible in build exports. +@export var show_viewfinder_in_play: bool = false + +## Defines the position of the [member follow_target] within the viewport.[br] +## This is only used for when [member follow_mode] is set to [param Framed]. +var viewport_position: Vector2 +var _follow_framed_initial_set: bool = false +var _follow_framed_offset: Vector3 + +@export_subgroup("Spring Arm") +var _follow_spring_arm: SpringArm3D + +## Defines the [member SpringArm3D.spring_length]. +@export var spring_length: float = 1: + set = set_spring_length, + get = get_spring_length + +## Defines the [member SpringArm3D.collision_mask] node's Collision Mask. +@export_flags_3d_physics var collision_mask: int = 1: + set = set_collision_mask, + get = get_collision_mask + +## Defines the [member SpringArm3D.shape] node's Shape3D. +@export var shape: Shape3D = null: + set = set_shape, + get = get_shape + +## Defines the [member SpringArm3D.margin] node's Margin. +@export var margin: float = 0.01: + set = set_margin, + get = get_margin + +@export_group("Look At Parameters") +## Offsets the target's [param Vector3] position that the +## [param PhantomCamera3D] is looking at. +@export var look_at_offset: Vector3 = Vector3.ZERO: + set = set_look_at_offset, + get = get_look_at_offset + +## Applies a damping effect on the camera's rotation. +## Leading to heavier / slower camera movement as the targeted node moves around. +## This is useful to avoid sharp and rapid camera rotation. +@export var look_at_damping: bool = false: + set = set_look_at_damping, + get = get_look_at_damping + +## Defines the Rotational damping amount. The ideal range is typicall somewhere between 0-1.[br][br] +## The damping amount can be specified in the individual axis.[br][br] +## [b]Lower value[/b] = faster / sharper camera rotation.[br] +## [b]Higher value[/b] = slower / heavier camera rotation. +@export_range(0.0, 1.0, 0.001, "or_greater") var look_at_damping_value: float = 0.25: + set = set_look_at_damping_value, + get = get_look_at_damping_value + +var _current_rotation: Vector3 + +#endregion + + +#region Property Validator + +func _validate_property(property: Dictionary) -> void: + ################ + ## Follow Target + ################ + if property.name == "follow_target": + if follow_mode == FollowMode.NONE or \ + follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_path" and \ + follow_mode != FollowMode.PATH: + property.usage = PROPERTY_USAGE_NO_EDITOR + + #################### + ## Follow Parameters + #################### + + if follow_mode == FollowMode.NONE: + match property.name: + "follow_offset", \ + "follow_damping", \ + "follow_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_offset": + if follow_mode == FollowMode.PATH or \ + follow_mode == FollowMode.GLUED: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_damping_value" and not follow_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "follow_distance": + if not follow_mode == FollowMode.FRAMED: + if not follow_mode == FollowMode.GROUP or \ + auto_follow_distance: \ + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Group Follow + ############### + if property.name == "follow_targets" and \ + not follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "auto_follow_distance" and \ + not follow_mode == FollowMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if not auto_follow_distance: + match property.name: + "auto_follow_distance_min", \ + "auto_follow_distance_max", \ + "auto_follow_distance_divisor": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ############### + ## Framed Follow + ############### + if not follow_mode == FollowMode.FRAMED: + match property.name: + "dead_zone_width", \ + "dead_zone_height", \ + "show_viewfinder_in_play": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ###################### + ## Third Person Follow + ###################### + if not follow_mode == FollowMode.THIRD_PERSON: + match property.name: + "spring_length", \ + "collision_mask", \ + "shape", \ + "margin": + property.usage = PROPERTY_USAGE_NO_EDITOR + + ########## + ## Look At + ########## + if look_at_mode == LookAtMode.NONE: + match property.name: + "look_at_target", \ + "look_at_offset" , \ + "look_at_damping", \ + "look_at_damping_value": + property.usage = PROPERTY_USAGE_NO_EDITOR + elif look_at_mode == LookAtMode.GROUP: + match property.name: + "look_at_target": + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_target": + if look_at_mode == LookAtMode.NONE or \ + look_at_mode == LookAtMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_targets" and \ + not look_at_mode == LookAtMode.GROUP: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "look_at_damping_value" and \ + not look_at_damping: + property.usage = PROPERTY_USAGE_NO_EDITOR + + notify_property_list_changed() +#endregion + +#region Private Functions + +func _enter_tree() -> void: + PhantomCameraManager.pcam_added(self) + + if not PhantomCameraManager.get_phantom_camera_hosts().is_empty(): + set_pcam_host_owner(PhantomCameraManager.get_phantom_camera_hosts()[0]) + + #if not get_parent() is SpringArm3D: + #if look_at_target: + #_look_at_target_node = look_at_target + #elif look_at_targets: + #_look_at_group_nodes.clear() + #for path in look_at_targets: + #if not path.is_empty() and path: + #_should_look_at = true + #_has_look_at_targets = true + #_look_at_group_nodes.append(path) + + +func _exit_tree() -> void: + PhantomCameraManager.pcam_removed(self) + + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_removed_from_scene(self) + + + +func _ready(): + if follow_mode == FollowMode.THIRD_PERSON: + if not Engine.is_editor_hint(): + if not is_instance_valid(_follow_spring_arm): + _follow_spring_arm = SpringArm3D.new() + _follow_spring_arm.top_level = true + _follow_spring_arm.rotation = global_rotation + _follow_spring_arm.position = _get_target_position_offset() if is_instance_valid(follow_target) else global_position + _follow_spring_arm.spring_length = spring_length + _follow_spring_arm.collision_mask = collision_mask + _follow_spring_arm.shape = shape + _follow_spring_arm.margin = margin + get_parent().add_child.call_deferred(_follow_spring_arm) + reparent.call_deferred(_follow_spring_arm) + if follow_mode == FollowMode.FRAMED: + if not Engine.is_editor_hint(): + _follow_framed_offset = global_position - _get_target_position_offset() + _current_rotation = global_rotation + + +func _process(delta: float) -> void: + if not _follow_target_physics_based: + _process_logic(delta) + + +func _physics_process(delta: float): + if _follow_target_physics_based: + _process_logic(delta) + + +func _process_logic(delta: float) -> void: + if not _is_active: + match inactive_update_mode: + InactiveUpdateMode.NEVER: return + # InactiveUpdateMode.EXPONENTIALLY: + # TODO - Trigger positional updates less frequently as more Pcams gets added + if _should_follow: + _follow(delta) + if _should_look_at: + _look_at() # TODO - Delta needs to be applied, pending Godot's 3D Physics Interpolation to be implemented + + +func _follow(delta: float) -> void: + var follow_position: Vector3 + + var follow_target_node: Node3D = self + + match follow_mode: + FollowMode.GLUED: + if follow_target: + follow_position = follow_target.global_position + FollowMode.SIMPLE: + if follow_target: + follow_position = _get_target_position_offset() + FollowMode.GROUP: + if follow_targets: + if follow_targets.size() == 1: + follow_position = \ + follow_targets[0].global_position + \ + follow_offset + \ + get_transform().basis.z * \ + Vector3(follow_distance, follow_distance, follow_distance) + + elif follow_targets.size() > 1: + var bounds: AABB = AABB(follow_targets[0].global_position, Vector3.ZERO) + for node in follow_targets: + if is_instance_valid(node): + bounds = bounds.expand(node.global_position) + + var distance: float + if auto_follow_distance: + distance = lerp(auto_follow_distance_min, auto_follow_distance_max, bounds.get_longest_axis_size() / auto_follow_distance_divisor) + distance = clamp(distance, auto_follow_distance_min, auto_follow_distance_max) + else: + distance = follow_distance + + follow_position = \ + bounds.get_center() + \ + follow_offset + \ + get_transform().basis.z * \ + Vector3(distance, distance, distance) + FollowMode.PATH: + if follow_target and follow_path: + var path_position: Vector3 = follow_path.global_position + follow_position = \ + follow_path.curve.get_closest_point( + follow_target.global_position - path_position + ) + path_position + FollowMode.FRAMED: + if follow_target: + if not Engine.is_editor_hint(): + if not _is_active || get_pcam_host_owner().get_trigger_pcam_tween(): + follow_position = _get_position_offset_distance() + _interpolate_position(follow_position, delta) + return + + viewport_position = get_viewport().get_camera_3d().unproject_position(_get_target_position_offset()) + var visible_rect_size: Vector2 = get_viewport().get_viewport().size + viewport_position = viewport_position / visible_rect_size + _current_rotation = global_rotation + + if _current_rotation != global_rotation: + follow_position = _get_position_offset_distance() + + if _get_framed_side_offset() != Vector2.ZERO: + var target_position: Vector3 = _get_target_position_offset() + _follow_framed_offset + var glo_pos: Vector3 + + if dead_zone_width == 0 || dead_zone_height == 0: + if dead_zone_width == 0 && dead_zone_height != 0: + glo_pos = _get_position_offset_distance() + glo_pos.z = target_position.z + follow_position = glo_pos + elif dead_zone_width != 0 && dead_zone_height == 0: + glo_pos = _get_position_offset_distance() + glo_pos.x = target_position.x + follow_position = glo_pos + else: + follow_position = _get_position_offset_distance() + else: + if _current_rotation != global_rotation: + var opposite: float = sin(-global_rotation.x) * follow_distance + _get_target_position_offset().y + glo_pos.y = _get_target_position_offset().y + opposite + glo_pos.z = sqrt(pow(follow_distance, 2) - pow(opposite, 2)) + _get_target_position_offset().z + glo_pos.x = global_position.x + + follow_position = glo_pos + _current_rotation = global_rotation + else: + follow_position = target_position + else: + _follow_framed_offset = global_position - _get_target_position_offset() + _current_rotation = global_rotation + return + else: + follow_position = _get_position_offset_distance() + var unprojected_position: Vector2 = _get_raw_unprojected_position() + var viewport_width: float = get_viewport().size.x + var viewport_height: float = get_viewport().size.y + var camera_aspect: Camera3D.KeepAspect = get_viewport().get_camera_3d().keep_aspect + var visible_rect_size: Vector2 = get_viewport().get_viewport().size + + unprojected_position = unprojected_position - visible_rect_size / 2 + if camera_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: +# Landscape View + var aspect_ratio_scale: float = viewport_width / viewport_height + unprojected_position.x = (unprojected_position.x / aspect_ratio_scale + 1) / 2 + unprojected_position.y = (unprojected_position.y + 1) / 2 + else: +# Portrait View + var aspect_ratio_scale: float = viewport_height / viewport_width + unprojected_position.x = (unprojected_position.x + 1) / 2 + unprojected_position.y = (unprojected_position.y / aspect_ratio_scale + 1) / 2 + + viewport_position = unprojected_position + FollowMode.THIRD_PERSON: + if follow_target: + if not Engine.is_editor_hint(): + if is_instance_valid(follow_target) and is_instance_valid(_follow_spring_arm): + follow_position = _get_target_position_offset() + follow_target_node = _follow_spring_arm + else: + follow_position = _get_position_offset_distance() + + _interpolate_position(follow_position, delta, follow_target_node) + + +func _look_at() -> void: + match look_at_mode: + LookAtMode.MIMIC: + global_rotation = look_at_target.global_rotation + LookAtMode.SIMPLE: + _interpolate_rotation(look_at_target.global_position) + LookAtMode.GROUP: + if not _multiple_look_at_targets: + if look_at_targets.size() == 0: return + _interpolate_rotation(look_at_targets[0].global_position) + else: + var bounds: AABB = AABB(look_at_targets[0].global_position, Vector3.ZERO) + for node in look_at_targets: + bounds = bounds.expand(node.global_position) + _interpolate_rotation(bounds.get_center()) + + +func _get_target_position_offset() -> Vector3: + return follow_target.global_position + follow_offset + + +func _get_position_offset_distance() -> Vector3: + return _get_target_position_offset() + \ + get_transform().basis.z * Vector3(follow_distance, follow_distance, follow_distance) + + +func _set_follow_velocity(index: int, value: float) -> void: + _follow_velocity_ref[index] = value +func _interpolate_position(target_position: Vector3, delta: float, camera_target: Node3D = self) -> void: + if follow_damping: + for index in 3: + camera_target.global_position[index] = _smooth_damp( + target_position[index], + camera_target.global_position[index], + index, + _follow_velocity_ref[index], + _set_follow_velocity, + follow_damping_value[index] + ) + else: + camera_target.global_position = target_position + + +func _interpolate_rotation(target_trans: Vector3) -> void: + var direction: Vector3 = (target_trans - global_position + look_at_offset).normalized() + var target_basis: Basis = Basis().looking_at(direction) + var target_quat: Quaternion = target_basis.get_rotation_quaternion().normalized() + if look_at_damping: + var current_quat: Quaternion = quaternion.normalized() + + var damping_time: float = max(0.0001, look_at_damping_value) + var t: float = min(1.0, get_process_delta_time() / damping_time) + + var dot: float = current_quat.dot(target_quat) + + if dot < 0.0: + target_quat = -target_quat + dot = -dot + + dot = clampf(dot, -1.0, 1.0) + + var theta: float = acos(dot) * t + var sin_theta: float = sin(theta) + var sin_theta_total: float = sin(acos(dot)) + + # Stop interpolating once sin_theta_total reaches a very low value or 0 + if sin_theta_total < 0.00001: + return + + var ratio_a: float = cos(theta) - dot * sin_theta / sin_theta_total + var ratio_b: float = sin_theta / sin_theta_total + + quaternion = current_quat * ratio_a + target_quat * ratio_b + else: + quaternion = target_quat + + +func _smooth_damp(target_axis: float, self_axis: float, index: int, current_velocity: float, set_velocity: Callable, damping_time: float, rot: bool = false) -> float: + damping_time = maxf(0.0001, damping_time) + var omega: float = 2 / damping_time + var delta: float = get_process_delta_time() + var x: float = omega * delta + var exponential: float = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x) + var diff: float = self_axis - target_axis + var _target_axis: float = target_axis + + var max_change: float = INF * damping_time + diff = clampf(diff, -max_change, max_change) + target_axis = self_axis - diff + + var temp: float = (current_velocity + omega * diff) * delta + set_velocity.call(index, (current_velocity - omega * temp) * exponential) + var output: float = target_axis + (diff + temp) * exponential + + ## To prevent overshooting + if (_target_axis - self_axis > 0.0) == (output > _target_axis): + output = _target_axis + set_velocity.call(index, (output - _target_axis) / delta) + + return output + + +func _get_raw_unprojected_position() -> Vector2: + return get_viewport().get_camera_3d().unproject_position(follow_target.global_position + follow_offset) + + +func _on_dead_zone_changed() -> void: + global_position = _get_position_offset_distance() + + +func _get_framed_side_offset() -> Vector2: + var frame_out_bounds: Vector2 + + if viewport_position.x < 0.5 - dead_zone_width / 2: + # Is outside left edge + frame_out_bounds.x = -1 + + if viewport_position.y < 0.5 - dead_zone_height / 2: + # Is outside top edge + frame_out_bounds.y = 1 + + if viewport_position.x > 0.5 + dead_zone_width / 2: + # Is outside right edge + frame_out_bounds.x = 1 + + if viewport_position.y > 0.5001 + dead_zone_height / 2: # 0.501 to resolve an issue where the bottom vertical Dead Zone never becoming 0 when the Dead Zone Vertical parameter is set to 0 + # Is outside bottom edge + frame_out_bounds.y = -1 + + return frame_out_bounds + +func _set_layer(current_layers: int, layer_number: int, value: bool) -> int: + var mask: int = current_layers + + # From https://github.com/godotengine/godot/blob/51991e20143a39e9ef0107163eaf283ca0a761ea/scene/3d/camera_3d.cpp#L638 + if layer_number < 1 or layer_number > 20: + printerr("Render layer must be between 1 and 20.") + else: + if value: + mask |= 1 << (layer_number - 1) + else: + mask &= ~(1 << (layer_number - 1)) + + return mask + +func _has_valid_pcam_owner() -> bool: + if not is_instance_valid(get_pcam_host_owner()): return false + if not is_instance_valid(get_pcam_host_owner().camera_3d): return false + return true + +#endregion + +# TBD +#func get_unprojected_position() -> Vector2: + #var unprojected_position: Vector2 = _get_raw_unprojected_position() + #var viewport_width: float = get_viewport().size.x + #var viewport_height: float = get_viewport().size.y + #var camera_aspect: Camera3D.KeepAspect = get_viewport().get_camera_3d().keep_aspect + #var visible_rect_size: Vector2 = get_viewport().size +# + #unprojected_position = unprojected_position - visible_rect_size / 2 + #if camera_aspect == Camera3D.KeepAspect.KEEP_HEIGHT: +## print("Landscape View") + #var aspect_ratio_scale: float = viewport_width / viewport_height + #unprojected_position.x = (unprojected_position.x / aspect_ratio_scale + 1) / 2 + #unprojected_position.y = (unprojected_position.y + 1) / 2 + #else: +## print("Portrait View") + #var aspect_ratio_scale: float = viewport_height / viewport_width + #unprojected_position.x = (unprojected_position.x + 1) / 2 + #unprojected_position.y = (unprojected_position.y / aspect_ratio_scale + 1) / 2 +# + #return unprojected_position + + +#region Setter & Getter Functions + +## Assigns the value of the [param has_tweened] property.[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_has_tweened(caller: Node, value: bool) -> void: + if is_instance_of(caller, PhantomCameraHost): + _has_tweened = value + else: + printerr("Can only be called PhantomCameraHost class") +## Returns the current [param has_tweened] value. +func get_has_tweened() -> bool: + return _has_tweened + + +## Assigns the [param PhantomCamera3D] to a new [PhantomCameraHost].[br] +## [b][color=yellow]Important:[/color][/b] This is currently restricted to +## plugin internals. Proper support will be added in issue #26. +func set_pcam_host_owner(value: PhantomCameraHost) -> void: + pcam_host_owner = value + if is_instance_valid(pcam_host_owner): + pcam_host_owner.pcam_added_to_scene(self) + + #if value.size() == 1: +# else: +# for camera_host in camera_host_group: +# print("Multiple PhantomCameraBases in scene") +# print(pcam_host_group) +# print(pcam.get_tree().get_nodes_in_group(PhantomCameraGroupNames.PHANTOM_CAMERA_HOST_GROUP_NAME)) +# multiple_pcam_host_group.append(camera_host) +# return null +## Sets a PCamHost to +#func assign_pcam_host(value: PhantomCameraHost) -> void: + #pcam_host_owner = value +## Gets the current [PhantomCameraHost] this [param PhantomCamera3D] is +## assigned to. +func get_pcam_host_owner() -> PhantomCameraHost: + return pcam_host_owner + + +## Assigns new [member priority] value. +func set_priority(value: int) -> void: + priority = abs(value) # TODO - Make any minus values be 0 + if _has_valid_pcam_owner(): + get_pcam_host_owner().pcam_priority_updated(self) +## Gets current [param Priority] value. +func get_priority() -> int: + return priority + + +## Assigns a new [PhantomCameraTween] resource to the [param PhantomCamera3D]. +func set_tween_resource(value: PhantomCameraTween) -> void: + tween_resource = value +## Gets the [param PhantomCameraTween] resource assigned to the [param PhantomCamera3D]. +## Returns null if there's nothing assigned to it. +func get_tween_resource() -> PhantomCameraTween: + return tween_resource + +## Assigns a new [param Tween Duration] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_duration(value: float) -> void: + tween_resource.duration = value +## Gets the current [param Tween] Duration value. The duration value is in +## [param seconds]. +func get_tween_duration() -> float: + return tween_resource.duration + +## Assigns a new [param Tween Transition] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_transition(value: int) -> void: + tween_resource.transition = value +## Gets the current [param Tween Transition] value. +func get_tween_transition() -> int: + return tween_resource.transition + +## Assigns a new [param Tween Ease] to the [member tween_resource] value.[br] +## The duration value is in seconds. +func set_tween_ease(value: int) -> void: + tween_resource.ease = value +## Gets the current [param Tween Ease] value. +func get_tween_ease() -> int: + return tween_resource.ease + +## Sets the [param PhantomCamera3D] active state[br] +## [b][color=yellow]Important:[/color][/b] This value can only be changed +## from the [PhantomCameraHost] script. +func set_is_active(node: Node, value: bool) -> void: + if node is PhantomCameraHost: + _is_active = value + else: + printerr("PCams can only be set from the PhantomCameraHost") +## Gets current active state of the [param PhantomCamera3D]. +## If it returns true, it means the [param PhantomCamera3D] is what the +## [param Camera3D] is currently following. +func is_active() -> bool: + return _is_active + + +## Enables or disables the [member tween_on_load]. +func set_tween_on_load(value: bool) -> void: + tween_on_load = value +## Gets the current [member tween_on_load] value. +func get_tween_on_load() -> bool: + return tween_on_load + + +## Gets the current follow mode as an enum int based on [member FollowMode] enum.[br] +## [b]Note:[/b] Setting [member follow_mode] has purposely not been added. +## A separate [param PhantomCamera3D] instance should be used instead. +func get_follow_mode() -> int: + return follow_mode + + +## Assigns a new [Node3D] as the [member follow_target]. +func set_follow_target(value: Node3D) -> void: + if follow_target == value: return + follow_target = value + + _follow_target_physics_based = false + if is_instance_valid(value): + _should_follow = true + _check_physics_body(value) + else: + _should_follow = false + follow_target_changed.emit() + notify_property_list_changed() +## Removes the current [Node3D] [member follow_target]. +func erase_follow_target() -> void: + if follow_target == null: return + _follow_target_physics_based = false + _should_follow = false + follow_target = null + follow_target_changed.emit() +## Gets the current Node3D target. +func get_follow_target() -> Node3D: + return follow_target + + +## Assigns a new [Path3D] to the [member follow_path] property. +func set_follow_path(value: Path3D) -> void: + follow_path = value +## Erases the current [Path3D] from [member follow_path] property. +func erase_follow_path() -> void: + follow_path = null +## Gets the current [Path3D] from the [member follow_path] property. +func get_follow_path() -> Path3D: + return follow_path + + +## Assigns a new [param follow_targets] array value. +func set_follow_targets(value: Array[Node3D]) -> void: + if follow_targets == value: return + + follow_targets = value + + if follow_targets.is_empty(): + _should_follow = false + _has_multiple_follow_targets = false + _follow_target_physics_based = false + return + + var valid_instances: int + _follow_target_physics_based = false + for target in follow_targets: + if is_instance_valid(target): + _should_follow = true + valid_instances += 1 + + _check_physics_body(target) + + if valid_instances > 1: + _has_multiple_follow_targets = true +## Adds a single [Node3D] to [member follow_targets] array. +func append_follow_targets(value: Node3D) -> void: + if not is_instance_valid(value): + printerr(value, " is not a valid instance") + return + + if not follow_targets.has(value): + follow_targets.append(value) + _should_follow = true + _has_multiple_follow_targets = true + _check_physics_body(value) + else: + printerr(value, " is already part of Follow Group") +## Adds an Array of type [Node3D] to [member follow_targets] array. +func append_follow_targets_array(value: Array[Node3D]) -> void: + for target in value: + if not is_instance_valid(target): continue + if not follow_targets.has(target): + follow_targets.append(target) + _should_follow = true + _check_physics_body(target) + if follow_targets.size() > 1: + _has_multiple_follow_targets = true + else: + printerr(value, " is already part of Follow Group") +## Removes [Node3D] from [member follow_targets]. +func erase_follow_targets(value: Node3D) -> void: + follow_targets.erase(value) + _follow_target_physics_based = false + for target in follow_targets: + _check_physics_body(target) + + if follow_targets.size() < 2: + _has_multiple_follow_targets = false + if follow_targets.size() < 1: + _should_follow = false +## Gets all [Node3D] from [follow_targets]. +func get_follow_targets() -> Array[Node3D]: + return follow_targets + +## Returns true if the [param PhantomCamera3D] has more than one member in the +## [member follow_targets] array. +func get_has_multiple_follow_targets() -> bool: + return _has_multiple_follow_targets + +func _check_physics_body(target: Node3D) -> void: + if target is PhysicsBody3D: + ## NOTE - Feature Toggle + #if Engine.get_version_info().major == 4 and \ + #Engine.get_version_info().minor < XX: + if ProjectSettings.get_setting("phantom_camera/tips/show_jitter_tips"): + print_rich("Following or Looking at a [b]PhysicsBody3D[/b] node will likely result in jitter - on lower physics ticks in particular.") + print_rich("Will have proper support once 3D Physics Interpolation becomes part of the core Godot engine.") + print_rich("Until then, try following the guide on the [url=https://phantom-camera.dev/support/faq#i-m-seeing-jitter-what-can-i-do]documentation site[/url] for better results.") + print_rich("This tip can be disabled from within [code]Project Settings / Phantom Camera / Tips / Show Jitter Tips[/code]") + return + ## TODO - Enable once Godot supports 3D Physics Interpolation + #elif not ProjectSettings.get_setting("physics/common/physics_interpolation"): + #printerr("Physics Interpolation is disabled in the Project Settings, recommend enabling it to smooth out physics-based camera movement") + #_follow_target_physics_based = true + + +## Assigns a new [param Vector3] for the [param follow_offset] property. +func set_follow_offset(value: Vector3) -> void: + follow_offset = value + +## Gets the current [param Vector3] for the [param follow_offset] property. +func get_follow_offset() -> Vector3: + return follow_offset + + +## Enables or disables [member follow_damping]. +func set_follow_damping(value: bool) -> void: + follow_damping = value + notify_property_list_changed() + +## Gets the currents [member follow_damping] property. +func get_follow_damping() -> bool: + return follow_damping + + +## Assigns new [member follow_damping_value] value. +func set_follow_damping_value(value: Vector3) -> void: + ## TODO - Should be using @export_range once minimum version support is Godot 4.3 + if value.x < 0: value.x = 0 + elif value.y < 0: value.y = 0 + elif value.z < 0: value.z = 0 + follow_damping_value = value + +## Gets the currents [member follow_damping_value] value. +func get_follow_damping_value() -> Vector3: + return follow_damping_value + + +## Assigns a new [member follow_distance] value. +func set_follow_distance(value: float) -> void: + follow_distance = value + +## Gets [member follow_distance] value. +func get_follow_distance() -> float: + return follow_distance + + +## Enables or disables [member auto_follow_distance] when using Group Follow. +func set_auto_follow_distance(value: bool) -> void: + auto_follow_distance = value + notify_property_list_changed() + +## Gets [member auto_follow_distance] state. +func get_auto_follow_distance() -> bool: + return auto_follow_distance + + +## Assigns new [member auto_follow_distance_min] value. +func set_auto_follow_distance_min(value: float) -> void: + auto_follow_distance_min = value + +## Gets [member auto_follow_distance_min] value. +func get_auto_follow_distance_min() -> float: + return auto_follow_distance_min + + +## Assigns new [member auto_follow_distance_max] value. +func set_auto_follow_distance_max(value: float) -> void: + auto_follow_distance_max = value +## Gets [member auto_follow_distance_max] value. +func get_auto_follow_distance_max() -> float: + return auto_follow_distance_max + + +## Assigns new [member auto_follow_distance_divisor] value. +func set_auto_follow_distance_divisor(value: float) -> void: + auto_follow_distance_divisor = value + +## Gets [member auto_follow_distance_divisor] value. +func get_auto_follow_distance_divisor() -> float: + return auto_follow_distance_divisor + + +## Assigns new rotation (in radians) value to [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func set_third_person_rotation(value: Vector3) -> void: + _follow_spring_arm.rotation = value + +## Gets the rotation value (in radians) from the [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func get_third_person_rotation() -> Vector3: + return _follow_spring_arm.rotation + + +## Assigns new rotation (in degrees) value to [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func set_third_person_rotation_degrees(value: Vector3) -> void: + _follow_spring_arm.rotation_degrees = value + +## Gets the rotation value (in degrees) from the [SpringArm3D] for +## [param ThirdPerson] [enum FollowMode]. +func get_third_person_rotation_degrees() -> Vector3: + return _follow_spring_arm.rotation_degrees + + +## Assigns new [Quaternion] value to [SpringArm3D] for [param ThirdPerson] +## [enum FollowMode]. +func set_third_person_quaternion(value: Quaternion) -> void: + _follow_spring_arm.quaternion = value + +## Gets the [Quaternion] value of the [SpringArm3D] for [param ThirdPerson] +## [enum Follow mode]. +func get_third_person_quaternion() -> Quaternion: + return _follow_spring_arm.quaternion + + +## Assigns a new ThirdPerson [member SpringArm3D.length] value. +func set_spring_length(value: float) -> void: + follow_distance = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.spring_length = value + +## Gets the [member SpringArm3D.length] +## from a [param ThirdPerson] [enum follow_mode] instance. +func get_spring_length() -> float: + return follow_distance + + +## Assigns a new [member collision_mask] to the [SpringArm3D] when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_collision_mask(value: int) -> void: + collision_mask = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.collision_mask = collision_mask + +## Enables or disables a specific [member collision_mask] layer for the +## [SpringArm3D] when [enum FollowMode] is set to [param ThirdPerson]. +func set_collision_mask_value(value: int, enabled: bool) -> void: + collision_mask = _set_layer(collision_mask, value, enabled) + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.collision_mask = collision_mask + +## Gets [member collision_mask] from the [SpringArm3D] when [enum FollowMode] +## is set to [param ThirdPerson]. +func get_collision_mask() -> int: + return collision_mask + + +## Assigns a new [SpringArm3D.shape] when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_shape(value: Shape3D) -> void: + shape = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.shape = shape + +## Gets [param ThirdPerson] [member SpringArm3D.shape] value. +func get_shape() -> Shape3D: + return shape + + +## Assigns a new [member SpringArm3D.margin] value when [enum FollowMode] +## is set to [param ThirdPerson]. +func set_margin(value: float) -> void: + margin = value + if is_instance_valid(_follow_spring_arm): + _follow_spring_arm.margin = margin + +## Gets the [SpringArm3D.margin] when [enum FollowMode] is set to +## [param ThirdPerson]. +func get_margin() -> float: + return margin + + +## Gets the current [member look_at_mode]. Value is based on [enum LookAtMode] +## enum.[br] +## Note: To set a new [member look_at_mode], a separate [param PhantomCamera3D] should +## be used. +func get_look_at_mode() -> int: + return look_at_mode + + +## Assigns new [Node3D] as [member look_at_target]. +func set_look_at_target(value: Node3D) -> void: + look_at_target = value + _check_physics_body(value) + #_look_at_target_node = get_node_or_null(value) + look_at_target_changed + if is_instance_valid(look_at_target): + _should_look_at = true + else: + _should_look_at = false + notify_property_list_changed() + +## Gets current [Node3D] from [member look_at_target] property. +func get_look_at_target(): + return look_at_target + + +## Sets an array of type [Node3D] to [member set_look_at_targets]. +func set_look_at_targets(value: Array[Node3D]) -> void: + if look_at_targets == value: return + look_at_targets = value + + if look_at_mode != LookAtMode.GROUP: return + + if look_at_targets.is_empty(): + _should_look_at = false + _multiple_look_at_targets = false + else: + var valid_instances: int = 0 + for target in look_at_targets: + if is_instance_valid(target): + valid_instances += 1 + _should_look_at = true + _valid_look_at_targets.append(target) + _check_physics_body(target) + + if valid_instances > 1: + _multiple_look_at_targets = true + elif valid_instances == 0: + _should_look_at = false + _multiple_look_at_targets = false + notify_property_list_changed() + +## Appends a [Node3D] to [member look_at_targets] array. +func append_look_at_target(value: Node3D) -> void: + if not look_at_targets.has(value): + look_at_targets.append(value) + _valid_look_at_targets.append(value) + _check_physics_body(value) + if look_at_targets.size() > 1: + _multiple_look_at_targets = true + else: + printerr(value, " is already part of Look At Group") + +## Appends an array of type [Node3D] to [member look_at_targets] array. +func append_look_at_targets_array(value: Array[NodePath]) -> void: + for val in value: + if not look_at_targets.has(get_node(val)): + var node: Node3D = get_node(val) + look_at_targets.append(node) + _valid_look_at_targets.append(node) + _check_physics_body(node) + if look_at_targets.size() > 1: + _multiple_look_at_targets = true + else: + printerr(val, " is already part of Look At Group") + +## Removes [Node3D] from [member look_at_targets] array. +func erase_look_at_targets_member(value: Node3D) -> void: + look_at_targets.erase(value) + _valid_look_at_targets.erase(value) + _check_physics_body(value) + if look_at_targets.size() < 1: + _multiple_look_at_targets = false + +## Gets all the [Node3D] instances in [member look_at_targets]. +func get_look_at_targets() -> Array[Node3D]: + return look_at_targets + + +## Assigns a new [Vector3] to the [member look_at_offset] value. +func set_look_at_offset(value: Vector3) -> void: + look_at_offset = value + +## Gets the current [member look_at_offset] value. +func get_look_at_offset() -> Vector3: + return look_at_offset + + +## Enables or disables [member look_at_damping]. +func set_look_at_damping(value: bool) -> void: + look_at_damping = value + notify_property_list_changed() + +## Gets the currents [member look_at_damping] property. +func get_look_at_damping() -> bool: + return look_at_damping + + +## Assigns new [member look_at_damping_value] value. +func set_look_at_damping_value(value: float) -> void: + look_at_damping_value = value + +## Gets the currents [member look_at_damping_value] value. +func get_look_at_damping_value() -> float: + return look_at_damping_value + + +## Sets [member inactive_update_mode] property. +func set_inactive_update_mode(value: int) -> void: + inactive_update_mode = value + +## Gets [member inactive_update_mode] property. +func get_inactive_update_mode() -> int: + return inactive_update_mode + + +## Assigns a [Camera3DResource]. +func set_camera_3d_resource(value: Camera3DResource) -> void: + camera_3d_resource = value + +## Gets the [Camera3DResource] +func get_camera_3d_resource() -> Camera3DResource: + return camera_3d_resource + + +## Assigns a new [member Camera3D.cull_mask] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_cull_mask(value: int) -> void: + camera_3d_resource.cull_mask = value + if _is_active: get_pcam_host_owner().camera_3d.cull_mask = value + +## Enables or disables a specific [member Camera3D.cull_mask] layer.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_cull_mask_value(layer_number: int, value: bool) -> void: + var mask: int = _set_layer(get_cull_mask(), layer_number, value) + camera_3d_resource.cull_mask = mask + if _is_active: get_pcam_host_owner().camera_3d.cull_mask = mask + +## Gets the [member Camera3D.cull_mask] value assigned to the [Camera3DResource]. +func get_cull_mask() -> int: + return camera_3d_resource.cull_mask + + +## Assigns a new [member Camera3D.h_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_h_offset(value: float) -> void: + camera_3d_resource.h_offset = value + if _is_active: get_pcam_host_owner().camera_3d.h_offset = value + +## Gets the [member Camera3D.h_offset] value assigned to the [param Camera3DResource]. +func get_h_offset() -> float: + return camera_3d_resource.h_offset + + +## Assigns a new [Camera3D.v_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_v_offset(value: float) -> void: + camera_3d_resource.v_offset = value + if _is_active: get_pcam_host_owner().camera_3d.v_offset = value + +## Gets the [member Camera3D.v_offset] value assigned to the [param Camera3DResource]. +func get_v_offset() -> float: + return camera_3d_resource.v_offset + + +## Assigns a new [Camera3D.projection] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_projection(value: int) -> void: + camera_3d_resource.projection = value + if _is_active: get_pcam_host_owner().camera_3d.projection = value + +## Gets the [member Camera3D.projection] value assigned to the [param Camera3DResource]. +func get_projection() -> int: + return camera_3d_resource.projection + + +## Assigns a new [member Camera3D.fov] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_fov(value: float) -> void: + camera_3d_resource.fov = value + if _is_active: get_pcam_host_owner().camera_3d.fov = value + +## Gets the [member Camera3D.fov] value assigned to the [param Camera3DResource]. +func get_fov() -> float: + return camera_3d_resource.fov + + +## Assigns a new [member Camera3D.size] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_size(value: float) -> void: + camera_3d_resource.size = value + if _is_active: get_pcam_host_owner().camera_3d.size = value + +## Gets the [member Camera3D.size] value assigned to the [param Camera3DResource]. +func get_size() -> float: + return camera_3d_resource.size + + +## Assigns a new [member Camera3D.frustum_offset] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_frustum_offset(value: Vector2) -> void: + camera_3d_resource.frustum_offset = value + if _is_active: get_pcam_host_owner().camera_3d.frustum_offset = value + +## Gets the [member Camera3D.frustum_offset] value assigned to the [param Camera3DResource]. +func get_frustum_offset() -> Vector2: + return camera_3d_resource.frustum_offset + + +## Assigns a new [member Camera3D.near] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_near(value: float) -> void: + camera_3d_resource.near = value + if _is_active: get_pcam_host_owner().camera_3d.near = value + +## Gets the [member Camera3D.near] value assigned to the [param Camera3DResource]. +func get_near() -> float: + return camera_3d_resource.near + + +## Assigns a new [member Camera3D.far] value.[br] +## [b]Note:[/b] This will override and make the [param Camera3DResource] unique to +## this [param PhantomCamera3D]. +func set_far(value: float) -> void: + camera_3d_resource.far = value + if _is_active: get_pcam_host_owner().camera_3d.far = value + +## Gets the [member Camera3D.far] value assigned to the [param Camera3DResource]. +func get_far() -> float: + return camera_3d_resource.far + + +func set_follow_target_physics_based(value: bool, caller: Node) -> void: + if is_instance_of(caller, PhantomCameraHost): + _follow_target_physics_based = value + else: + printerr("set_follow_target_physics_based is for internal use only.") + +func get_follow_target_physics_based() -> bool: + return _follow_target_physics_based + + +func get_class() -> String: + return "PhantomCamera3D" + + +func is_class(value) -> bool: + return value == "PhantomCamera3D" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd new file mode 100644 index 0000000..306a06f --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd @@ -0,0 +1,28 @@ +@tool +extends RefCounted + +#region Constants + +#const PhantomCameraHost: Script = preload("res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd") + +const CAMERA_2D_NODE_NAME: StringName = "Camera2D" +const CAMERA_3D_NODE_NAME: StringName = "Camera3D" +const PCAM_HOST_NODE_NAME: StringName = "PhantomCameraHost" +const PCAM_2D_NODE_NAME: StringName = "PhantomCamera2D" +const PCAM_3D_NODE_NAME: StringName = "PhantomCamera3D" +const PCAM_HOST: StringName = "phantom_camera_host" + +const COLOR_2D: Color = Color("8DA5F3") +const COLOR_3D: Color = Color("FC7F7F") +const COLOR_PCAM: Color = Color("3AB99A") +const COLOR_PCAM_33: Color = Color("3ab99a33") +const PCAM_HOST_COLOR: Color = Color("E0E0E0") + +#endregion + +#region Group Names + +const PCAM_GROUP_NAME: StringName = "phantom_camera_group" +const PCAM_HOST_GROUP_NAME: StringName = "phantom_camera_host_group" + +#endregion diff --git a/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd b/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd new file mode 100644 index 0000000..ca8c014 --- /dev/null +++ b/addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd @@ -0,0 +1,697 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_host.svg") +class_name PhantomCameraHost +extends Node + +## Controls a scene's [Camera2D] (2D scenes) and [Camera3D] (3D scenes). +## +## All instantiated [param PhantomCameras] in a scene are assign to and managed by a +## PhantomCameraHost. It is what determines which [param PhantomCamera] should +## be active. + +#region Constants + +const _constants := preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") + +#endregion + + +#region Signals + +## Updates the viewfinder [param dead zones] sizes.[br] +## [b]Note:[/b] This is only being used in the editor viewfinder UI. +signal update_editor_viewfinder + +#endregion + + +#region Variables + +enum InterpolationMode { + AUTO = 0, + IDLE = 1, + PHYSICS = 2, +} + +## TBD - For when Godot 4.3 becomes the minimum version +#@export var interpolation_mode: InterpolationMode = InterpolationMode.AUTO: + #set = set_interpolation_mode, + #get = get_interpolation_mode + + +## For 2D scenes, is the [Camera2D] instance the [param PhantomCameraHost] controls. +var camera_2d: Camera2D = null +## For 3D scenes, is the [Camera3D] instance the [param PhantomCameraHost] controls. +var camera_3d = null ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + +var _pcam_list: Array[Node] = [] + +var _active_pcam_2d: PhantomCamera2D = null +var _active_pcam_3d = null ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. +var _active_pcam_priority: int = -1 +var _active_pcam_missing: bool = true +var _active_pcam_has_damping: bool = false +var _follow_target_physics_based: bool = false + +var _prev_active_pcam_2d_transform: Transform2D = Transform2D() +var _prev_active_pcam_3d_transform: Transform3D = Transform3D() + +var _trigger_pcam_tween: bool = false +var _tween_elapsed_time: float = 0 +var _tween_duration: float = 0 + +var _multiple_pcam_hosts: bool = false + +var _is_child_of_camera: bool = false +var _is_2D: bool = false + + +var _viewfinder_node: Control = null +var _viewfinder_needed_check: bool = true + +var _camera_zoom: Vector2 = Vector2.ONE + +#region Camera3DResource +var _prev_cam_h_offset: float = 0 +var _cam_h_offset_changed: bool = false + +var _prev_cam_v_offset: float = 0 +var _cam_v_offset_changed: bool = false + +var _prev_cam_fov: float = 75 +var _cam_fov_changed: bool = false + +var _prev_cam_size: float = 1 +var _cam_size_changed: bool = false + +var _prev_cam_frustum_offset: Vector2 = Vector2.ZERO +var _cam_frustum_offset_changed: bool = false + +var _prev_cam_near: float = 0.05 +var _cam_near_changed: bool = false + +var _prev_cam_far: float = 4000 +var _cam_far_changed: bool = false +#endregion + +var _active_pcam_2d_glob_transform: Transform2D = Transform2D() +var _active_pcam_3d_glob_transform: Transform3D = Transform3D() + +#endregion + + +#region Private Functions + +## TBD - For when Godot 4.3 becomes a minimum version +#func _validate_property(property: Dictionary) -> void: + #if property.name == "interpolation_mode" and get_parent() is Node3D: + #property.usage = PROPERTY_USAGE_NO_EDITOR + + +func _get_configuration_warnings() -> PackedStringArray: + var parent = get_parent() + + if _is_2D: + if not parent is Camera2D: + return ["Needs to be a child of a Camera2D in order to work."] + else: + return [] + else: + if not parent.is_class("Camera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + return ["Needs to be a child of a Camera3D in order to work."] + else: + return [] + + +func _enter_tree() -> void: + var parent = get_parent() + + if parent is Camera2D or parent.is_class("Camera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _is_child_of_camera = true + if parent is Camera2D: + _is_2D = true + camera_2d = parent + ## Force applies position smoothing to be disabled + ## This is to prevent overlap with the interpolation of the PCam2D. + camera_2d.set_position_smoothing_enabled(false) + else: + _is_2D = false + camera_3d = parent + + PhantomCameraManager.pcam_host_added(self) +# var already_multi_hosts: bool = multiple_pcam_hosts + + _check_camera_host_amount() + + if _multiple_pcam_hosts: + printerr( + "Only one PhantomCameraHost can exist in a scene", + "\n", + "Multiple PhantomCameraHosts will be supported in https://github.com/ramokz/phantom-camera/issues/26" + ) + queue_free() + + if _is_2D: + if not PhantomCameraManager.get_phantom_camera_2ds().is_empty(): + for pcam in PhantomCameraManager.get_phantom_camera_2ds(): + pcam_added_to_scene(pcam) + pcam.set_pcam_host_owner(self) + else: + if not PhantomCameraManager.get_phantom_camera_3ds().is_empty(): + for pcam in PhantomCameraManager.get_phantom_camera_3ds(): + pcam_added_to_scene(pcam) + pcam.set_pcam_host_owner(self) + + +func _exit_tree() -> void: + PhantomCameraManager.pcam_host_removed(self) + _check_camera_host_amount() + + +func _ready() -> void: + if not is_instance_valid(_active_pcam_2d) or is_instance_valid(_active_pcam_3d): return + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + +func _check_camera_host_amount() -> void: + if PhantomCameraManager.get_phantom_camera_hosts().size() > 1: + _multiple_pcam_hosts = true + else: + _multiple_pcam_hosts = false + + +func _assign_new_active_pcam(pcam: Node) -> void: + var no_previous_pcam: bool + + if is_instance_valid(_active_pcam_2d) or is_instance_valid(_active_pcam_3d): + if _is_2D: + _prev_active_pcam_2d_transform = camera_2d.get_global_transform() + _active_pcam_2d.queue_redraw() + _active_pcam_2d.set_is_active(self, false) + _active_pcam_2d.became_inactive.emit() + + if _trigger_pcam_tween: + _active_pcam_2d.tween_interrupted.emit(pcam) + else: + _prev_active_pcam_3d_transform = camera_3d.get_global_transform() + + _prev_cam_h_offset = camera_3d.h_offset + _prev_cam_v_offset = camera_3d.v_offset + _prev_cam_fov = camera_3d.fov + _prev_cam_size = camera_3d.size + _prev_cam_frustum_offset = camera_3d.frustum_offset + _prev_cam_near = camera_3d.near + _prev_cam_far = camera_3d.far + + _active_pcam_3d.set_is_active(self, false) + _active_pcam_3d.became_inactive.emit() + + if _trigger_pcam_tween: + _active_pcam_3d.tween_interrupted.emit(pcam) + else: + no_previous_pcam = true + + ## Assign newly active pcam + if _is_2D: + _active_pcam_2d = pcam + _active_pcam_priority = _active_pcam_2d.priority + _active_pcam_has_damping = _active_pcam_2d.follow_damping + _tween_duration = _active_pcam_2d.get_tween_duration() + else: + _active_pcam_3d = pcam + _active_pcam_priority = _active_pcam_3d.priority + _active_pcam_has_damping = _active_pcam_3d.follow_damping + _tween_duration = _active_pcam_3d.get_tween_duration() + + # Checks if the Camera3DResource has changed from previous Active PCam3D + if _active_pcam_3d.get_camera_3d_resource(): + if _prev_cam_h_offset != _active_pcam_3d.get_h_offset(): + _cam_h_offset_changed = true + if _prev_cam_v_offset != _active_pcam_3d.get_v_offset(): + _cam_v_offset_changed = true + if _prev_cam_fov != _active_pcam_3d.get_fov(): + _cam_fov_changed = true + if _prev_cam_size != _active_pcam_3d.get_size(): + _cam_size_changed = true + if _prev_cam_frustum_offset != _active_pcam_3d.get_frustum_offset(): + _cam_frustum_offset_changed = true + if _prev_cam_near != _active_pcam_3d.get_near(): + _cam_near_changed = true + if _prev_cam_far != _active_pcam_3d.get_far(): + _cam_far_changed = true + + if _is_2D: + if _active_pcam_2d.show_viewfinder_in_play: + _viewfinder_needed_check = true + + _active_pcam_2d.set_is_active(self, true) + _active_pcam_2d.became_active.emit() + _camera_zoom = camera_2d.get_zoom() + ## TODO - Needs 3D variant once Godot supports physics_interpolation for 3D scenes. + var _physics_based: bool + + ## NOTE - Only supported in Godot 4.3 or above + if Engine.get_version_info().major == 4 and \ + Engine.get_version_info().minor >= 3: + ## TBD - For when Godot 4.3 becomes the minimum version + #if interpolation_mode == InterpolationMode.IDLE: + #_physics_based = false + #elif interpolation_mode == InterpolationMode.PHYSICS: + #_physics_based = true + #else: + #_physics_based = _active_pcam.follow_target_physics_based + + # TBD - REMOVE this line once Godot 4.3 becomes the minimum version + _physics_based = _active_pcam_2d.get_follow_target_physics_based() + + if _physics_based: + _follow_target_physics_based = true + _active_pcam_2d.set_follow_target_physics_based(true, self) + ## TODO - Temporary solution to support Godot 4.2 + ## Remove line below and uncomment the following once Godot 4.3 is min verison. + camera_2d.call("reset_physics_interpolation") + camera_2d.set("physics_interpolation_mode", 1) + #camera_2d.reset_physics_interpolation() + #camera_2d.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_ON + else: + _follow_target_physics_based = false + _active_pcam_2d.set_follow_target_physics_based(false, self) + ## TODO - Temporary solution to support Godot 4.2 + ## Remove line below and uncomment the following once Godot 4.3 is min verison. + camera_2d.set("physics_interpolation_mode", 2) + #camera_2d.physics_interpolation_mode = Node.PHYSICS_INTERPOLATION_MODE_OFF + else: + _follow_target_physics_based = false + if _active_pcam_3d.show_viewfinder_in_play: + _viewfinder_needed_check = true + + _active_pcam_3d.set_is_active(self, true) + _active_pcam_3d.became_active.emit() + if _active_pcam_3d.get_camera_3d_resource(): + camera_3d.cull_mask = _active_pcam_3d.get_cull_mask() + camera_3d.projection = _active_pcam_3d.get_projection() + + if no_previous_pcam: + if _is_2D: + _prev_active_pcam_2d_transform = _active_pcam_2d.get_global_transform() + else: + _prev_active_pcam_3d_transform = _active_pcam_3d.get_global_transform() + + _tween_elapsed_time = 0 + if not pcam.get_has_tweened(): + _trigger_pcam_tween = true + else: + _trigger_pcam_tween = false + + +func _find_pcam_with_highest_priority() -> void: + for pcam in _pcam_list: + if pcam.get_priority() > _active_pcam_priority: + _assign_new_active_pcam(pcam) + + pcam.set_has_tweened(self, false) + + _active_pcam_missing = false + + +func _process(delta: float): + if _follow_target_physics_based or _active_pcam_missing: return + + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + if _trigger_pcam_tween: + _pcam_tween(delta) + else: + _pcam_follow(delta) + + +func _physics_process(delta: float): + if not _follow_target_physics_based or _active_pcam_missing: return + + if _is_2D: + _active_pcam_2d_glob_transform = _active_pcam_2d.get_global_transform() + else: + _active_pcam_3d_glob_transform = _active_pcam_3d.get_global_transform() + + if _trigger_pcam_tween: + _pcam_tween(delta) + else: + _pcam_follow(delta) + + +func _pcam_follow(delta: float) -> void: + if _is_2D: + if not is_instance_valid(_active_pcam_2d): return + else: + if not is_instance_valid(_active_pcam_3d): return + + if _active_pcam_missing or not _is_child_of_camera: return + # When following + _pcam_set_position(delta) + + if _viewfinder_needed_check: + _show_viewfinder_in_play() + _viewfinder_needed_check = false + + # TODO - Should be able to find a more efficient way using signals + if Engine.is_editor_hint(): + if not _is_2D: + if _active_pcam_3d.get_camera_3d_resource(): + camera_3d.cull_mask = _active_pcam_3d.get_cull_mask() + camera_3d.h_offset = _active_pcam_3d.get_h_offset() + camera_3d.v_offset = _active_pcam_3d.get_v_offset() + camera_3d.projection = _active_pcam_3d.get_projection() + camera_3d.fov = _active_pcam_3d.get_fov() + camera_3d.size = _active_pcam_3d.get_size() + camera_3d.frustum_offset = _active_pcam_3d.get_frustum_offset() + camera_3d.near = _active_pcam_3d.get_near() + camera_3d.far = _active_pcam_3d.get_far() + + +func _pcam_set_position(delta: float) -> void: + if _is_2D: + if _active_pcam_2d.snap_to_pixel: + var snap_to_pixel_glob_transform: Transform2D = _active_pcam_2d_glob_transform + snap_to_pixel_glob_transform.origin = snap_to_pixel_glob_transform.origin.round() + camera_2d.global_transform = snap_to_pixel_glob_transform + else: + camera_2d.global_transform =_active_pcam_2d_glob_transform + camera_2d.zoom = _active_pcam_2d.zoom + else: + camera_3d.global_transform = _active_pcam_3d_glob_transform + + +func _pcam_tween(delta: float) -> void: + if _tween_elapsed_time + delta <= _tween_duration: + _pcam_tween_properties(delta) + else: # First frame when tweening completes + _tween_elapsed_time = 0 + _trigger_pcam_tween = false + #_show_viewfinder_in_play() # NOTE - Likely not needed + _pcam_follow(delta) + + if _is_2D: + _active_pcam_2d.update_limit_all_sides() + _active_pcam_2d.tween_completed.emit() + if Engine.is_editor_hint(): + _active_pcam_2d.queue_redraw() + else: + _cam_h_offset_changed = false + _cam_v_offset_changed = false + _cam_fov_changed = false + _cam_size_changed = false + _cam_frustum_offset_changed = false + _cam_near_changed = false + _cam_far_changed = false + + _active_pcam_3d.tween_completed.emit() + + +func _pcam_tween_properties(delta: float) -> void: + # Run at the first tween frame + if _tween_elapsed_time == 0: + if _is_2D: + _active_pcam_2d.tween_started.emit() + _active_pcam_2d.reset_limit() + else: + _active_pcam_3d.tween_started.emit() + + _tween_elapsed_time += delta + + if _is_2D: + _active_pcam_2d.is_tweening.emit() + var interpolation_destination: Vector2 = _tween_interpolate_value( + _prev_active_pcam_2d_transform.origin, + _active_pcam_2d_glob_transform.origin, + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + + if _active_pcam_2d.snap_to_pixel: + camera_2d.global_position = interpolation_destination.round() + else: + camera_2d.global_position = interpolation_destination + + camera_2d.rotation = _tween_interpolate_value( + _prev_active_pcam_2d_transform.get_rotation(), + _active_pcam_2d_glob_transform.get_rotation(), + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + camera_2d.zoom = _tween_interpolate_value( + _camera_zoom, + _active_pcam_2d.zoom, + _active_pcam_2d.get_tween_duration(), + _active_pcam_2d.get_tween_transition(), + _active_pcam_2d.get_tween_ease() + ) + else: + _active_pcam_3d.is_tweening.emit() + camera_3d.global_position = _tween_interpolate_value( + _prev_active_pcam_3d_transform.origin, + _active_pcam_3d_glob_transform.origin, + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + var prev_active_pcam_3d_quat: Quaternion = Quaternion(_prev_active_pcam_3d_transform.basis.orthonormalized()) + camera_3d.quaternion = \ + Tween.interpolate_value( + prev_active_pcam_3d_quat, \ + prev_active_pcam_3d_quat.inverse() * Quaternion(_active_pcam_3d_glob_transform.basis.orthonormalized()), + _tween_elapsed_time, \ + _active_pcam_3d.get_tween_duration(), \ + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_fov_changed: + camera_3d.fov = \ + _tween_interpolate_value( + _prev_cam_fov, + _active_pcam_3d.get_fov(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_size_changed: + camera_3d.size = \ + _tween_interpolate_value( + _prev_cam_size, + _active_pcam_3d.get_size(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_frustum_offset_changed: + camera_3d.frustum_offset = \ + _tween_interpolate_value( + _prev_cam_frustum_offset, + _active_pcam_3d.get_frustum_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_h_offset_changed: + camera_3d.h_offset = \ + _tween_interpolate_value( + _prev_cam_h_offset, + _active_pcam_3d.get_h_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_v_offset_changed: + camera_3d.v_offset = \ + _tween_interpolate_value( + _prev_cam_v_offset, + _active_pcam_3d.get_v_offset(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_near_changed: + camera_3d.near = \ + _tween_interpolate_value( + _prev_cam_near, + _active_pcam_3d.get_near(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + if _cam_far_changed: + camera_3d.far = \ + _tween_interpolate_value( + _prev_cam_far, + _active_pcam_3d.get_far(), + _active_pcam_3d.get_tween_duration(), + _active_pcam_3d.get_tween_transition(), + _active_pcam_3d.get_tween_ease() + ) + + +func _tween_interpolate_value(from: Variant, to: Variant, duration: float, transition_type: int, ease_type: int) -> Variant: + return Tween.interpolate_value( + from, \ + to - from, + _tween_elapsed_time, \ + duration, \ + transition_type, + ease_type, + ) + +#endregion + + +#region Public Functions + +func _show_viewfinder_in_play() -> void: + # Don't show the viewfinder in the actual editor or project builds + if Engine.is_editor_hint() or !OS.has_feature("editor"): return + + # We default the viewfinder node to hidden + if is_instance_valid(_viewfinder_node): + _viewfinder_node.visible = false + + if _is_2D: + if not _active_pcam_2d.show_viewfinder_in_play: return + if _active_pcam_2d.follow_mode != _active_pcam_2d.FollowMode.FRAMED: return + else: + if not _active_pcam_3d.show_viewfinder_in_play: return + if _active_pcam_3d.follow_mode != _active_pcam_2d.FollowMode.FRAMED: return + + var canvas_layer: CanvasLayer = CanvasLayer.new() + get_tree().get_root().add_child(canvas_layer) + + # Instantiate the viewfinder scene if it isn't already + if not is_instance_valid(_viewfinder_node): + var _viewfinder_scene := load("res://addons/phantom_camera/panel/viewfinder/viewfinder_panel.tscn") + _viewfinder_node = _viewfinder_scene.instantiate() + canvas_layer.add_child(_viewfinder_node) + + _viewfinder_node.visible = true + _viewfinder_node.update_dead_zone() + + +## Called when a [param PhantomCamera] is added to the scene.[br] +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func pcam_added_to_scene(pcam) -> void: + if is_instance_of(pcam, PhantomCamera2D) or pcam.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + if not _pcam_list.has(pcam): + _pcam_list.append(pcam) + if not pcam.tween_on_load: + pcam.set_has_tweened(self, true) # Skips its tween if it has the highest priority on load + _find_pcam_with_highest_priority() + else: + printerr("This function should only be called from PhantomCamera scripts") + + +## Called when a [param PhantomCamera] is removed from the scene.[br] +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func pcam_removed_from_scene(pcam) -> void: + if is_instance_of(pcam, PhantomCamera2D) or pcam.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. + _pcam_list.erase(pcam) + if _is_2D: + if pcam == _active_pcam_2d: + _active_pcam_missing = true + _active_pcam_priority = -1 + _find_pcam_with_highest_priority() + else: + if pcam == _active_pcam_3d: + _active_pcam_missing = true + _active_pcam_priority = -1 + _find_pcam_with_highest_priority() + else: + printerr("This function should only be called from PhantomCamera scripts") + + +## Triggers a recalculation to determine which PhantomCamera has the highest +## priority. +func pcam_priority_updated(pcam: Node) -> void: + if Engine.is_editor_hint(): + if _is_2D: + if _active_pcam_2d.priority_override: return + else: + if _active_pcam_3d.priority_override: return + + if not is_instance_valid(pcam): return + + var current_pcam_priority: int = pcam.get_priority() + + if current_pcam_priority >= _active_pcam_priority: + if _is_2D: + if pcam != _active_pcam_2d: + _assign_new_active_pcam(pcam) + else: + if pcam != _active_pcam_3d: + _assign_new_active_pcam(pcam) + + if pcam == _active_pcam_2d or pcam == _active_pcam_3d: + if current_pcam_priority <= _active_pcam_priority: + _active_pcam_priority = current_pcam_priority + _find_pcam_with_highest_priority() + else: + _active_pcam_priority = current_pcam_priority + + +## Updates the viewfinder when a [param PhantomCamera] has its +## [param priority_ovrride] enabled.[br] +## [b]Note:[/b] This only affects the editor. +func pcam_priority_override(pcam: Node) -> void: + if Engine.is_editor_hint(): + if _is_2D: + if _active_pcam_2d.priority_override: + _active_pcam_2d.priority_override = false + else: + if _active_pcam_3d.priority_override: + _active_pcam_3d.priority_override = false + + _assign_new_active_pcam(pcam) + update_editor_viewfinder.emit() + + +## Updates the viewfinder when a [param PhantomCamera] has its +## [param priority_ovrride] disabled.[br] +## [b]Note:[/b] This only affects the editor. +func pcam_priority_override_disabled() -> void: + update_editor_viewfinder.emit() + + +## Returns the currently active [param PhantomCamera] +func get_active_pcam() -> Node: + if _is_2D: + return _active_pcam_2d + else: + return _active_pcam_3d + + +## Returns whether if a [param PhantomCamera] should tween when it becomes +## active. If it's already active, the value will always be false. +## [b]Note:[/b] This can only be called internally from a +## [param PhantomCamera] node. +func get_trigger_pcam_tween() -> bool: + return _trigger_pcam_tween + +#func set_interpolation_mode(value: int) -> void: + #interpolation_mode = value +#func get_interpolation_mode() -> int: + #return interpolation_mode + +#endregion diff --git a/addons/phantom_camera/scripts/resources/camera_3d_resource.gd b/addons/phantom_camera/scripts/resources/camera_3d_resource.gd new file mode 100644 index 0000000..70a0487 --- /dev/null +++ b/addons/phantom_camera/scripts/resources/camera_3d_resource.gd @@ -0,0 +1,59 @@ +@tool +@icon("res://addons/phantom_camera/icons/phantom_camera_camera_3d_resource.svg") +class_name Camera3DResource +extends Resource + +## Resource for [PhantomCamera3D] to override various [Camera3D] properties. +## +## The overrides defined here will be applied to the [Camera3D] upon the +## [PhantomCamera3D] becoming active. + +## Overrides [member Camera3D.cull_mask]. +@export_flags_3d_render var cull_mask: int = 1048575 + +## Overrides [member Camera3D.h_offset]. +@export_range(0, 1, 0.001, "hide_slider", "suffix:m") var h_offset: float = 0 + +## Overrides [member Camera3D.v_offset]. +@export_range(0, 1, 0.001, "hide_slider", "suffix:m") var v_offset: float = 0 + + +enum ProjectionType { + PERSPECTIVE = 0, ## Perspective projection. Objects on the screen becomes smaller when they are far away. + ORTHOGONAL = 1, ## Orthogonal projection, also known as orthographic projection. Objects remain the same size on the screen no matter how far away they are. + FRUSTUM = 2, ## Frustum projection. This mode allows adjusting frustum_offset to create "tilted frustum" effects. +} + +## Overrides [member Camera3D.projection]. +@export var projection: ProjectionType = ProjectionType.PERSPECTIVE: + set(value): + projection = value + notify_property_list_changed() + get: + return projection + +## Overrides [member Camera3D.fov]. +@export_range(1, 179, 0.1, "degrees") var fov: float = 75 + +## Overrides [member Camera3D.size]. +@export_range(0.001, 100, 0.001, "suffix:m", "or_greater") var size: float = 1 + +## Overrides [member Camera3d.frustum_offset]. +@export var frustum_offset: Vector2 = Vector2.ZERO + +## Overrides [member Camera3D.near]. +@export_range(0.001, 10, 0.001, "suffix:m", "or_greater") var near: float = 0.05 + +## Overrides [member Camera3D.far]. +@export_range(0.01, 4000, 0.001, "suffix:m","or_greater") var far: float = 4000 + + +func _validate_property(property: Dictionary) -> void: + if property.name == "fov" and not projection == ProjectionType.PERSPECTIVE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "size" and projection == ProjectionType.PERSPECTIVE: + property.usage = PROPERTY_USAGE_NO_EDITOR + + if property.name == "frustum_offset" and not projection == ProjectionType.FRUSTUM: + property.usage = PROPERTY_USAGE_NO_EDITOR diff --git a/addons/phantom_camera/scripts/resources/tween_resource.gd b/addons/phantom_camera/scripts/resources/tween_resource.gd new file mode 100644 index 0000000..997ddb8 --- /dev/null +++ b/addons/phantom_camera/scripts/resources/tween_resource.gd @@ -0,0 +1,41 @@ +@icon("res://addons/phantom_camera/icons/phantom_camera_tween.svg") +class_name PhantomCameraTween +extends Resource + +## Tweening resource for [PhantomCamera2D] and [PhantomCamera3D]. +## +## Defines how [param PhantomCameras] transition between one another. +## Changing the tween values for a given [param PhantomCamera] determines how +## transitioning to that instance will look like. + +enum TransitionType { + LINEAR = 0, ## The animation is interpolated linearly. + SINE = 1, ## The animation is interpolated using a sine function. + QUINT = 2, ## The animation is interpolated with a quintic (to the power of 5) function. + QUART = 3, ## The animation is interpolated with a quartic (to the power of 4) function. + QUAD = 4, ## The animation is interpolated with a quadratic (to the power of 2) function. + EXPO = 5, ## The animation is interpolated with an exponential (to the power of x) function. + ELASTIC = 6, ## The animation is interpolated with elasticity, wiggling around the edges. + CUBIC = 7, ## The animation is interpolated with a cubic (to the power of 3) function. + CIRC = 8, ## The animation is interpolated with a function using square roots. + BOUNCE = 9, ## The animation is interpolated by bouncing at the end. + BACK = 10, ## The animation is interpolated backing out at ends. +# CUSTOM = 11, +# NONE = 12, +} + +enum EaseType { + EASE_IN = 0, ## The interpolation starts slowly and speeds up towards the end. + EASE_OUT = 1, ## The interpolation starts quickly and slows down towards the end. + EASE_IN_OUT = 2, ## A combination of EASE_IN and EASE_OUT. The interpolation is slowest at both ends. + EASE_OUT_IN = 3, ## A combination of EASE_IN and EASE_OUT. The interpolation is fastest at both ends. +} + +## The time it takes to tween to this PhantomCamera in [param seconds]. +@export var duration: float = 1 + +## The transition bezier type for the tween. The options are defined in the [enum TransitionType]. +@export var transition: TransitionType = TransitionType.LINEAR + +## The ease type for the tween. The options are defined in the [enum EaseType]. +@export var ease: EaseType = EaseType.EASE_IN_OUT diff --git a/project.godot b/project.godot index 8c5a4bc..efe42fd 100644 --- a/project.godot +++ b/project.godot @@ -23,6 +23,7 @@ World="*res://Scenes/Level.tscn" AudioManager="*res://Audio/AudioManager.cs" DebugUi="*res://UI/Debug/DebugUI.tscn" DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd" +PhantomCameraManager="*res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd" [dialogue_manager] @@ -42,7 +43,7 @@ project/assembly_name="SupaLidlGame" [editor_plugins] -enabled=PackedStringArray("res://addons/dialogue_manager/plugin.cfg") +enabled=PackedStringArray("res://addons/dialogue_manager/plugin.cfg", "res://addons/phantom_camera/plugin.cfg") [file_customization] @@ -225,5 +226,7 @@ locale/translations_pot_files=PackedStringArray("res://Assets/Dialogue/doc.dialo [rendering] textures/canvas_textures/default_texture_filter=0 +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" environment/defaults/default_clear_color=Color(0.301961, 0.301961, 0.301961, 1) viewport/hdr_2d=true