diff --git a/_player/Avatar.tscn b/_player/Avatar.tscn index f0fe7ce..a0b6477 100644 --- a/_player/Avatar.tscn +++ b/_player/Avatar.tscn @@ -1,12 +1,16 @@ -[gd_scene load_steps=37 format=3 uid="uid://gwhff4qaouxy"] +[gd_scene load_steps=41 format=3 uid="uid://gwhff4qaouxy"] [ext_resource type="Script" uid="uid://dq1g1qp66chwy" path="res://_player/avatar.gd" id="1_rkqpu"] [ext_resource type="Script" uid="uid://isu8onknb75o" path="res://_player/states/character_state_machine.gd" id="1_wvs5h"] [ext_resource type="Script" uid="uid://15n8yfyr4eqj" path="res://_player/states/grounded.gd" id="2_5p50s"] [ext_resource type="Texture2D" uid="uid://doxhsab56pe50" path="res://_asset/all.png" id="2_8nsdm"] [ext_resource type="Script" uid="uid://dcfq4wnx2g6bs" path="res://_player/player_locomotion.gd" id="2_11vl8"] +[ext_resource type="Script" uid="uid://btm85tbxvjmex" path="res://_shared/camera/camera_shake/CameraShakePreset.gd" id="2_u7cua"] +[ext_resource type="Resource" uid="uid://iv3hfxqm5503" path="res://_shared/camera/camera_shake/CSP_HorizontalOnly.tres" id="3_1a1t3"] +[ext_resource type="Resource" uid="uid://bs3cqsp23047i" path="res://_shared/camera/camera_shake/CSP_VerticalOnly.tres" id="4_01uoa"] [ext_resource type="Script" uid="uid://b5hkfpjbye70" path="res://_player/states/idle.gd" id="4_30i7g"] [ext_resource type="BlackboardPlan" uid="uid://nlw7rxugv5uh" path="res://_player/bbp_player.tres" id="4_mwufa"] +[ext_resource type="Resource" uid="uid://cs50mkt830f8r" path="res://_shared/camera/camera_shake/CSP_XY.tres" id="5_ciuu3"] [ext_resource type="Script" uid="uid://bpd54nf8oxwsb" path="res://_player/states/player_hsm.gd" id="6_8q4ov"] [ext_resource type="Script" uid="uid://po21boe8iqcc" path="res://_player/states/move.gd" id="7_rrwxs"] [ext_resource type="Script" uid="uid://cjf7kds0cipkw" path="res://_tools/limbo_state_helper.gd" id="8_clxy3"] @@ -53,6 +57,11 @@ floor_snap_length = 4.0 platform_floor_layers = 4 platform_wall_layers = 4 script = ExtResource("1_rkqpu") +camera_shake_preset = Dictionary[StringName, ExtResource("2_u7cua")]({ +&"x_only_light": ExtResource("3_1a1t3"), +&"xy_light": ExtResource("5_ciuu3"), +&"y_only_light": ExtResource("4_01uoa") +}) [node name="GroundCompanion" type="Area2D" parent="."] unique_name_in_owner = true diff --git a/_player/avatar.gd b/_player/avatar.gd index bec1c12..aa000c7 100644 --- a/_player/avatar.gd +++ b/_player/avatar.gd @@ -11,6 +11,8 @@ class_name Player extends CharacterBody2D @onready var collision_shape_2d: CollisionShape2D = %CollisionShape2D +##用来记录CameraShake的Preset +@export var camera_shake_preset : Dictionary[StringName,CameraShakePreset] enum Direction{LEFT,RIGHT} var direction: Direction = Direction.RIGHT: set = _player_direction_changed diff --git a/_player/states/grapping.gd b/_player/states/grapping.gd index c7c07fe..a02035d 100644 --- a/_player/states/grapping.gd +++ b/_player/states/grapping.gd @@ -33,15 +33,19 @@ func _enter() -> void: if hook_inst: var i = hook_inst.get_direction_id() - #if i >= 0: - #if i == 0 or i == 4: - #CameraSystem.get_cached_camera().emit_hook_touch_shock(0) - #elif i == 1 or i == 5: - #CameraSystem.get_cached_camera().emit_hook_touch_shock(1) - #elif i == 2 or i == 6: - #CameraSystem.get_cached_camera().emit_hook_touch_shock(2) - #elif i == 3 or i == 7: - #CameraSystem.get_cached_camera().emit_hook_touch_shock(3) + if i >= 0: + var csp : CameraShakePreset = null + if i == 0 or i == 4: + csp = agent.camera_shake_preset.get("y_only_light") + elif i == 1 or i == 5: + csp = agent.camera_shake_preset.get("xy_light") + elif i == 2 or i == 6: + csp = agent.camera_shake_preset.get("x_only_light") + elif i == 3 or i == 7: + csp = agent.camera_shake_preset.get("xy_light") + + if csp: + CameraSystem.camera_shake_player.play(csp) if root.grap_hook_state._jump_grace_timer > 0: _hook_to_jump() diff --git a/_scene/level1/l1_s2.tscn b/_scene/level1/l1_s2.tscn index 8550b56..a5a3f32 100644 --- a/_scene/level1/l1_s2.tscn +++ b/_scene/level1/l1_s2.tscn @@ -107,7 +107,7 @@ size = Vector2(65, 66) [sub_resource type="Curve2D" id="Curve2D_nnp13"] _data = { -"points": PackedVector2Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, -111) +"points": PackedVector2Array(0, 0, 0, 0, -13, 64, 0, 0, 0, 0, 203, -122) } point_count = 2 @@ -207,7 +207,7 @@ effects = Array[ExtResource("12_fmhh5")]([SubResource("Resource_ubvm0")]) [node name="TileMapLayer" type="TileMapLayer" parent="." groups=["GRAPABLE"]] texture_filter = 1 -tile_map_data = PackedByteArray("AAAHAN7/AAAAAAAAAAAHAN//AAAAAAAAAAAHAOD/AAAAAAAAAAAHAOH/AAAAAAAAAAAHAOL/AAAAAAAAAAAHAOP/AAAAAAAAAAAHAOT/AAAAAAAAAAAHAOX/AAAAAAAAAAAHAOb/AAAAAAAAAAAHAOf/AAAAAAAAAAAHAOj/AAAAAAAAAAAHAOn/AAAAAAAAAAAHAOr/AAAAAAAAAAAHAOv/AAAAAAAAAAAHAOz/AAAAAAAAAAAHAO3/AAAAAAAAAAAHAO7/AAAAAAAAAAAHAO//AAAAAAAAAAAHAPD/AAAAAAAAAAAIAN7/AAAAAAAAAAAIAN//AAAAAAAAAAAIAOD/AAAAAAAAAAAIAOH/AAAAAAAAAAAIAOL/AAAAAAAAAAAIAOP/AAAAAAAAAAAIAOT/AAAAAAAAAAAIAOX/AAAAAAAAAAAIAOb/AAAAAAAAAAAIAOf/AAAAAAAAAAAIAOj/AAAAAAAAAAAIAOn/AAAAAAAAAAAIAOr/AAAAAAAAAAAIAOv/AAAAAAAAAAAIAOz/AAAAAAAAAAAIAO3/AAAAAAAAAAAIAO7/AAAAAAAAAAAIAO//AAAAAAAAAAAIAPD/AAAAAAAAAAAJAN7/AAAAAAAAAAAJAN//AAAAAAAAAAAJAOD/AAAAAAAAAAAJAOH/AAAAAAAAAAAJAOL/AAAAAAAAAAAJAOP/AAAAAAAAAAAJAOT/AAAAAAAAAAAJAOX/AAAAAAAAAAAJAOb/AAAAAAAAAAAJAOf/AAAAAAAAAAAJAOj/AAAAAAAAAAAJAOn/AAAAAAAAAAAJAOr/AAAAAAAAAAAJAOv/AAAAAAAAAAAJAOz/AAAAAAAAAAAJAO3/AAAAAAAAAAAJAO7/AAAAAAAAAAAJAO//AAAAAAAAAAAJAPD/AAAAAAAAAAAKAN7/AAAAAAAAAAAKAN//AAAAAAAAAAAKAOD/AAAAAAAAAAAKAOH/AAAAAAAAAAAKAOL/AAAAAAAAAAAKAOn/AAAAAAAAAAAKAOr/AAAAAAAAAAAKAOv/AAAAAAAAAAAKAOz/AAAAAAAAAAAKAO3/AAAAAAAAAAAKAO7/AAAAAAAAAAAKAO//AAAAAAAAAAAKAPD/AAAAAAAAAAAPAO7/AAAAAAAAAAAPAO//AAAAAAAAAAAPAPD/AAAAAAAAAAAQAO7/AAAAAAAAAAAQAO//AAAAAAAAAAAQAPD/AAAAAAAAAAARAO7/AAAAAAAAAAARAO//AAAAAAAAAAARAPD/AAAAAAAAAAASAO7/AAAAAAAAAAASAO//AAAAAAAAAAASAPD/AAAAAAAAAAATAO7/AAAAAAAAAAATAO//AAAAAAAAAAATAPD/AAAAAAAAAAAUAO7/AAAAAAAAAAAUAO//AAAAAAAAAAAUAPD/AAAAAAAAAAAVAO7/AAAAAAAAAAAVAO//AAAAAAAAAAAVAPD/AAAAAAAAAAAWAO7/AAAAAAAAAAAWAO//AAAAAAAAAAAWAPD/AAAAAAAAAAAXAO7/AAAAAAAAAAAXAO//AAAAAAAAAAAXAPD/AAAAAAAAAAAYAO7/AAAAAAAAAAAYAO//AAAAAAAAAAAYAPD/AAAAAAAAAAAyAO7/AAAAAAAAAAAyAO//AAAAAAAAAAAyAPD/AAAAAAAAAAAzAO7/AAAAAAAAAAAzAO//AAAAAAAAAAAzAPD/AAAAAAAAAAA0AO7/AAAAAAAAAAA0AO//AAAAAAAAAAA0APD/AAAAAAAAAAA1AO7/AAAAAAAAAAA1AO//AAAAAAAAAAA1APD/AAAAAAAAAAA2AO7/AAAAAAAAAAA2AO//AAAAAAAAAAA2APD/AAAAAAAAAAA3AO7/AAAAAAAAAAA3AO//AAAAAAAAAAA3APD/AAAAAAAAAAA4AO7/AAAAAAAAAAA4AO//AAAAAAAAAAA4APD/AAAAAAAAAAA5AO7/AAAAAAAAAAA5AO//AAAAAAAAAAA5APD/AAAAAAAAAAAGANL/AAAAAAAAAAAGANP/AAAAAAAAAAAGANT/AAAAAAAAAAAGANX/AAAAAAAAAAAGANb/AAAAAAAAAAAGANf/AAAAAAAAAAAGANj/AAAAAAAAAAAGANn/AAAAAAAAAAAGANr/AAAAAAAAAAAGANv/AAAAAAAAAAAGANz/AAAAAAAAAAAGAN3/AAAAAAAAAAAHANL/AAAAAAAAAAAHANP/AAAAAAAAAAAHANT/AAAAAAAAAAAHANX/AAAAAAAAAAAHANb/AAAAAAAAAAAHANf/AAAAAAAAAAAHANj/AAAAAAAAAAAHANn/AAAAAAAAAAAHANr/AAAAAAAAAAAHANv/AAAAAAAAAAAHANz/AAAAAAAAAAAHAN3/AAAAAAAAAAAIANL/AAAAAAAAAAAIANP/AAAAAAAAAAAIANT/AAAAAAAAAAAIANX/AAAAAAAAAAAIANb/AAAAAAAAAAAIANf/AAAAAAAAAAAIANj/AAAAAAAAAAAIANn/AAAAAAAAAAAIANr/AAAAAAAAAAAIANv/AAAAAAAAAAAIANz/AAAAAAAAAAAIAN3/AAAAAAAAAAAJANL/AAAAAAAAAAAJANP/AAAAAAAAAAAJANT/AAAAAAAAAAAJANX/AAAAAAAAAAAJANb/AAAAAAAAAAAJANf/AAAAAAAAAAAJANj/AAAAAAAAAAAJANn/AAAAAAAAAAAJANr/AAAAAAAAAAAJANv/AAAAAAAAAAAJANz/AAAAAAAAAAAJAN3/AAAAAAAAAAAKANL/AAAAAAAAAAAKANP/AAAAAAAAAAAKANT/AAAAAAAAAAAKANX/AAAAAAAAAAAKANb/AAAAAAAAAAAKANf/AAAAAAAAAAAKANj/AAAAAAAAAAAKANn/AAAAAAAAAAAKANr/AAAAAAAAAAAKANv/AAAAAAAAAAAKANz/AAAAAAAAAAAKAN3/AAAAAAAAAAALANL/AAAAAAAAAAALANP/AAAAAAAAAAALANT/AAAAAAAAAAAMANL/AAAAAAAAAAAMANP/AAAAAAAAAAAMANT/AAAAAAAAAAANANL/AAAAAAAAAAANANP/AAAAAAAAAAANANT/AAAAAAAAAAAOANL/AAAAAAAAAAAOANP/AAAAAAAAAAAOANT/AAAAAAAAAAAPANL/AAAAAAAAAAAPANP/AAAAAAAAAAAPANT/AAAAAAAAAAAQANL/AAAAAAAAAAAQANP/AAAAAAAAAAAQANT/AAAAAAAAAAARANL/AAAAAAAAAAARANP/AAAAAAAAAAARANT/AAAAAAAAAAASANL/AAAAAAAAAAASANP/AAAAAAAAAAASANT/AAAAAAAAAAATANL/AAAAAAAAAAATANP/AAAAAAAAAAATANT/AAAAAAAAAAAUANL/AAAAAAAAAAAUANP/AAAAAAAAAAAUANT/AAAAAAAAAAAVANL/AAAAAAAAAAAVANP/AAAAAAAAAAAVANT/AAAAAAAAAAAWANL/AAAAAAAAAAAWANP/AAAAAAAAAAAWANT/AAAAAAAAAAAXANL/AAAAAAAAAAAXANP/AAAAAAAAAAAXANT/AAAAAAAAAAAYANL/AAAAAAAAAAAYANP/AAAAAAAAAAAYANT/AAAAAAAAAAAZANL/AAAAAAAAAAAZANP/AAAAAAAAAAAZANT/AAAAAAAAAAAaANL/AAAAAAAAAAAaANP/AAAAAAAAAAAaANT/AAAAAAAAAAAbANL/AAAAAAAAAAAbANP/AAAAAAAAAAAbANT/AAAAAAAAAAAcANL/AAAAAAAAAAAcANP/AAAAAAAAAAAcANT/AAAAAAAAAAAdANL/AAAAAAAAAAAdANP/AAAAAAAAAAAdANT/AAAAAAAAAAAeANL/AAAAAAAAAAAeANP/AAAAAAAAAAAeANT/AAAAAAAAAAAfANL/AAAAAAAAAAAfANP/AAAAAAAAAAAfANT/AAAAAAAAAAAgANL/AAAAAAAAAAAgANP/AAAAAAAAAAAgANT/AAAAAAAAAAAhANL/AAAAAAAAAAAhANP/AAAAAAAAAAAhANT/AAAAAAAAAAAiANL/AAAAAAAAAAAiANP/AAAAAAAAAAAiANT/AAAAAAAAAAAjANL/AAAAAAAAAAAjANP/AAAAAAAAAAAjANT/AAAAAAAAAAAkANL/AAAAAAAAAAAkANP/AAAAAAAAAAAkANT/AAAAAAAAAAAlANL/AAAAAAAAAAAlANP/AAAAAAAAAAAlANT/AAAAAAAAAAAmANL/AAAAAAAAAAAmANP/AAAAAAAAAAAmANT/AAAAAAAAAAAnANL/AAAAAAAAAAAnANP/AAAAAAAAAAAnANT/AAAAAAAAAAAoANL/AAAAAAAAAAAoANP/AAAAAAAAAAAoANT/AAAAAAAAAAApANL/AAAAAAAAAAApANP/AAAAAAAAAAApANT/AAAAAAAAAAAqANL/AAAAAAAAAAAqANP/AAAAAAAAAAAqANT/AAAAAAAAAAArANL/AAAAAAAAAAArANP/AAAAAAAAAAArANT/AAAAAAAAAAAsANL/AAAAAAAAAAAsANP/AAAAAAAAAAAsANT/AAAAAAAAAAAtANL/AAAAAAAAAAAtANP/AAAAAAAAAAAtANT/AAAAAAAAAAAuANL/AAAAAAAAAAAuANP/AAAAAAAAAAAuANT/AAAAAAAAAAAvANL/AAAAAAAAAAAvANP/AAAAAAAAAAAvANT/AAAAAAAAAAAwANL/AAAAAAAAAAAwANP/AAAAAAAAAAAwANT/AAAAAAAAAAAxANL/AAAAAAAAAAAxANP/AAAAAAAAAAAxANT/AAAAAAAAAAAyANL/AAAAAAAAAAAyANP/AAAAAAAAAAAyANT/AAAAAAAAAAAzANL/AAAAAAAAAAAzANP/AAAAAAAAAAAzANT/AAAAAAAAAAA0ANL/AAAAAAAAAAA0ANP/AAAAAAAAAAA0ANT/AAAAAAAAAAA1ANL/AAAAAAAAAAA1ANP/AAAAAAAAAAA1ANT/AAAAAAAAAAA2ANL/AAAAAAAAAAA2ANP/AAAAAAAAAAA2ANT/AAAAAAAAAAA3ANL/AAAAAAAAAAA3ANP/AAAAAAAAAAA3ANT/AAAAAAAAAAA4ANL/AAAAAAAAAAA4ANP/AAAAAAAAAAA4ANT/AAAAAAAAAAA5ANL/AAAAAAAAAAA5ANP/AAAAAAAAAAA5ANT/AAAAAAAAAAA6ANL/AAAAAAAAAAA6ANP/AAAAAAAAAAA6ANT/AAAAAAAAAAA7ANL/AAAAAAAAAAA7ANP/AAAAAAAAAAA7ANT/AAAAAAAAAAA8ANL/AAAAAAAAAAA8ANP/AAAAAAAAAAA8ANT/AAAAAAAAAAA6ANX/AAAAAAAAAAA6ANb/AAAAAAAAAAA6ANf/AAAAAAAAAAA6ANj/AAAAAAAAAAA6AOb/AAAAAAAAAAA6AOf/AAAAAAAAAAA6AOj/AAAAAAAAAAA6AOn/AAAAAAAAAAA6AOr/AAAAAAAAAAA6AOv/AAAAAAAAAAA6AOz/AAAAAAAAAAA6AO3/AAAAAAAAAAA6AO7/AAAAAAAAAAA6AO//AAAAAAAAAAA6APD/AAAAAAAAAAA7ANX/AAAAAAAAAAA7ANb/AAAAAAAAAAA7ANf/AAAAAAAAAAA7ANj/AAAAAAAAAAA7AOb/AAAAAAAAAAA7AOf/AAAAAAAAAAA7AOj/AAAAAAAAAAA7AOn/AAAAAAAAAAA7AOr/AAAAAAAAAAA7AOv/AAAAAAAAAAA7AOz/AAAAAAAAAAA7AO3/AAAAAAAAAAA7AO7/AAAAAAAAAAA7AO//AAAAAAAAAAA7APD/AAAAAAAAAAA8ANX/AAAAAAAAAAA8ANb/AAAAAAAAAAA8ANf/AAAAAAAAAAA8ANj/AAAAAAAAAAA8AOb/AAAAAAAAAAA8AOf/AAAAAAAAAAA8AOj/AAAAAAAAAAA8AOn/AAAAAAAAAAA8AOr/AAAAAAAAAAA8AOv/AAAAAAAAAAA8AOz/AAAAAAAAAAA8AO3/AAAAAAAAAAA8AO7/AAAAAAAAAAA8AO//AAAAAAAAAAA8APD/AAAAAAAAAAAZAO//AAAAAAAAAAAZAPD/AAAAAAAAAAAaAO//AAAAAAAAAAAaAPD/AAAAAAAAAAAbAO//AAAAAAAAAAAbAPD/AAAAAAAAAAAtAO//AAAAAAAAAAAtAPD/AAAAAAAAAAAuAO//AAAAAAAAAAAuAPD/AAAAAAAAAAAvAO//AAAAAAAAAAAvAPD/AAAAAAAAAAAwAO//AAAAAAAAAAAwAPD/AAAAAAAAAAAxAO//AAAAAAAAAAAxAPD/AAAAAAAAAAArAPD/AAAAAAAAAAAsAPD/AAAAAAAAAAAsAOn/AAAAAAAAAAAsAOr/AAAAAAAAAAAsAOv/AAAAAAAAAAAsAOz/AAAAAAAAAAAsAO3/AAAAAAAAAAAsAO7/AAAAAAAAAAAtAOn/AAAAAAAAAAAtAOr/AAAAAAAAAAAtAOv/AAAAAAAAAAAtAOz/AAAAAAAAAAAtAO3/AAAAAAAAAAAtAO7/AAAAAAAAAAAsAO//AAAAAAAAAAAuAOz/AAAAAAAAAAAuAO3/AAAAAAAAAAAuAO7/AAAAAAAAAAAvAOz/AAAAAAAAAAAvAO3/AAAAAAAAAAAvAO7/AAAAAAAAAAAwAOz/AAAAAAAAAAAwAO3/AAAAAAAAAAAwAO7/AAAAAAAAAAAxAOz/AAAAAAAAAAAxAO3/AAAAAAAAAAAxAO7/AAAAAAAAAAA6ANn/AAAAAAAAAAA6ANr/AAAAAAAAAAA6ANv/AAAAAAAAAAA6ANz/AAAAAAAAAAA7ANn/AAAAAAAAAAA7ANr/AAAAAAAAAAA7ANv/AAAAAAAAAAA7ANz/AAAAAAAAAAA8ANn/AAAAAAAAAAA8ANr/AAAAAAAAAAA8ANv/AAAAAAAAAAA8ANz/AAAAAAAAAAA7AN3/AAAAAAAAAAA7AN7/AAAAAAAAAAA7AN//AAAAAAAAAAA8AN3/AAAAAAAAAAA8AN7/AAAAAAAAAAA8AN//AAAAAAAAAAA3AOz/AAAAAAAAAAA3AO3/AAAAAAAAAAA4AOz/AAAAAAAAAAA4AO3/AAAAAAAAAAA5AOz/AAAAAAAAAAA5AO3/AAAAAAAAAAAmAOn/AAAAAAAAAGAmAOr/AAAAAAAAAGAnAOn/AAAAAAAAAGAnAOr/AAAAAAAAAGAoAOn/AAAAAAAAAGAoAOr/AAAAAAAAAGApAOn/AAAAAAAAAGApAOr/AAAAAAAAAGAqAOn/AAAAAAAAAGAqAOr/AAAAAAAAAGArAOn/AAAAAAAAAGArAOr/AAAAAAAAAGApAOv/AAAAAAAAAGApAOz/AAAAAAAAAGAqAOv/AAAAAAAAAGAqAOz/AAAAAAAAAGArAOv/AAAAAAAAAGArAOz/AAAAAAAAAGArAO3/AAAAAAAAAGAqAOf/AAAAAAAAAGAqAOj/AAAAAAAAAGArAOf/AAAAAAAAAGArAOj/AAAAAAAAAGAsAOf/AAAAAAAAAGAsAOj/AAAAAAAAAGAtAOf/AAAAAAAAAGAtAOj/AAAAAAAAAGAsANz/AAAAAAAAAAAsAN3/AAAAAAAAAAAtANz/AAAAAAAAAAAtAN3/AAAAAAAAAAAuANz/AAAAAAAAAAAuAN3/AAAAAAAAAAAvANz/AAAAAAAAAAAvAN3/AAAAAAAAAAAwANz/AAAAAAAAAAAwAN3/AAAAAAAAAAAxANz/AAAAAAAAAAAxAN3/AAAAAAAAAAAyANz/AAAAAAAAAAAyAN3/AAAAAAAAAAAwAN7/AAAAAAAAAAAxAN7/AAAAAAAAAAAyAN7/AAAAAAAAAAALANX/AAAAAAAAAAALANb/AAAAAAAAAAALANf/AAAAAAAAAAAMANX/AAAAAAAAAAAMANb/AAAAAAAAAAAMANf/AAAAAAAAAAANANX/AAAAAAAAAAANANb/AAAAAAAAAAANANf/AAAAAAAAAAAOANX/AAAAAAAAAAAOANb/AAAAAAAAAAAOANf/AAAAAAAAAAAPANX/AAAAAAAAAAAPANb/AAAAAAAAAAAPANf/AAAAAAAAAAAQANX/AAAAAAAAAAAQANb/AAAAAAAAAAAQANf/AAAAAAAAAAARANX/AAAAAAAAAAARANb/AAAAAAAAAAARANf/AAAAAAAAAAASANX/AAAAAAAAAAASANb/AAAAAAAAAAASANf/AAAAAAAAAAATANX/AAAAAAAAAAATANb/AAAAAAAAAAATANf/AAAAAAAAAAAVANX/AAAAAAAAAAAWANX/AAAAAAAAAAAXANX/AAAAAAAAAAAYANX/AAAAAAAAAAAZANX/AAAAAAAAAAAaANX/AAAAAAAAAAAbANX/AAAAAAAAAAAUANX/AAAAAAAAAAAgANX/AAAAAAAAAAAgANb/AAAAAAAAAAAgANf/AAAAAAAAAAAhANX/AAAAAAAAAAAhANb/AAAAAAAAAAAhANf/AAAAAAAAAAAiANX/AAAAAAAAAAAiANb/AAAAAAAAAAAiANf/AAAAAAAAAAAjANX/AAAAAAAAAAAjANb/AAAAAAAAAAAjANf/AAAAAAAAAAAkANX/AAAAAAAAAAAkANb/AAAAAAAAAAAkANf/AAAAAAAAAAAlANX/AAAAAAAAAAAlANb/AAAAAAAAAAAlANf/AAAAAAAAAAAmANX/AAAAAAAAAAAnANX/AAAAAAAAAAAoANX/AAAAAAAAAAAmANb/AAAAAAAAAAA1ANX/AAAAAAAAAAA1ANb/AAAAAAAAAAA2ANX/AAAAAAAAAAA2ANb/AAAAAAAAAAA3ANX/AAAAAAAAAAA3ANb/AAAAAAAAAAA4ANX/AAAAAAAAAAA4ANb/AAAAAAAAAAA5ANX/AAAAAAAAAAA5ANb/AAAAAAAAAAA4ANf/AAAAAAAAAAA4ANj/AAAAAAAAAAA5ANf/AAAAAAAAAAA5ANj/AAAAAAAAAAAKAOP/AAABAAAAAAAKAOT/AAABAAAAAAAKAOX/AAABAAAAAAAKAOb/AAABAAAAAAAKAOf/AAABAAAAAAAKAOj/AAABAAAAAAAqAPD/AAABAAAAAAArAO//AAABAAAAAAArAO7/AAABAAAAAAAqAO3/AAABAAAAAAApAO3/AAABAAAAAAAoAOv/AAABAAAAAAAoAOz/AAABAAAAAAAlAOn/AAABAAAAAAAlAOr/AAABAAAAAAAmAOj/AAABAAAAAAAnAOj/AAABAAAAAAAoAOj/AAABAAAAAAApAOj/AAABAAAAAAAqAOb/AAABAAAAAAArAOb/AAABAAAAAAAsAOb/AAABAAAAAAAtAOb/AAABAAAAAAAuAOf/AAABAAAAAAAuAOj/AAABAAAAAAAuAOn/AAABAAAAAAAuAOr/AAABAAAAAAAuAOv/AAABAAAAAAAvAOv/AAABAAAAAAAwAOv/AAABAAAAAAAxAOv/AAABAAAAAAAyAO3/AAABAAAAAAAyAOz/AAABAAAAAAAzAO3/AAABAAAAAAA0AO3/AAABAAAAAAA1AO3/AAABAAAAAAA2AO3/AAABAAAAAAA3AOv/AAABAAAAAAA4AOv/AAABAAAAAAA5AOv/AAABAAAAAAAZAO7/AAABAAAAAAAaAO7/AAABAAAAAAAbAO7/AAABAAAAAAAXAO3/AAABAAAAAAAYAO3/AAABAAAAAAATAO3/AAAAAAAAAAAUAO3/AAAAAAAAAAAVAO3/AAAAAAAAAAAWAO3/AAAAAAAAAAAVAOv/AAAAAAAAAAAVAOz/AAAAAAAAAAAWAOv/AAAAAAAAAAAWAOz/AAAAAAAAAAAzAPH/AAAAAAAAAAAzAPL/AAAAAAAAAAAzAPP/AAAAAAAAAAAzAPT/AAAAAAAAAAAzAPX/AAAAAAAAAAA0APH/AAAAAAAAAAA0APL/AAAAAAAAAAA0APP/AAAAAAAAAAA0APT/AAAAAAAAAAA0APX/AAAAAAAAAAA1APH/AAAAAAAAAAA1APL/AAAAAAAAAAA1APP/AAAAAAAAAAA1APT/AAAAAAAAAAA1APX/AAAAAAAAAAA2APH/AAAAAAAAAAA2APL/AAAAAAAAAAA2APP/AAAAAAAAAAA2APT/AAAAAAAAAAA2APX/AAAAAAAAAAA3APH/AAAAAAAAAAA3APL/AAAAAAAAAAA3APP/AAAAAAAAAAA3APT/AAAAAAAAAAA3APX/AAAAAAAAAAA4APH/AAAAAAAAAAA4APL/AAAAAAAAAAA4APP/AAAAAAAAAAA4APT/AAAAAAAAAAA4APX/AAAAAAAAAAA5APH/AAAAAAAAAAA5APL/AAAAAAAAAAA5APP/AAAAAAAAAAA5APT/AAAAAAAAAAA5APX/AAAAAAAAAAA6APH/AAAAAAAAAAA6APL/AAAAAAAAAAA6APP/AAAAAAAAAAA6APT/AAAAAAAAAAA6APX/AAAAAAAAAAA7APH/AAAAAAAAAAA7APL/AAAAAAAAAAA7APP/AAAAAAAAAAA7APT/AAAAAAAAAAA7APX/AAAAAAAAAAA8APH/AAAAAAAAAAA8APL/AAAAAAAAAAA8APP/AAAAAAAAAAA8APT/AAAAAAAAAAA8APX/AAAAAAAAAAA6APb/AAAAAAAAAAA7APb/AAAAAAAAAAA8APb/AAAAAAAAAAA8APf/AAAAAAAAAAAtAPH/AAAAAAAAAAAtAPL/AAAAAAAAAAAuAPH/AAAAAAAAAAAuAPL/AAAAAAAAAAAvAPH/AAAAAAAAAAAvAPL/AAAAAAAAAAAwAPH/AAAAAAAAAAAwAPL/AAAAAAAAAAAwAPP/AAAAAAAAAAAwAPT/AAAAAAAAAAAxAPH/AAAAAAAAAAAxAPL/AAAAAAAAAAAxAPP/AAAAAAAAAAAxAPT/AAAAAAAAAAAyAPH/AAAAAAAAAAAyAPL/AAAAAAAAAAAyAPP/AAAAAAAAAAAyAPT/AAAAAAAAAAAVAPH/AAAAAAAAAAAVAPL/AAAAAAAAAAAVAPP/AAAAAAAAAAAVAPT/AAAAAAAAAAAWAPH/AAAAAAAAAAAWAPL/AAAAAAAAAAAWAPP/AAAAAAAAAAAWAPT/AAAAAAAAAAAXAPH/AAAAAAAAAAAXAPL/AAAAAAAAAAAXAPP/AAAAAAAAAAAXAPT/AAAAAAAAAAAYAPH/AAAAAAAAAAAYAPL/AAAAAAAAAAAYAPP/AAAAAAAAAAAYAPT/AAAAAAAAAAAWAPX/AAAAAAAAAAAXAPX/AAAAAAAAAAAVAPb/AAAAAAAAAAAVAPX/AAAAAAAAAAAZAPH/AAAAAAAAAAAaAPH/AAAAAAAAAAAZAPL/AAAAAAAAAAAbAPH/AAAAAAAAAAAaAPL/AAAAAAAAAAAZAPP/AAAAAAAAAAAYAPX/AAAAAAAAAAAXAPb/AAAAAAAAAAAVAPf/AAAAAAAAAAAWAPb/AAAAAAAAAAAVAPj/AAAAAAAAAAAcAPD/AAAAAAAAAAAcAPH/AAAAAAAAAAAdAPD/AAAAAAAAAAAdAPH/AAAAAAAAAAAcAO//AAABAAAAAAAdAO//AAABAAAAAAASAN//AAAAAAAAAAASAOD/AAAAAAAAAAASAOH/AAAAAAAAAAASAOL/AAAAAAAAAAASAOP/AAAAAAAAAAASAOT/AAAAAAAAAAATAN//AAAAAAAAAAATAOD/AAAAAAAAAAATAOH/AAAAAAAAAAAUAN//AAAAAAAAAAAUAOD/AAAAAAAAAAAUAOH/AAAAAAAAAAAUAOL/AAAAAAAAAAAVAN//AAAAAAAAAAAVAOD/AAAAAAAAAAAVAOH/AAAAAAAAAAAVAOL/AAAAAAAAAAASAOX/AAAAAAAAAAASAOb/AAAAAAAAAAATAOL/AAAAAAAAAAATAOP/AAAAAAAAAAAUAOP/AAAAAAAAAAAUAOT/AAAAAAAAAAAVAOP/AAAAAAAAAAAVAOT/AAAAAAAAAAALAPH/AAACAAAAAAAMAPH/AAACAAAAAAANAPH/AAACAAAAAAAOAPH/AAACAAAAAAAdAPL/AAAAAAAAAAAcAPL/AAAAAAAAAAAcAPP/AAAAAAAAAAAbAPT/AAAAAAAAAAAaAPT/AAAAAAAAAAAaAPX/AAAAAAAAAAAZAPb/AAAAAAAAAAAZAPf/AAAAAAAAAAAYAPf/AAAAAAAAAAAYAPj/AAAAAAAAAAAXAPj/AAAAAAAAAAAXAPn/AAAAAAAAAAAWAPn/AAAAAAAAAAAWAPr/AAAAAAAAAAAVAPr/AAAAAAAAAAAVAPn/AAAAAAAAAAAWAPj/AAAAAAAAAAAWAPf/AAAAAAAAAAAXAPf/AAAAAAAAAAAYAPb/AAAAAAAAAAAZAPX/AAAAAAAAAAAZAPT/AAAAAAAAAAAaAPP/AAAAAAAAAAAbAPP/AAAAAAAAAAAbAPL/AAAAAAAAAAAeAPH/AAAAAAAAAAA2AOb/AAACAAAAAAA3AOb/AAACAAAAAAA4AOb/AAACAAAAAAA5AOb/AAACAAAAAAAPAN//AAACAAAAAAAQAN//AAACAAAAAAARAN//AAACAAAAAAAWAOL/AAACAAAAAAAXAOL/AAACAAAAAAAYAOL/AAACAAAAAAAVAOr/AAABAAAAAAAWAOr/AAABAAAAAAAXAOv/AAABAAAAAAAXAOz/AAABAAAAAAA=") +tile_map_data = PackedByteArray("AAAHAN7/AAAAAAAAAAAHAN//AAAAAAAAAAAHAOD/AAAAAAAAAAAHAOH/AAAAAAAAAAAHAOL/AAAAAAAAAAAHAOP/AAAAAAAAAAAHAOT/AAAAAAAAAAAHAOX/AAAAAAAAAAAHAOb/AAAAAAAAAAAHAOf/AAAAAAAAAAAHAOj/AAAAAAAAAAAHAOn/AAAAAAAAAAAHAOr/AAAAAAAAAAAHAOv/AAAAAAAAAAAHAOz/AAAAAAAAAAAHAO3/AAAAAAAAAAAHAO7/AAAAAAAAAAAHAO//AAAAAAAAAAAHAPD/AAAAAAAAAAAIAN7/AAAAAAAAAAAIAN//AAAAAAAAAAAIAOD/AAAAAAAAAAAIAOH/AAAAAAAAAAAIAOL/AAAAAAAAAAAIAOP/AAAAAAAAAAAIAOT/AAAAAAAAAAAIAOX/AAAAAAAAAAAIAOb/AAAAAAAAAAAIAOf/AAAAAAAAAAAIAOj/AAAAAAAAAAAIAOn/AAAAAAAAAAAIAOr/AAAAAAAAAAAIAOv/AAAAAAAAAAAIAOz/AAAAAAAAAAAIAO3/AAAAAAAAAAAIAO7/AAAAAAAAAAAIAO//AAAAAAAAAAAIAPD/AAAAAAAAAAAJAN7/AAAAAAAAAAAJAN//AAAAAAAAAAAJAOD/AAAAAAAAAAAJAOH/AAAAAAAAAAAJAOL/AAAAAAAAAAAJAOP/AAAAAAAAAAAJAOT/AAAAAAAAAAAJAOX/AAAAAAAAAAAJAOb/AAAAAAAAAAAJAOf/AAAAAAAAAAAJAOj/AAAAAAAAAAAJAOn/AAAAAAAAAAAJAOr/AAAAAAAAAAAJAOv/AAAAAAAAAAAJAOz/AAAAAAAAAAAJAO3/AAAAAAAAAAAJAO7/AAAAAAAAAAAJAO//AAAAAAAAAAAJAPD/AAAAAAAAAAAKAN7/AAAAAAAAAAAKAN//AAAAAAAAAAAKAOD/AAAAAAAAAAAKAOH/AAAAAAAAAAAKAOL/AAAAAAAAAAAKAOn/AAAAAAAAAAAKAOr/AAAAAAAAAAAKAOv/AAAAAAAAAAAKAOz/AAAAAAAAAAAKAO3/AAAAAAAAAAAKAO7/AAAAAAAAAAAKAO//AAAAAAAAAAAKAPD/AAAAAAAAAAAPAO7/AAAAAAAAAAAPAO//AAAAAAAAAAAPAPD/AAAAAAAAAAAQAO7/AAAAAAAAAAAQAO//AAAAAAAAAAAQAPD/AAAAAAAAAAARAO7/AAAAAAAAAAARAO//AAAAAAAAAAARAPD/AAAAAAAAAAASAO7/AAAAAAAAAAASAO//AAAAAAAAAAASAPD/AAAAAAAAAAATAO7/AAAAAAAAAAATAO//AAAAAAAAAAATAPD/AAAAAAAAAAAUAO7/AAAAAAAAAAAUAO//AAAAAAAAAAAUAPD/AAAAAAAAAAAVAO7/AAAAAAAAAAAVAO//AAAAAAAAAAAVAPD/AAAAAAAAAAAWAO7/AAAAAAAAAAAWAO//AAAAAAAAAAAWAPD/AAAAAAAAAAAXAO7/AAAAAAAAAAAXAO//AAAAAAAAAAAXAPD/AAAAAAAAAAAYAO7/AAAAAAAAAAAYAO//AAAAAAAAAAAYAPD/AAAAAAAAAAAyAO7/AAAAAAAAAAAyAO//AAAAAAAAAAAyAPD/AAAAAAAAAAAzAO7/AAAAAAAAAAAzAO//AAAAAAAAAAAzAPD/AAAAAAAAAAA0AO7/AAAAAAAAAAA0AO//AAAAAAAAAAA0APD/AAAAAAAAAAA1AO7/AAAAAAAAAAA1AO//AAAAAAAAAAA1APD/AAAAAAAAAAA2AO7/AAAAAAAAAAA2AO//AAAAAAAAAAA2APD/AAAAAAAAAAA3AO7/AAAAAAAAAAA3AO//AAAAAAAAAAA3APD/AAAAAAAAAAA4AO7/AAAAAAAAAAA4AO//AAAAAAAAAAA4APD/AAAAAAAAAAA5AO7/AAAAAAAAAAA5AO//AAAAAAAAAAA5APD/AAAAAAAAAAAGANL/AAAAAAAAAAAGANP/AAAAAAAAAAAGANT/AAAAAAAAAAAGANX/AAAAAAAAAAAGANb/AAAAAAAAAAAGANf/AAAAAAAAAAAGANj/AAAAAAAAAAAGANn/AAAAAAAAAAAGANr/AAAAAAAAAAAGANv/AAAAAAAAAAAGANz/AAAAAAAAAAAGAN3/AAAAAAAAAAAHANL/AAAAAAAAAAAHANP/AAAAAAAAAAAHANT/AAAAAAAAAAAHANX/AAAAAAAAAAAHANb/AAAAAAAAAAAHANf/AAAAAAAAAAAHANj/AAAAAAAAAAAHANn/AAAAAAAAAAAHANr/AAAAAAAAAAAHANv/AAAAAAAAAAAHANz/AAAAAAAAAAAHAN3/AAAAAAAAAAAIANL/AAAAAAAAAAAIANP/AAAAAAAAAAAIANT/AAAAAAAAAAAIANX/AAAAAAAAAAAIANb/AAAAAAAAAAAIANf/AAAAAAAAAAAIANj/AAAAAAAAAAAIANn/AAAAAAAAAAAIANr/AAAAAAAAAAAIANv/AAAAAAAAAAAIANz/AAAAAAAAAAAIAN3/AAAAAAAAAAAJANL/AAAAAAAAAAAJANP/AAAAAAAAAAAJANT/AAAAAAAAAAAJANX/AAAAAAAAAAAJANb/AAAAAAAAAAAJANf/AAAAAAAAAAAJANj/AAAAAAAAAAAJANn/AAAAAAAAAAAJANr/AAAAAAAAAAAJANv/AAAAAAAAAAAJANz/AAAAAAAAAAAJAN3/AAAAAAAAAAAKANL/AAAAAAAAAAAKANP/AAAAAAAAAAAKANT/AAAAAAAAAAAKANX/AAAAAAAAAAAKANb/AAAAAAAAAAAKANf/AAAAAAAAAAAKANj/AAAAAAAAAAAKANn/AAAAAAAAAAAKANr/AAAAAAAAAAAKANv/AAAAAAAAAAAKANz/AAAAAAAAAAAKAN3/AAAAAAAAAAALANL/AAAAAAAAAAALANP/AAAAAAAAAAALANT/AAAAAAAAAAAMANL/AAAAAAAAAAAMANP/AAAAAAAAAAAMANT/AAAAAAAAAAANANL/AAAAAAAAAAANANP/AAAAAAAAAAANANT/AAAAAAAAAAAOANL/AAAAAAAAAAAOANP/AAAAAAAAAAAOANT/AAAAAAAAAAAPANL/AAAAAAAAAAAPANP/AAAAAAAAAAAPANT/AAAAAAAAAAAQANL/AAAAAAAAAAAQANP/AAAAAAAAAAAQANT/AAAAAAAAAAARANL/AAAAAAAAAAARANP/AAAAAAAAAAARANT/AAAAAAAAAAASANL/AAAAAAAAAAASANP/AAAAAAAAAAASANT/AAAAAAAAAAATANL/AAAAAAAAAAATANP/AAAAAAAAAAATANT/AAAAAAAAAAAUANL/AAAAAAAAAAAUANP/AAAAAAAAAAAUANT/AAAAAAAAAAAVANL/AAAAAAAAAAAVANP/AAAAAAAAAAAVANT/AAAAAAAAAAAWANL/AAAAAAAAAAAWANP/AAAAAAAAAAAWANT/AAAAAAAAAAAXANL/AAAAAAAAAAAXANP/AAAAAAAAAAAXANT/AAAAAAAAAAAYANL/AAAAAAAAAAAYANP/AAAAAAAAAAAYANT/AAAAAAAAAAAZANL/AAAAAAAAAAAZANP/AAAAAAAAAAAZANT/AAAAAAAAAAAaANL/AAAAAAAAAAAaANP/AAAAAAAAAAAaANT/AAAAAAAAAAAbANL/AAAAAAAAAAAbANP/AAAAAAAAAAAbANT/AAAAAAAAAAAcANL/AAAAAAAAAAAcANP/AAAAAAAAAAAcANT/AAAAAAAAAAAdANL/AAAAAAAAAAAdANP/AAAAAAAAAAAdANT/AAAAAAAAAAAeANL/AAAAAAAAAAAeANP/AAAAAAAAAAAeANT/AAAAAAAAAAAfANL/AAAAAAAAAAAfANP/AAAAAAAAAAAfANT/AAAAAAAAAAAgANL/AAAAAAAAAAAgANP/AAAAAAAAAAAgANT/AAAAAAAAAAAhANL/AAAAAAAAAAAhANP/AAAAAAAAAAAhANT/AAAAAAAAAAAiANL/AAAAAAAAAAAiANP/AAAAAAAAAAAiANT/AAAAAAAAAAAjANL/AAAAAAAAAAAjANP/AAAAAAAAAAAjANT/AAAAAAAAAAAkANL/AAAAAAAAAAAkANP/AAAAAAAAAAAkANT/AAAAAAAAAAAlANL/AAAAAAAAAAAlANP/AAAAAAAAAAAlANT/AAAAAAAAAAAmANL/AAAAAAAAAAAmANP/AAAAAAAAAAAmANT/AAAAAAAAAAAnANL/AAAAAAAAAAAnANP/AAAAAAAAAAAnANT/AAAAAAAAAAAoANL/AAAAAAAAAAAoANP/AAAAAAAAAAAoANT/AAAAAAAAAAApANL/AAAAAAAAAAApANP/AAAAAAAAAAApANT/AAAAAAAAAAAqANL/AAAAAAAAAAAqANP/AAAAAAAAAAAqANT/AAAAAAAAAAArANL/AAAAAAAAAAArANP/AAAAAAAAAAArANT/AAAAAAAAAAAsANL/AAAAAAAAAAAsANP/AAAAAAAAAAAsANT/AAAAAAAAAAAtANL/AAAAAAAAAAAtANP/AAAAAAAAAAAtANT/AAAAAAAAAAAuANL/AAAAAAAAAAAuANP/AAAAAAAAAAAuANT/AAAAAAAAAAAvANL/AAAAAAAAAAAvANP/AAAAAAAAAAAvANT/AAAAAAAAAAAwANL/AAAAAAAAAAAwANP/AAAAAAAAAAAwANT/AAAAAAAAAAAxANL/AAAAAAAAAAAxANP/AAAAAAAAAAAxANT/AAAAAAAAAAAyANL/AAAAAAAAAAAyANP/AAAAAAAAAAAyANT/AAAAAAAAAAAzANL/AAAAAAAAAAAzANP/AAAAAAAAAAAzANT/AAAAAAAAAAA0ANL/AAAAAAAAAAA0ANP/AAAAAAAAAAA0ANT/AAAAAAAAAAA1ANL/AAAAAAAAAAA1ANP/AAAAAAAAAAA1ANT/AAAAAAAAAAA2ANL/AAAAAAAAAAA2ANP/AAAAAAAAAAA2ANT/AAAAAAAAAAA3ANL/AAAAAAAAAAA3ANP/AAAAAAAAAAA3ANT/AAAAAAAAAAA4ANL/AAAAAAAAAAA4ANP/AAAAAAAAAAA4ANT/AAAAAAAAAAA5ANL/AAAAAAAAAAA5ANP/AAAAAAAAAAA5ANT/AAAAAAAAAAA6ANL/AAAAAAAAAAA6ANP/AAAAAAAAAAA6ANT/AAAAAAAAAAA7ANL/AAAAAAAAAAA7ANP/AAAAAAAAAAA7ANT/AAAAAAAAAAA8ANL/AAAAAAAAAAA8ANP/AAAAAAAAAAA8ANT/AAAAAAAAAAA6ANX/AAAAAAAAAAA6ANb/AAAAAAAAAAA6ANf/AAAAAAAAAAA6ANj/AAAAAAAAAAA6AOb/AAAAAAAAAAA6AOf/AAAAAAAAAAA6AOj/AAAAAAAAAAA6AOn/AAAAAAAAAAA6AOr/AAAAAAAAAAA6AOv/AAAAAAAAAAA6AOz/AAAAAAAAAAA6AO3/AAAAAAAAAAA6AO7/AAAAAAAAAAA6AO//AAAAAAAAAAA6APD/AAAAAAAAAAA7ANX/AAAAAAAAAAA7ANb/AAAAAAAAAAA7ANf/AAAAAAAAAAA7ANj/AAAAAAAAAAA7AOb/AAAAAAAAAAA7AOf/AAAAAAAAAAA7AOj/AAAAAAAAAAA7AOn/AAAAAAAAAAA7AOr/AAAAAAAAAAA7AOv/AAAAAAAAAAA7AOz/AAAAAAAAAAA7AO3/AAAAAAAAAAA7AO7/AAAAAAAAAAA7AO//AAAAAAAAAAA7APD/AAAAAAAAAAA8ANX/AAAAAAAAAAA8ANb/AAAAAAAAAAA8ANf/AAAAAAAAAAA8ANj/AAAAAAAAAAA8AOb/AAAAAAAAAAA8AOf/AAAAAAAAAAA8AOj/AAAAAAAAAAA8AOn/AAAAAAAAAAA8AOr/AAAAAAAAAAA8AOv/AAAAAAAAAAA8AOz/AAAAAAAAAAA8AO3/AAAAAAAAAAA8AO7/AAAAAAAAAAA8AO//AAAAAAAAAAA8APD/AAAAAAAAAAAZAO//AAAAAAAAAAAZAPD/AAAAAAAAAAAaAO//AAAAAAAAAAAaAPD/AAAAAAAAAAAbAO//AAAAAAAAAAAbAPD/AAAAAAAAAAAtAO//AAAAAAAAAAAtAPD/AAAAAAAAAAAuAO//AAAAAAAAAAAuAPD/AAAAAAAAAAAvAO//AAAAAAAAAAAvAPD/AAAAAAAAAAAwAO//AAAAAAAAAAAwAPD/AAAAAAAAAAAxAO//AAAAAAAAAAAxAPD/AAAAAAAAAAArAPD/AAAAAAAAAAAsAPD/AAAAAAAAAAAsAOn/AAAAAAAAAAAsAOr/AAAAAAAAAAAsAOv/AAAAAAAAAAAsAOz/AAAAAAAAAAAsAO3/AAAAAAAAAAAsAO7/AAAAAAAAAAAtAOn/AAAAAAAAAAAtAOr/AAAAAAAAAAAtAOv/AAAAAAAAAAAtAOz/AAAAAAAAAAAtAO3/AAAAAAAAAAAtAO7/AAAAAAAAAAAsAO//AAAAAAAAAAAuAOz/AAAAAAAAAAAuAO3/AAAAAAAAAAAuAO7/AAAAAAAAAAAvAOz/AAAAAAAAAAAvAO3/AAAAAAAAAAAvAO7/AAAAAAAAAAAwAOz/AAAAAAAAAAAwAO3/AAAAAAAAAAAwAO7/AAAAAAAAAAAxAOz/AAAAAAAAAAAxAO3/AAAAAAAAAAAxAO7/AAAAAAAAAAA6ANn/AAAAAAAAAAA6ANr/AAAAAAAAAAA6ANv/AAAAAAAAAAA6ANz/AAAAAAAAAAA7ANn/AAAAAAAAAAA7ANr/AAAAAAAAAAA7ANv/AAAAAAAAAAA7ANz/AAAAAAAAAAA8ANn/AAAAAAAAAAA8ANr/AAAAAAAAAAA8ANv/AAAAAAAAAAA8ANz/AAAAAAAAAAA7AN3/AAAAAAAAAAA7AN7/AAAAAAAAAAA7AN//AAAAAAAAAAA8AN3/AAAAAAAAAAA8AN7/AAAAAAAAAAA8AN//AAAAAAAAAAA3AOz/AAAAAAAAAAA3AO3/AAAAAAAAAAA4AOz/AAAAAAAAAAA4AO3/AAAAAAAAAAA5AOz/AAAAAAAAAAA5AO3/AAAAAAAAAAAmAOn/AAAAAAAAAGAmAOr/AAAAAAAAAGAnAOn/AAAAAAAAAGAnAOr/AAAAAAAAAGAoAOn/AAAAAAAAAGAoAOr/AAAAAAAAAGApAOn/AAAAAAAAAGApAOr/AAAAAAAAAGAqAOn/AAAAAAAAAGAqAOr/AAAAAAAAAGArAOn/AAAAAAAAAGArAOr/AAAAAAAAAGApAOv/AAAAAAAAAGApAOz/AAAAAAAAAGAqAOv/AAAAAAAAAGAqAOz/AAAAAAAAAGArAOv/AAAAAAAAAGArAOz/AAAAAAAAAGArAO3/AAAAAAAAAGAqAOf/AAAAAAAAAGAqAOj/AAAAAAAAAGArAOf/AAAAAAAAAGArAOj/AAAAAAAAAGAsAOf/AAAAAAAAAGAsAOj/AAAAAAAAAGAtAOf/AAAAAAAAAGAtAOj/AAAAAAAAAGAsANz/AAAAAAAAAAAsAN3/AAAAAAAAAAAtANz/AAAAAAAAAAAtAN3/AAAAAAAAAAAuANz/AAAAAAAAAAAuAN3/AAAAAAAAAAAvANz/AAAAAAAAAAAvAN3/AAAAAAAAAAAwANz/AAAAAAAAAAAwAN3/AAAAAAAAAAAxANz/AAAAAAAAAAAxAN3/AAAAAAAAAAAyANz/AAAAAAAAAAAyAN3/AAAAAAAAAAAwAN7/AAAAAAAAAAAxAN7/AAAAAAAAAAAyAN7/AAAAAAAAAAALANX/AAAAAAAAAAALANb/AAAAAAAAAAALANf/AAAAAAAAAAAMANX/AAAAAAAAAAAMANb/AAAAAAAAAAAMANf/AAAAAAAAAAANANX/AAAAAAAAAAANANb/AAAAAAAAAAANANf/AAAAAAAAAAAOANX/AAAAAAAAAAAOANb/AAAAAAAAAAAOANf/AAAAAAAAAAAPANX/AAAAAAAAAAAPANb/AAAAAAAAAAAPANf/AAAAAAAAAAAQANX/AAAAAAAAAAAQANb/AAAAAAAAAAAQANf/AAAAAAAAAAARANX/AAAAAAAAAAARANb/AAAAAAAAAAARANf/AAAAAAAAAAASANX/AAAAAAAAAAASANb/AAAAAAAAAAASANf/AAAAAAAAAAATANX/AAAAAAAAAAATANb/AAAAAAAAAAATANf/AAAAAAAAAAAVANX/AAAAAAAAAAAWANX/AAAAAAAAAAAXANX/AAAAAAAAAAAYANX/AAAAAAAAAAAZANX/AAAAAAAAAAAaANX/AAAAAAAAAAAbANX/AAAAAAAAAAAUANX/AAAAAAAAAAAgANX/AAAAAAAAAAAgANb/AAAAAAAAAAAgANf/AAAAAAAAAAAhANX/AAAAAAAAAAAhANb/AAAAAAAAAAAhANf/AAAAAAAAAAAiANX/AAAAAAAAAAAiANb/AAAAAAAAAAAiANf/AAAAAAAAAAAjANX/AAAAAAAAAAAjANb/AAAAAAAAAAAjANf/AAAAAAAAAAAkANX/AAAAAAAAAAAkANb/AAAAAAAAAAAkANf/AAAAAAAAAAAlANX/AAAAAAAAAAAlANb/AAAAAAAAAAAlANf/AAAAAAAAAAAmANX/AAAAAAAAAAAnANX/AAAAAAAAAAAoANX/AAAAAAAAAAAmANb/AAAAAAAAAAA1ANX/AAAAAAAAAAA1ANb/AAAAAAAAAAA2ANX/AAAAAAAAAAA2ANb/AAAAAAAAAAA3ANX/AAAAAAAAAAA3ANb/AAAAAAAAAAA4ANX/AAAAAAAAAAA4ANb/AAAAAAAAAAA5ANX/AAAAAAAAAAA5ANb/AAAAAAAAAAA4ANf/AAAAAAAAAAA4ANj/AAAAAAAAAAA5ANf/AAAAAAAAAAA5ANj/AAAAAAAAAAAKAOP/AAABAAAAAAAKAOT/AAABAAAAAAAKAOX/AAABAAAAAAAKAOb/AAABAAAAAAAKAOf/AAABAAAAAAAKAOj/AAABAAAAAAAqAPD/AAABAAAAAAArAO//AAABAAAAAAArAO7/AAABAAAAAAAqAO3/AAABAAAAAAApAO3/AAABAAAAAAAoAOv/AAABAAAAAAAoAOz/AAABAAAAAAAlAOn/AAABAAAAAAAlAOr/AAABAAAAAAAmAOj/AAABAAAAAAAnAOj/AAABAAAAAAAoAOj/AAABAAAAAAApAOj/AAABAAAAAAAqAOb/AAABAAAAAAArAOb/AAABAAAAAAAsAOb/AAABAAAAAAAtAOb/AAABAAAAAAAuAOf/AAABAAAAAAAuAOj/AAABAAAAAAAuAOn/AAABAAAAAAAuAOr/AAABAAAAAAAuAOv/AAABAAAAAAAvAOv/AAABAAAAAAAwAOv/AAABAAAAAAAxAOv/AAABAAAAAAAyAO3/AAABAAAAAAAyAOz/AAABAAAAAAAzAO3/AAABAAAAAAA0AO3/AAABAAAAAAA1AO3/AAABAAAAAAA2AO3/AAABAAAAAAA3AOv/AAABAAAAAAA4AOv/AAABAAAAAAA5AOv/AAABAAAAAAAZAO7/AAABAAAAAAAaAO7/AAABAAAAAAAbAO7/AAABAAAAAAAXAO3/AAABAAAAAAAYAO3/AAABAAAAAAATAO3/AAAAAAAAAAAUAO3/AAAAAAAAAAAVAO3/AAAAAAAAAAAWAO3/AAAAAAAAAAAVAOv/AAAAAAAAAAAVAOz/AAAAAAAAAAAWAOv/AAAAAAAAAAAWAOz/AAAAAAAAAAAzAPH/AAAAAAAAAAAzAPL/AAAAAAAAAAAzAPP/AAAAAAAAAAAzAPT/AAAAAAAAAAAzAPX/AAAAAAAAAAA0APH/AAAAAAAAAAA0APL/AAAAAAAAAAA0APP/AAAAAAAAAAA0APT/AAAAAAAAAAA0APX/AAAAAAAAAAA1APH/AAAAAAAAAAA1APL/AAAAAAAAAAA1APP/AAAAAAAAAAA1APT/AAAAAAAAAAA1APX/AAAAAAAAAAA2APH/AAAAAAAAAAA2APL/AAAAAAAAAAA2APP/AAAAAAAAAAA2APT/AAAAAAAAAAA2APX/AAAAAAAAAAA3APH/AAAAAAAAAAA3APL/AAAAAAAAAAA3APP/AAAAAAAAAAA3APT/AAAAAAAAAAA3APX/AAAAAAAAAAA4APH/AAAAAAAAAAA4APL/AAAAAAAAAAA4APP/AAAAAAAAAAA4APT/AAAAAAAAAAA4APX/AAAAAAAAAAA5APH/AAAAAAAAAAA5APL/AAAAAAAAAAA5APP/AAAAAAAAAAA5APT/AAAAAAAAAAA5APX/AAAAAAAAAAA6APH/AAAAAAAAAAA6APL/AAAAAAAAAAA6APP/AAAAAAAAAAA6APT/AAAAAAAAAAA6APX/AAAAAAAAAAA7APH/AAAAAAAAAAA7APL/AAAAAAAAAAA7APP/AAAAAAAAAAA7APT/AAAAAAAAAAA7APX/AAAAAAAAAAA8APH/AAAAAAAAAAA8APL/AAAAAAAAAAA8APP/AAAAAAAAAAA8APT/AAAAAAAAAAA8APX/AAAAAAAAAAA6APb/AAAAAAAAAAA7APb/AAAAAAAAAAA8APb/AAAAAAAAAAA8APf/AAAAAAAAAAAtAPH/AAAAAAAAAAAtAPL/AAAAAAAAAAAuAPH/AAAAAAAAAAAuAPL/AAAAAAAAAAAvAPH/AAAAAAAAAAAvAPL/AAAAAAAAAAAwAPH/AAAAAAAAAAAwAPL/AAAAAAAAAAAwAPP/AAAAAAAAAAAwAPT/AAAAAAAAAAAxAPH/AAAAAAAAAAAxAPL/AAAAAAAAAAAxAPP/AAAAAAAAAAAxAPT/AAAAAAAAAAAyAPH/AAAAAAAAAAAyAPL/AAAAAAAAAAAyAPP/AAAAAAAAAAAyAPT/AAAAAAAAAAAVAPH/AAAAAAAAAAAVAPL/AAAAAAAAAAAVAPP/AAAAAAAAAAAVAPT/AAAAAAAAAAAWAPH/AAAAAAAAAAAWAPL/AAAAAAAAAAAWAPP/AAAAAAAAAAAWAPT/AAAAAAAAAAAXAPH/AAAAAAAAAAAXAPL/AAAAAAAAAAAXAPP/AAAAAAAAAAAXAPT/AAAAAAAAAAAYAPH/AAAAAAAAAAAYAPL/AAAAAAAAAAAYAPP/AAAAAAAAAAAYAPT/AAAAAAAAAAAWAPX/AAAAAAAAAAAXAPX/AAAAAAAAAAAVAPb/AAAAAAAAAAAVAPX/AAAAAAAAAAAZAPH/AAAAAAAAAAAaAPH/AAAAAAAAAAAZAPL/AAAAAAAAAAAbAPH/AAAAAAAAAAAaAPL/AAAAAAAAAAAZAPP/AAAAAAAAAAAYAPX/AAAAAAAAAAAXAPb/AAAAAAAAAAAVAPf/AAAAAAAAAAAWAPb/AAAAAAAAAAAVAPj/AAAAAAAAAAAcAPD/AAAAAAAAAAAcAPH/AAAAAAAAAAAdAPD/AAAAAAAAAAAdAPH/AAAAAAAAAAAcAO//AAABAAAAAAAdAO//AAABAAAAAAASAN//AAAAAAAAAAASAOD/AAAAAAAAAAASAOH/AAAAAAAAAAASAOL/AAAAAAAAAAASAOP/AAAAAAAAAAASAOT/AAAAAAAAAAATAN//AAAAAAAAAAATAOD/AAAAAAAAAAATAOH/AAAAAAAAAAAUAN//AAAAAAAAAAAUAOD/AAAAAAAAAAAUAOH/AAAAAAAAAAAUAOL/AAAAAAAAAAAVAN//AAAAAAAAAAAVAOD/AAAAAAAAAAAVAOH/AAAAAAAAAAAVAOL/AAAAAAAAAAASAOX/AAAAAAAAAAASAOb/AAAAAAAAAAATAOL/AAAAAAAAAAATAOP/AAAAAAAAAAAUAOP/AAAAAAAAAAAUAOT/AAAAAAAAAAAVAOP/AAAAAAAAAAAVAOT/AAAAAAAAAAALAPH/AAACAAAAAAAMAPH/AAACAAAAAAANAPH/AAACAAAAAAAOAPH/AAACAAAAAAAdAPL/AAAAAAAAAAAcAPL/AAAAAAAAAAAcAPP/AAAAAAAAAAAbAPT/AAAAAAAAAAAaAPT/AAAAAAAAAAAaAPX/AAAAAAAAAAAZAPb/AAAAAAAAAAAZAPf/AAAAAAAAAAAYAPf/AAAAAAAAAAAYAPj/AAAAAAAAAAAXAPj/AAAAAAAAAAAXAPn/AAAAAAAAAAAWAPn/AAAAAAAAAAAWAPr/AAAAAAAAAAAVAPr/AAAAAAAAAAAVAPn/AAAAAAAAAAAWAPj/AAAAAAAAAAAWAPf/AAAAAAAAAAAXAPf/AAAAAAAAAAAYAPb/AAAAAAAAAAAZAPX/AAAAAAAAAAAZAPT/AAAAAAAAAAAaAPP/AAAAAAAAAAAbAPP/AAAAAAAAAAAbAPL/AAAAAAAAAAAeAPH/AAAAAAAAAAA2AOb/AAACAAAAAAA3AOb/AAACAAAAAAA4AOb/AAACAAAAAAA5AOb/AAACAAAAAAAPAN//AAACAAAAAAAQAN//AAACAAAAAAARAN//AAACAAAAAAAWAOL/AAACAAAAAAAXAOL/AAACAAAAAAAYAOL/AAACAAAAAAAVAOr/AAABAAAAAAAWAOr/AAABAAAAAAAXAOv/AAABAAAAAAAXAOz/AAABAAAAAAAVAOX/AAAAAAAAAAAVAOb/AAAAAAAAAAAVAOf/AAAAAAAAAAAVAOj/AAAAAAAAAAAWAOT/AAAAAAAAAAAWAOX/AAAAAAAAAAAWAOb/AAAAAAAAAAAWAOf/AAAAAAAAAAAXAOb/AAAAAAAAAAAXAOX/AAAAAAAAAAAVAN7/AAABAAAAAAAYAOX/AAABAAAAAAAYAOb/AAABAAAAAAA=") tile_set = ExtResource("20_qrebp") [node name="PathDriveMovePlateform" parent="." node_paths=PackedStringArray("path2d", "plateform", "player_trigger") instance=ExtResource("24_fdfto")] @@ -219,6 +219,7 @@ move_speed = 300.0 acceleration = 1000.0 [node name="MovablePlateform" parent="PathDriveMovePlateform" node_paths=PackedStringArray("shaking_target") instance=ExtResource("25_uerbs")] +position = Vector2(-13, 64) shaking_target = NodePath("Sprite2D") shake_strength = 1.0 shake_duration = 1.0 diff --git a/_shared/camera/CameraSystem.gd b/_shared/camera/CameraSystem.gd index 1739a92..6652f9e 100644 --- a/_shared/camera/CameraSystem.gd +++ b/_shared/camera/CameraSystem.gd @@ -6,11 +6,13 @@ extends Node @onready var camera_2d: Camera2D = %Camera2D +@onready var camera_shake_player: CameraShakePlayer = %CameraShakePlayer var _cached_anchors: Array[CameraAnchor] = [] var _current_anchor: CameraAnchor var _switch_tween: Tween var _player_remote: RemoteTransform2D +var _base_camera_pos := Vector2.ZERO ##标记位,用来检测当前帧是否存在相机切换 var _switch_scheduled := false @@ -20,6 +22,16 @@ var _dirty := false const PLAYER_CAMERA_SCENE:= preload("res://_shared/camera/PlayerStaticCamera.tscn") const CAMERA_FOLLOWER:= preload("res://_shared/camera/camera_follower.tscn") +func _ready() -> void: + _base_camera_pos = camera_2d.global_position + +func _process(delta): + if not camera_2d: + return + + var shake_offset := camera_shake_player.update(delta) + camera_2d.global_position = _base_camera_pos + shake_offset + ## 外部获取玩家全局相机 func get_cached_camera() -> Camera2D: return camera_2d @@ -149,8 +161,8 @@ func switch_anchor(target_anchor: CameraAnchor) -> void: # ===== 位置 ===== _switch_tween.tween_property( - camera, - "global_position", + self, + "_base_camera_pos", target_anchor.global_position, blend_time ) diff --git a/_shared/camera/CameraSystem.tscn b/_shared/camera/CameraSystem.tscn index 9e099ed..71a47d2 100644 --- a/_shared/camera/CameraSystem.tscn +++ b/_shared/camera/CameraSystem.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://b8pv5wtbo0y20"] +[gd_scene load_steps=3 format=3 uid="uid://b8pv5wtbo0y20"] [ext_resource type="Script" uid="uid://04mchxkp161a" path="res://_shared/camera/CameraSystem.gd" id="1_xxnab"] +[ext_resource type="Script" uid="uid://sfrjes1hq8b7" path="res://_shared/camera/camera_shake/CameraShakePlayer.gd" id="2_xxnab"] [node name="CameraSystem" type="Node"] script = ExtResource("1_xxnab") @@ -10,3 +11,7 @@ unique_name_in_owner = true limit_smoothed = true editor_draw_limits = true editor_draw_drag_margin = true + +[node name="CameraShakePlayer" type="Node" parent="Camera2D"] +unique_name_in_owner = true +script = ExtResource("2_xxnab") diff --git a/_shared/camera/GlobalCamera.gd b/_shared/camera/GlobalCamera.gd deleted file mode 100644 index ec2b524..0000000 --- a/_shared/camera/GlobalCamera.gd +++ /dev/null @@ -1,24 +0,0 @@ -class_name GlobalCamera extends Node2D - -@onready var phantom_camera_2d: PhantomCamera2D = %PhantomCamera2D - -@onready var _0_hook_touch_noise: PhantomCameraNoiseEmitter2D = %"0_Hook_Touch_Noise" -@onready var _45_hook_touch_noise: PhantomCameraNoiseEmitter2D = %"45_Hook_Touch_Noise" -@onready var _90_hook_touch_noise: PhantomCameraNoiseEmitter2D = %"90_Hook_Touch_Noise" -@onready var _135_hook_touch_noise: PhantomCameraNoiseEmitter2D = %"135_Hook_Touch_Noise" - - -func emit_camera_shock(noise: PhantomCameraNoise2D) -> void: - if not noise: - return - -func emit_hook_touch_shock(dir : int) -> void: - match dir: - 0: - _0_hook_touch_noise.emit() - 1: - _45_hook_touch_noise.emit() - 2: - _90_hook_touch_noise.emit() - 3: - _135_hook_touch_noise.emit() diff --git a/_shared/camera/GlobalCamera.gd.uid b/_shared/camera/GlobalCamera.gd.uid deleted file mode 100644 index f131fe6..0000000 --- a/_shared/camera/GlobalCamera.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://52tgslofxoi2 diff --git a/_shared/camera/PlayerStaticCamera.tscn b/_shared/camera/PlayerStaticCamera.tscn index fb6a336..6973820 100644 --- a/_shared/camera/PlayerStaticCamera.tscn +++ b/_shared/camera/PlayerStaticCamera.tscn @@ -1,11 +1,37 @@ [gd_scene load_steps=11 format=3 uid="uid://d1w8ftfhxycfy"] -[ext_resource type="Script" uid="uid://52tgslofxoi2" path="res://_shared/camera/GlobalCamera.gd" id="1_fixiw"] [ext_resource type="Script" uid="uid://bhexx6mj1xv3q" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="1_llsih"] [ext_resource type="Script" uid="uid://bhd4nuiu23e7l" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_noise_emitter_2d.gd" id="3_0bl5s"] [ext_resource type="Script" uid="uid://8umksf8e80fw" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_fixiw"] [ext_resource type="Script" uid="uid://dimvdouy8g0sv" path="res://addons/phantom_camera/scripts/resources/phantom_camera_noise_2d.gd" id="6_ctkin"] +[sub_resource type="GDScript" id="GDScript_fixiw"] +script/source = "class_name GlobalCamera extends Node2D + +@onready var phantom_camera_2d: PhantomCamera2D = %PhantomCamera2D + +@onready var _0_hook_touch_noise: PhantomCameraNoiseEmitter2D = %\"0_Hook_Touch_Noise\" +@onready var _45_hook_touch_noise: PhantomCameraNoiseEmitter2D = %\"45_Hook_Touch_Noise\" +@onready var _90_hook_touch_noise: PhantomCameraNoiseEmitter2D = %\"90_Hook_Touch_Noise\" +@onready var _135_hook_touch_noise: PhantomCameraNoiseEmitter2D = %\"135_Hook_Touch_Noise\" + + +func emit_camera_shock(noise: PhantomCameraNoise2D) -> void: + if not noise: + return + +func emit_hook_touch_shock(dir : int) -> void: + match dir: + 0: + _0_hook_touch_noise.emit() + 1: + _45_hook_touch_noise.emit() + 2: + _90_hook_touch_noise.emit() + 3: + _135_hook_touch_noise.emit() +" + [sub_resource type="Resource" id="Resource_pvk7k"] script = ExtResource("3_fixiw") @@ -43,7 +69,7 @@ randomize_noise_seed = 1 metadata/_custom_type_script = "uid://dimvdouy8g0sv" [node name="PlayerStaticCamera" type="Node2D"] -script = ExtResource("1_fixiw") +script = SubResource("GDScript_fixiw") [node name="PhantomCamera2D" type="Node2D" parent="."] unique_name_in_owner = true diff --git a/_shared/camera/camera_shake/CSP_HorizontalOnly.tres b/_shared/camera/camera_shake/CSP_HorizontalOnly.tres new file mode 100644 index 0000000..e4b0897 --- /dev/null +++ b/_shared/camera/camera_shake/CSP_HorizontalOnly.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="CameraShakePreset" load_steps=2 format=3 uid="uid://iv3hfxqm5503"] + +[ext_resource type="Script" uid="uid://btm85tbxvjmex" path="res://_shared/camera/camera_shake/CameraShakePreset.gd" id="1_mwfjy"] + +[resource] +script = ExtResource("1_mwfjy") +amplitude = Vector2(35, 0) +frequency = 55.0 +fade_in = 0.04 +fade_out = 0.06 diff --git a/_shared/camera/camera_shake/CSP_VerticalOnly.tres b/_shared/camera/camera_shake/CSP_VerticalOnly.tres new file mode 100644 index 0000000..cc16794 --- /dev/null +++ b/_shared/camera/camera_shake/CSP_VerticalOnly.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="CameraShakePreset" load_steps=2 format=3 uid="uid://bs3cqsp23047i"] + +[ext_resource type="Script" uid="uid://btm85tbxvjmex" path="res://_shared/camera/camera_shake/CameraShakePreset.gd" id="1_pnkiv"] + +[resource] +script = ExtResource("1_pnkiv") +amplitude = Vector2(0, 35) +frequency = 55.0 +fade_in = 0.04 +fade_out = 0.06 diff --git a/_shared/camera/camera_shake/CSP_XY.tres b/_shared/camera/camera_shake/CSP_XY.tres new file mode 100644 index 0000000..26ac07b --- /dev/null +++ b/_shared/camera/camera_shake/CSP_XY.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="CameraShakePreset" load_steps=2 format=3 uid="uid://cs50mkt830f8r"] + +[ext_resource type="Script" uid="uid://btm85tbxvjmex" path="res://_shared/camera/camera_shake/CameraShakePreset.gd" id="1_3oq5o"] + +[resource] +script = ExtResource("1_3oq5o") +amplitude = Vector2(23, 23) +frequency = 55.0 +fade_in = 0.04 +fade_out = 0.06 diff --git a/_shared/camera/camera_shake/CameraShakePlayer.gd b/_shared/camera/camera_shake/CameraShakePlayer.gd new file mode 100644 index 0000000..a62d5ac --- /dev/null +++ b/_shared/camera/camera_shake/CameraShakePlayer.gd @@ -0,0 +1,50 @@ +# CameraShakePlayer.gd +extends Node +class_name CameraShakePlayer + +var _preset: CameraShakePreset +var _time := 0.0 +var _strength := 0.0 +var _active := false + +var _noise := FastNoiseLite.new() +var _noise_seed := randi() + +func play(preset: CameraShakePreset) -> void: + _preset = preset + _time = 0.0 + _strength = 0.0 + _active = true + _noise.seed = _noise_seed + +func stop() -> void: + _active = false + +func update(delta: float) -> Vector2: + if not _active or not _preset: + return Vector2.ZERO + + _time += delta + + var total := _preset.fade_in + _preset.hold + _preset.fade_out + if _time >= total: + _active = false + return Vector2.ZERO + + # ===== 强度曲线 ===== + if _time < _preset.fade_in: + _strength = _time / _preset.fade_in + elif _time < _preset.fade_in + _preset.hold: + _strength = 1.0 + else: + var t := (_time - _preset.fade_in - _preset.hold) / _preset.fade_out + _strength = 1.0 - t + + # ===== Noise 偏移 ===== + var shake_t := _time * _preset.frequency + var offset := Vector2( + _noise.get_noise_1d(shake_t), + _noise.get_noise_1d(shake_t + 1000) + ) + + return offset * _preset.amplitude * _strength diff --git a/_shared/camera/camera_shake/CameraShakePlayer.gd.uid b/_shared/camera/camera_shake/CameraShakePlayer.gd.uid new file mode 100644 index 0000000..d92bd5c --- /dev/null +++ b/_shared/camera/camera_shake/CameraShakePlayer.gd.uid @@ -0,0 +1 @@ +uid://sfrjes1hq8b7 diff --git a/_shared/camera/camera_shake/CameraShakePreset.gd b/_shared/camera/camera_shake/CameraShakePreset.gd new file mode 100644 index 0000000..36de7c5 --- /dev/null +++ b/_shared/camera/camera_shake/CameraShakePreset.gd @@ -0,0 +1,9 @@ +# CameraShakePreset.gd +extends Resource +class_name CameraShakePreset + +@export var amplitude := Vector2(6, 6) # 最大位移 +@export var frequency := 25.0 # 抖动频率 +@export var fade_in := 0.05 +@export var hold := 0.1 +@export var fade_out := 0.15 diff --git a/_shared/camera/camera_shake/CameraShakePreset.gd.uid b/_shared/camera/camera_shake/CameraShakePreset.gd.uid new file mode 100644 index 0000000..33a6873 --- /dev/null +++ b/_shared/camera/camera_shake/CameraShakePreset.gd.uid @@ -0,0 +1 @@ +uid://btm85tbxvjmex diff --git a/_shared/camera/camera_shake/base_noise.tres b/_shared/camera/camera_shake/base_noise.tres deleted file mode 100644 index 94c191d..0000000 --- a/_shared/camera/camera_shake/base_noise.tres +++ /dev/null @@ -1,12 +0,0 @@ -[gd_resource type="Resource" script_class="PhantomCameraNoise2D" load_steps=2 format=3 uid="uid://dy1hsviasxfu0"] - -[ext_resource type="Script" uid="uid://dimvdouy8g0sv" path="res://addons/phantom_camera/scripts/resources/phantom_camera_noise_2d.gd" id="1_oi7x7"] - -[resource] -script = ExtResource("1_oi7x7") -amplitude = 8.0 -frequency = 15.0 -randomize_noise_seed = 1 -noise_seed = 608 -positional_multiplier_y = 2.0 -metadata/_custom_type_script = "uid://dimvdouy8g0sv"