From 93aa31c38eba7f368538319d5547324316a2fb66 Mon Sep 17 00:00:00 2001 From: Reed Date: Thu, 1 Jan 2026 13:03:35 +0800 Subject: [PATCH] =?UTF-8?q?Scene=E7=AE=A1=E7=90=86=E5=99=A8V0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _game/DemoScript.gd | 21 ++ _game/DemoScript.gd.uid | 1 + _game/LevelDemonstration.tscn | 247 +++++++++++++++------- _props/door_manager/event_trigger_door.gd | 4 - addons/reedscene/act/ActManager.gd | 65 ++++++ addons/reedscene/act/SingleAct.gd | 1 + addons/reedscene/scene/ReedScene.gd | 3 - addons/reedscene/update.md | 27 ++- update.md | 4 +- 9 files changed, 288 insertions(+), 85 deletions(-) create mode 100644 _game/DemoScript.gd create mode 100644 _game/DemoScript.gd.uid diff --git a/_game/DemoScript.gd b/_game/DemoScript.gd new file mode 100644 index 0000000..6c5adae --- /dev/null +++ b/_game/DemoScript.gd @@ -0,0 +1,21 @@ +extends Node2D + +@onready var act_manager: ActManager = $ReedScene/ActManager + +var s := 1 + +func _unhandled_input(event: InputEvent) -> void: + if act_manager == null: + return + + if event.is_action_pressed("ui_right"): + s = clampi(s+1,0,2) + act_manager.switch_act_with_id(s) + + elif event.is_action_pressed("ui_left"): + s = clampi(s-1,0,2) + act_manager.switch_act_with_id(s) + elif event.is_action_pressed("ui_up"): + act_manager.switch_act_with_id(3) + elif event.is_action_pressed("ui_down"): + act_manager.switch_act_with_id(4) diff --git a/_game/DemoScript.gd.uid b/_game/DemoScript.gd.uid new file mode 100644 index 0000000..17d5cdd --- /dev/null +++ b/_game/DemoScript.gd.uid @@ -0,0 +1 @@ +uid://ds6jy3s0hhmwt diff --git a/_game/LevelDemonstration.tscn b/_game/LevelDemonstration.tscn index 878e039..08d4d46 100644 --- a/_game/LevelDemonstration.tscn +++ b/_game/LevelDemonstration.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=25 format=4 uid="uid://bj2318o3y68x2"] +[gd_scene load_steps=39 format=4 uid="uid://bj2318o3y68x2"] +[ext_resource type="Script" uid="uid://ds6jy3s0hhmwt" path="res://_game/DemoScript.gd" id="1_2tycc"] [ext_resource type="PackedScene" uid="uid://1l06de041i40" path="res://_levels/l_level_1.tscn" id="1_p0ota"] [ext_resource type="PackedScene" uid="uid://cvqehvdjpoar4" path="res://_player/player_controller.tscn" id="2_gslp7"] [ext_resource type="PackedScene" uid="uid://gwhff4qaouxy" path="res://_player/Avatar.tscn" id="3_6jw57"] @@ -7,18 +8,116 @@ [ext_resource type="Script" uid="uid://b4menkyub4ce7" path="res://addons/reedscene/prop/PropComponent.gd" id="5_gslp7"] [ext_resource type="Script" uid="uid://7lml6d1t5xtq" path="res://addons/reedscene/prop/PropState.gd" id="6_6jw57"] [ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="7_2t6pm"] +[ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="7_xotud"] +[ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="8_2tycc"] [ext_resource type="Script" uid="uid://jeybblac0kg2" path="res://addons/reedscene/prop/ReedTransition.gd" id="8_xkd7q"] -[ext_resource type="Script" uid="uid://bhexx6mj1xv3q" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="9_ady2r"] -[ext_resource type="Script" uid="uid://8umksf8e80fw" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="10_m16wo"] [ext_resource type="Script" uid="uid://di41kt2tj34c2" path="res://addons/reedscene/prop/StateManager.gd" id="11_m16wo"] [ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="12_xja44"] [ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="13_2tycc"] [ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="14_3ihdv"] -[ext_resource type="Script" uid="uid://fxpk2ot6otfh" path="res://addons/reedscene/act/Act.gd" id="15_3ihdv"] [ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="15_hc6q0"] -[ext_resource type="Script" uid="uid://baqgorvlumyju" path="res://addons/reedscene/act/SingleAct.gd" id="16_hc6q0"] -[sub_resource type="Resource" id="Resource_2t6pm"] +[sub_resource type="Resource" id="Resource_3ihdv"] +script = ExtResource("8_2tycc") + +[sub_resource type="Resource" id="Resource_hc6q0"] +script = ExtResource("8_2tycc") + +[sub_resource type="Resource" id="Resource_mwuv1"] +script = ExtResource("8_2tycc") + +[sub_resource type="Resource" id="Resource_m325v"] +script = ExtResource("7_xotud") +prop_state_map = Dictionary[int, ExtResource("8_2tycc")]({ +0: SubResource("Resource_3ihdv"), +1: SubResource("Resource_hc6q0"), +2: SubResource("Resource_mwuv1") +}) + +[sub_resource type="Resource" id="Resource_j8v5a"] +script = ExtResource("8_2tycc") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_acyif"] +script = ExtResource("7_xotud") +prop_state_map = Dictionary[int, ExtResource("8_2tycc")]({ +2: SubResource("Resource_j8v5a") +}) + +[sub_resource type="Resource" id="Resource_2tycc"] +script = ExtResource("8_2tycc") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_xiw5v"] +script = ExtResource("8_2tycc") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_cqglw"] +script = ExtResource("8_2tycc") +state_id = 1 +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_2xems"] +script = ExtResource("7_xotud") +prop_state_map = Dictionary[int, ExtResource("8_2tycc")]({ +0: SubResource("Resource_2tycc"), +1: SubResource("Resource_cqglw"), +2: SubResource("Resource_xiw5v") +}) + +[sub_resource type="Resource" id="Resource_grk6b"] +script = ExtResource("8_2tycc") +state_id = 1 +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_2675c"] +script = ExtResource("8_2tycc") +state_id = 1 +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_iachr"] +script = ExtResource("8_2tycc") +state_id = 1 +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_xxq2d"] +script = ExtResource("7_xotud") +prop_state_map = Dictionary[int, ExtResource("8_2tycc")]({ +0: SubResource("Resource_grk6b"), +1: SubResource("Resource_2675c"), +2: SubResource("Resource_iachr") +}) + +[sub_resource type="Resource" id="Resource_3x1ab"] +script = ExtResource("8_2tycc") +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_qr0ul"] +script = ExtResource("8_2tycc") +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_kbrhb"] +script = ExtResource("8_2tycc") +use_trans = true +metadata/_custom_type_script = "uid://baqgorvlumyju" + +[sub_resource type="Resource" id="Resource_scty3"] +script = ExtResource("7_xotud") +prop_state_map = Dictionary[int, ExtResource("8_2tycc")]({ +0: SubResource("Resource_3x1ab"), +1: SubResource("Resource_qr0ul"), +2: SubResource("Resource_kbrhb") +}) + +[sub_resource type="Resource" id="Resource_xja44"] script = ExtResource("7_2t6pm") effect_type = 1 value = null @@ -26,7 +125,14 @@ func_name = &"reset_door_state_id" func_args = [0] metadata/_custom_type_script = "uid://cdvgq0xqdbagk" -[sub_resource type="Resource" id="Resource_g37lb"] +[sub_resource type="Resource" id="Resource_ip8nj"] +script = ExtResource("7_2t6pm") +effect_type = 1 +value = null +func_name = &"door_close" +metadata/_custom_type_script = "uid://cdvgq0xqdbagk" + +[sub_resource type="Resource" id="Resource_3jvgw"] script = ExtResource("7_2t6pm") effect_type = 1 value = null @@ -34,29 +140,15 @@ func_name = &"reset_door_state_id" func_args = [1] metadata/_custom_type_script = "uid://cdvgq0xqdbagk" -[sub_resource type="Resource" id="Resource_xkd7q"] +[sub_resource type="Resource" id="Resource_g66mt"] script = ExtResource("7_2t6pm") effect_type = 1 value = null func_name = &"door_open" metadata/_custom_type_script = "uid://cdvgq0xqdbagk" -[sub_resource type="Resource" id="Resource_xja44"] -script = ExtResource("10_m16wo") - -[sub_resource type="Resource" id="Resource_hc6q0"] -script = ExtResource("15_3ihdv") -metadata/_custom_type_script = "uid://fxpk2ot6otfh" - -[sub_resource type="Resource" id="Resource_mwuv1"] -script = ExtResource("15_3ihdv") -metadata/_custom_type_script = "uid://fxpk2ot6otfh" - -[sub_resource type="Resource" id="Resource_m325v"] -script = ExtResource("15_3ihdv") -metadata/_custom_type_script = "uid://fxpk2ot6otfh" - [node name="Game" type="Node2D"] +script = ExtResource("1_2tycc") [node name="level_1" parent="." instance=ExtResource("1_p0ota")] tile_map_data = PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA8AAAAAAAAAAAAAABAAAAAAAAAAAAAAABEAAAAAAAAAAAAAABIAAAAAAAAAAAAAABMAAAAAAAAAAAAAABQAAAAAAAAAAAAAABUAAAAAAAAAAAAAABYAAAAAAAAAAAABAAAAAAAAAAAAAAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAABAAkAAAAAAAAAAAABAAoAAAAAAAAAAAABAAsAAAAAAAAAAAABAAwAAAAAAAAAAAABAA0AAAAAAAAAAAABAA4AAAAAAAAAAAABAA8AAAAAAAAAAAABABAAAAAAAAAAAAABABEAAAAAAAAAAAABABIAAAAAAAAAAAABABMAAAAAAAAAAAABABQAAAAAAAAAAAABABUAAAAAAAAAAAABABYAAAAAAAAAAAACAAAAAAAAAAAAAAACAAEAAAAAAAAAAAACAAIAAAAAAAAAAAACAAMAAAAAAAAAAAACAAQAAAAAAAAAAAACAAUAAAAAAAAAAAACAAYAAAAAAAAAAAACAAcAAAAAAAAAAAACAAgAAAAAAAAAAAACAAkAAAAAAAAAAAACAAoAAAAAAAAAAAACAAsAAAAAAAAAAAACAAwAAAAAAAAAAAACAA0AAAAAAAAAAAACAA4AAAAAAAAAAAACAA8AAAAAAAAAAAACABAAAAAAAAAAAAACABEAAAAAAAAAAAACABIAAAAAAAAAAAACABMAAAAAAAAAAAACABQAAAAAAAAAAAACABUAAAAAAAAAAAACABYAAAAAAAAAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAADAAkAAAAAAAAAAAADAAoAAAAAAAAAAAADAAsAAAAAAAAAAAADAAwAAAAAAAAAAAADAA0AAAAAAAAAAAADAA4AAAAAAAAAAAADAA8AAAAAAAAAAAADABAAAAAAAAAAAAADABEAAAAAAAAAAAADABIAAAAAAAAAAAADABMAAAAAAAAAAAADABQAAAAAAAAAAAADABUAAAAAAAAAAAADABYAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAgAAAAAAAAAAAAEAAkAAAAAAAAAAAAEAAoAAAAAAAAAAAAEAAsAAAAAAAAAAAAEAAwAAAAAAAAAAAAEAA0AAAAAAAAAAAAEAA4AAAAAAAAAAAAEAA8AAAAAAAAAAAAEABAAAAAAAAAAAAAEABEAAAAAAAAAAAAEABIAAAAAAAAAAAAEABMAAAAAAAAAAAAEABQAAAAAAAAAAAAEABUAAAAAAAAAAAAEABYAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAFAAkAAAAAAAAAAAAFAAoAAAAAAAAAAAAFAAsAAAAAAAAAAAAFAAwAAAAAAAAAAAAFAA0AAAAAAAAAAAAFAA4AAAAAAAAAAAAFAA8AAAAAAAAAAAAFABAAAAAAAAAAAAAFABEAAAAAAAAAAAAFABIAAAAAAAAAAAAFABMAAAAAAAAAAAAFABQAAAAAAAAAAAAFABUAAAAAAAAAAAAFABYAAAAAAAAAAAAGABIAAAAAAAAAAAAGABMAAAAAAAAAAAAGABQAAAAAAAAAAAAGABUAAAAAAAAAAAAGABYAAAAAAAAAAAAHABIAAAAAAAAAAAAHABMAAAAAAAAAAAAHABQAAAAAAAAAAAAHABUAAAAAAAAAAAAHABYAAAAAAAAAAAAIABIAAAAAAAAAAAAIABMAAAAAAAAAAAAIABQAAAAAAAAAAAAIABUAAAAAAAAAAAAIABYAAAAAAAAAAAAJABIAAAAAAAAAAAAJABMAAAAAAAAAAAAJABQAAAAAAAAAAAAJABUAAAAAAAAAAAAJABYAAAAAAAAAAAAKABIAAAAAAAAAAAAKABMAAAAAAAAAAAAKABQAAAAAAAAAAAAKABUAAAAAAAAAAAAKABYAAAAAAAAAAAALABIAAAAAAAAAAAALABMAAAAAAAAAAAALABQAAAAAAAAAAAALABUAAAAAAAAAAAALABYAAAAAAAAAAAAMABIAAAAAAAAAAAAMABMAAAAAAAAAAAAMABQAAAAAAAAAAAAMABUAAAAAAAAAAAAMABYAAAAAAAAAAAANABIAAAAAAAAAAAANABMAAAAAAAAAAAANABQAAAAAAAAAAAANABUAAAAAAAAAAAANABYAAAAAAAAAAAAOABIAAAAAAAAAAAAOABMAAAAAAAAAAAAOABQAAAAAAAAAAAAOABUAAAAAAAAAAAAOABYAAAAAAAAAAAAPABIAAAAAAAAAAAAPABMAAAAAAAAAAAAPABQAAAAAAAAAAAAPABUAAAAAAAAAAAAPABYAAAAAAAAAAAAQABIAAAAAAAAAAAAQABMAAAAAAAAAAAAQABQAAAAAAAAAAAAQABUAAAAAAAAAAAAQABYAAAAAAAAAAAARABIAAAAAAAAAAAARABMAAAAAAAAAAAARABQAAAAAAAAAAAARABUAAAAAAAAAAAARABYAAAAAAAAAAAASABIAAAAAAAAAAAASABMAAAAAAAAAAAASABQAAAAAAAAAAAASABUAAAAAAAAAAAASABYAAAAAAAAAAAATABIAAAAAAAAAAAATABMAAAAAAAAAAAATABQAAAAAAAAAAAATABUAAAAAAAAAAAATABYAAAAAAAAAAAAUABIAAAAAAAAAAAAUABMAAAAAAAAAAAAUABQAAAAAAAAAAAAUABUAAAAAAAAAAAAUABYAAAAAAAAAAAAVABIAAAAAAAAAAAAVABMAAAAAAAAAAAAVABQAAAAAAAAAAAAVABUAAAAAAAAAAAAVABYAAAAAAAAAAAARAA8AAAAAAAAAAAARABAAAAAAAAAAAAARABEAAAAAAAAAAAASAA8AAAAAAAAAAAASABAAAAAAAAAAAAASABEAAAAAAAAAAAATAA8AAAAAAAAAAAATABAAAAAAAAAAAAATABEAAAAAAAAAAAAUAA8AAAAAAAAAAAAUABAAAAAAAAAAAAAUABEAAAAAAAAAAAAVAA8AAAAAAAAAAAAVABAAAAAAAAAAAAAVABEAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAgAAAAAAAAAAAAHAAAAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAAAAAAAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAgAAAAAAAAAAAAJAAAAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAYAAAAAAAAAAAAKAAcAAAAAAAAAAAAKAAgAAAAAAAAAAAALAAAAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAAAAAAAAAALAAgAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAYAAAAAAAAAAAAMAAcAAAAAAAAAAAAMAAgAAAAAAAAAAAANAAAAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAAOAAAAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAMAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAcAAkAAAAAAAAAAAAcAAoAAAAAAAAAAAAcAAsAAAAAAAAAAAAcAAwAAAAAAAAAAAAcAA0AAAAAAAAAAAAcAA4AAAAAAAAAAAAcAA8AAAAAAAAAAAAcABAAAAAAAAAAAAAcABEAAAAAAAAAAAAcABIAAAAAAAAAAAAcABMAAAAAAAAAAAAcABQAAAAAAAAAAAAcABUAAAAAAAAAAAAcABYAAAAAAAAAAAAdAAkAAAAAAAAAAAAdAAoAAAAAAAAAAAAdAAsAAAAAAAAAAAAdAAwAAAAAAAAAAAAdAA0AAAAAAAAAAAAdAA4AAAAAAAAAAAAdAA8AAAAAAAAAAAAdABAAAAAAAAAAAAAdABEAAAAAAAAAAAAdABIAAAAAAAAAAAAdABMAAAAAAAAAAAAdABQAAAAAAAAAAAAdABUAAAAAAAAAAAAdABYAAAAAAAAAAAAeAAkAAAAAAAAAAAAeAAoAAAAAAAAAAAAeAAsAAAAAAAAAAAAeAAwAAAAAAAAAAAAeAA0AAAAAAAAAAAAeAA4AAAAAAAAAAAAeAA8AAAAAAAAAAAAeABAAAAAAAAAAAAAeABEAAAAAAAAAAAAeABIAAAAAAAAAAAAeABMAAAAAAAAAAAAeABQAAAAAAAAAAAAeABUAAAAAAAAAAAAeABYAAAAAAAAAAAAfAAkAAAAAAAAAAAAfAAoAAAAAAAAAAAAfAAsAAAAAAAAAAAAfAAwAAAAAAAAAAAAfAA0AAAAAAAAAAAAfAA4AAAAAAAAAAAAfAA8AAAAAAAAAAAAfABAAAAAAAAAAAAAfABEAAAAAAAAAAAAfABIAAAAAAAAAAAAfABMAAAAAAAAAAAAfABQAAAAAAAAAAAAfABUAAAAAAAAAAAAfABYAAAAAAAAAAAAgAAkAAAAAAAAAAAAgAAoAAAAAAAAAAAAgAAsAAAAAAAAAAAAgAAwAAAAAAAAAAAAgAA0AAAAAAAAAAAAgAA4AAAAAAAAAAAAgAA8AAAAAAAAAAAAgABAAAAAAAAAAAAAgABEAAAAAAAAAAAAgABIAAAAAAAAAAAAgABMAAAAAAAAAAAAgABQAAAAAAAAAAAAgABUAAAAAAAAAAAAgABYAAAAAAAAAAAAhAAkAAAAAAAAAAAAhAAoAAAAAAAAAAAAhAAsAAAAAAAAAAAAhAAwAAAAAAAAAAAAhAA0AAAAAAAAAAAAhAA4AAAAAAAAAAAAhAA8AAAAAAAAAAAAhABAAAAAAAAAAAAAhABEAAAAAAAAAAAAhABIAAAAAAAAAAAAhABMAAAAAAAAAAAAhABQAAAAAAAAAAAAhABUAAAAAAAAAAAAhABYAAAAAAAAAAAAiAAkAAAAAAAAAAAAiAAoAAAAAAAAAAAAiAAsAAAAAAAAAAAAiAAwAAAAAAAAAAAAiAA0AAAAAAAAAAAAiAA4AAAAAAAAAAAAiAA8AAAAAAAAAAAAiABAAAAAAAAAAAAAiABEAAAAAAAAAAAAiABIAAAAAAAAAAAAiABMAAAAAAAAAAAAiABQAAAAAAAAAAAAiABUAAAAAAAAAAAAiABYAAAAAAAAAAAAjAAkAAAAAAAAAAAAjAAoAAAAAAAAAAAAjAAsAAAAAAAAAAAAjAAwAAAAAAAAAAAAjAA0AAAAAAAAAAAAjAA4AAAAAAAAAAAAjAA8AAAAAAAAAAAAjABAAAAAAAAAAAAAjABEAAAAAAAAAAAAjABIAAAAAAAAAAAAjABMAAAAAAAAAAAAjABQAAAAAAAAAAAAjABUAAAAAAAAAAAAjABYAAAAAAAAAAAAkAAkAAAAAAAAAAAAkAAoAAAAAAAAAAAAkAAsAAAAAAAAAAAAkAAwAAAAAAAAAAAAkAA0AAAAAAAAAAAAkAA4AAAAAAAAAAAAkAA8AAAAAAAAAAAAkABAAAAAAAAAAAAAkABEAAAAAAAAAAAAkABIAAAAAAAAAAAAkABMAAAAAAAAAAAAkABQAAAAAAAAAAAAkABUAAAAAAAAAAAAkABYAAAAAAAAAAAAlAAwAAAAAAAAAAAAlAA0AAAAAAAAAAAAlAA4AAAAAAAAAAAAlAA8AAAAAAAAAAAAlABAAAAAAAAAAAAAlABEAAAAAAAAAAAAlABIAAAAAAAAAAAAlABMAAAAAAAAAAAAlABQAAAAAAAAAAAAlABUAAAAAAAAAAAAlABYAAAAAAAAAAAAmAAwAAAAAAAAAAAAmAA0AAAAAAAAAAAAmAA4AAAAAAAAAAAAmAA8AAAAAAAAAAAAmABAAAAAAAAAAAAAmABEAAAAAAAAAAAAmABIAAAAAAAAAAAAmABMAAAAAAAAAAAAmABQAAAAAAAAAAAAmABUAAAAAAAAAAAAmABYAAAAAAAAAAAAnAA0AAAAAAAAAAAAnAA4AAAAAAAAAAAAnAA8AAAAAAAAAAAAnABAAAAAAAAAAAAAnABEAAAAAAAAAAAAnABIAAAAAAAAAAAAnABMAAAAAAAAAAAAnABQAAAAAAAAAAAAnABUAAAAAAAAAAAAnABYAAAAAAAAAAAAoAA0AAAAAAAAAAAAoAA4AAAAAAAAAAAAoAA8AAAAAAAAAAAAoABAAAAAAAAAAAAAoABEAAAAAAAAAAAAoABIAAAAAAAAAAAAoABMAAAAAAAAAAAAoABQAAAAAAAAAAAAoABUAAAAAAAAAAAAoABYAAAAAAAAAAAApAA0AAAAAAAAAAAApAA4AAAAAAAAAAAApAA8AAAAAAAAAAAApABAAAAAAAAAAAAApABEAAAAAAAAAAAApABIAAAAAAAAAAAApABMAAAAAAAAAAAApABQAAAAAAAAAAAApABUAAAAAAAAAAAApABYAAAAAAAAAAAAqAA0AAAAAAAAAAAAqAA4AAAAAAAAAAAAqAA8AAAAAAAAAAAAqABAAAAAAAAAAAAAqABEAAAAAAAAAAAAqABIAAAAAAAAAAAAqABMAAAAAAAAAAAAqABQAAAAAAAAAAAAqABUAAAAAAAAAAAAqABYAAAAAAAAAAAArAAwAAAAAAAAAAAArAA0AAAAAAAAAAAArAA4AAAAAAAAAAAArAA8AAAAAAAAAAAArABAAAAAAAAAAAAArABEAAAAAAAAAAAArABIAAAAAAAAAAAArABMAAAAAAAAAAAArABQAAAAAAAAAAAArABUAAAAAAAAAAAArABYAAAAAAAAAAAAsAAkAAAAAAAAAAAAsAAoAAAAAAAAAAAAsAAsAAAAAAAAAAAAsAAwAAAAAAAAAAAAsAA0AAAAAAAAAAAAsAA4AAAAAAAAAAAAsAA8AAAAAAAAAAAAsABAAAAAAAAAAAAAsABEAAAAAAAAAAAAsABIAAAAAAAAAAAAsABMAAAAAAAAAAAAsABQAAAAAAAAAAAAsABUAAAAAAAAAAAAsABYAAAAAAAAAAAAtAAkAAAAAAAAAAAAtAAoAAAAAAAAAAAAtAAsAAAAAAAAAAAAtAAwAAAAAAAAAAAAtAA0AAAAAAAAAAAAtAA4AAAAAAAAAAAAtAA8AAAAAAAAAAAAtABAAAAAAAAAAAAAtABEAAAAAAAAAAAAtABIAAAAAAAAAAAAtABMAAAAAAAAAAAAtABQAAAAAAAAAAAAtABUAAAAAAAAAAAAtABYAAAAAAAAAAAAuAAkAAAAAAAAAAAAuAAoAAAAAAAAAAAAuAAsAAAAAAAAAAAAuAAwAAAAAAAAAAAAuAA0AAAAAAAAAAAAuAA4AAAAAAAAAAAAuAA8AAAAAAAAAAAAuABAAAAAAAAAAAAAuABEAAAAAAAAAAAAuABIAAAAAAAAAAAAuABMAAAAAAAAAAAAuABQAAAAAAAAAAAAuABUAAAAAAAAAAAAuABYAAAAAAAAAAAAvAAkAAAAAAAAAAAAvAAoAAAAAAAAAAAAvAAsAAAAAAAAAAAAvAAwAAAAAAAAAAAAvAA0AAAAAAAAAAAAvAA4AAAAAAAAAAAAvAA8AAAAAAAAAAAAvABAAAAAAAAAAAAAvABEAAAAAAAAAAAAvABIAAAAAAAAAAAAvABMAAAAAAAAAAAAvABQAAAAAAAAAAAAvABUAAAAAAAAAAAAvABYAAAAAAAAAAAAwAAkAAAAAAAAAAAAwAAoAAAAAAAAAAAAwAAsAAAAAAAAAAAAwAAwAAAAAAAAAAAAwAA0AAAAAAAAAAAAwAA4AAAAAAAAAAAAwAA8AAAAAAAAAAAAwABAAAAAAAAAAAAAwABEAAAAAAAAAAAAwABIAAAAAAAAAAAAwABMAAAAAAAAAAAAwABQAAAAAAAAAAAAwABUAAAAAAAAAAAAwABYAAAAAAAAAAAAxAAkAAAAAAAAAAAAxAAoAAAAAAAAAAAAxAAsAAAAAAAAAAAAxAAwAAAAAAAAAAAAxAA0AAAAAAAAAAAAxAA4AAAAAAAAAAAAxAA8AAAAAAAAAAAAxABAAAAAAAAAAAAAxABEAAAAAAAAAAAAxABIAAAAAAAAAAAAxABMAAAAAAAAAAAAxABQAAAAAAAAAAAAxABUAAAAAAAAAAAAxABYAAAAAAAAAAAAyAAkAAAAAAAAAAAAyAAoAAAAAAAAAAAAyAAsAAAAAAAAAAAAyAAwAAAAAAAAAAAAyAA0AAAAAAAAAAAAyAA4AAAAAAAAAAAAyAA8AAAAAAAAAAAAyABAAAAAAAAAAAAAyABEAAAAAAAAAAAAyABIAAAAAAAAAAAAyABMAAAAAAAAAAAAyABQAAAAAAAAAAAAyABUAAAAAAAAAAAAyABYAAAAAAAAAAAAzAAkAAAAAAAAAAAAzAAoAAAAAAAAAAAAzAAsAAAAAAAAAAAAzAAwAAAAAAAAAAAAzAA0AAAAAAAAAAAAzAA4AAAAAAAAAAAAzAA8AAAAAAAAAAAAzABAAAAAAAAAAAAAzABEAAAAAAAAAAAAzABIAAAAAAAAAAAAzABMAAAAAAAAAAAAzABQAAAAAAAAAAAAzABUAAAAAAAAAAAAzABYAAAAAAAAAAAAlAAsAAAAAAAAAAAArAAsAAAAAAAAAAAAqAAwAAAAAAAAAAAAAAPv/AAAAAAAAAAAAAPz/AAAAAAAAAAAAAP3/AAAAAAAAAAAAAP7/AAAAAAAAAAAAAP//AAAAAAAAAAABAPv/AAAAAAAAAAABAPz/AAAAAAAAAAABAP3/AAAAAAAAAAABAP7/AAAAAAAAAAABAP//AAAAAAAAAAACAPv/AAAAAAAAAAACAPz/AAAAAAAAAAACAP3/AAAAAAAAAAACAP7/AAAAAAAAAAACAP//AAAAAAAAAAADAPv/AAAAAAAAAAADAPz/AAAAAAAAAAADAP3/AAAAAAAAAAADAP7/AAAAAAAAAAADAP//AAAAAAAAAAAEAPv/AAAAAAAAAAAEAPz/AAAAAAAAAAAEAP3/AAAAAAAAAAAEAP7/AAAAAAAAAAAEAP//AAAAAAAAAAAFAPv/AAAAAAAAAAAFAPz/AAAAAAAAAAAFAP3/AAAAAAAAAAAFAP7/AAAAAAAAAAAFAP//AAAAAAAAAAAGAPv/AAAAAAAAAAAGAPz/AAAAAAAAAAAGAP3/AAAAAAAAAAAGAP7/AAAAAAAAAAAGAP//AAAAAAAAAAAHAPv/AAAAAAAAAAAHAPz/AAAAAAAAAAAHAP3/AAAAAAAAAAAHAP7/AAAAAAAAAAAHAP//AAAAAAAAAAAIAPv/AAAAAAAAAAAIAPz/AAAAAAAAAAAIAP3/AAAAAAAAAAAIAP7/AAAAAAAAAAAIAP//AAAAAAAAAAAJAPv/AAAAAAAAAAAJAPz/AAAAAAAAAAAJAP3/AAAAAAAAAAAJAP7/AAAAAAAAAAAJAP//AAAAAAAAAAAKAPv/AAAAAAAAAAAKAPz/AAAAAAAAAAAKAP3/AAAAAAAAAAAKAP7/AAAAAAAAAAAKAP//AAAAAAAAAAALAPv/AAAAAAAAAAALAPz/AAAAAAAAAAALAP3/AAAAAAAAAAALAP7/AAAAAAAAAAALAP//AAAAAAAAAAAMAPv/AAAAAAAAAAAMAPz/AAAAAAAAAAAMAP3/AAAAAAAAAAAMAP7/AAAAAAAAAAAMAP//AAAAAAAAAAANAPv/AAAAAAAAAAANAPz/AAAAAAAAAAANAP3/AAAAAAAAAAANAP7/AAAAAAAAAAANAP//AAAAAAAAAAAOAPv/AAAAAAAAAAAOAPz/AAAAAAAAAAAOAP3/AAAAAAAAAAAOAP7/AAAAAAAAAAAOAP//AAAAAAAAAAAAAPb/AAAAAAAAAAAAAPf/AAAAAAAAAAAAAPj/AAAAAAAAAAAAAPn/AAAAAAAAAAAAAPr/AAAAAAAAAAABAPb/AAAAAAAAAAABAPf/AAAAAAAAAAABAPj/AAAAAAAAAAABAPn/AAAAAAAAAAABAPr/AAAAAAAAAAACAPb/AAAAAAAAAAACAPf/AAAAAAAAAAACAPj/AAAAAAAAAAACAPn/AAAAAAAAAAACAPr/AAAAAAAAAAADAPb/AAAAAAAAAAADAPf/AAAAAAAAAAADAPj/AAAAAAAAAAADAPn/AAAAAAAAAAADAPr/AAAAAAAAAAAEAPb/AAAAAAAAAAAEAPf/AAAAAAAAAAAEAPj/AAAAAAAAAAAEAPn/AAAAAAAAAAAEAPr/AAAAAAAAAAAFAPb/AAAAAAAAAAAFAPf/AAAAAAAAAAAFAPj/AAAAAAAAAAAFAPn/AAAAAAAAAAAFAPr/AAAAAAAAAAAGAPb/AAAAAAAAAAAGAPf/AAAAAAAAAAAGAPj/AAAAAAAAAAAGAPn/AAAAAAAAAAAGAPr/AAAAAAAAAAAHAPb/AAAAAAAAAAAHAPf/AAAAAAAAAAAHAPj/AAAAAAAAAAAHAPn/AAAAAAAAAAAHAPr/AAAAAAAAAAAIAPb/AAAAAAAAAAAIAPf/AAAAAAAAAAAIAPj/AAAAAAAAAAAIAPn/AAAAAAAAAAAIAPr/AAAAAAAAAAAJAPb/AAAAAAAAAAAJAPf/AAAAAAAAAAAJAPj/AAAAAAAAAAAJAPn/AAAAAAAAAAAJAPr/AAAAAAAAAAAKAPb/AAAAAAAAAAAKAPf/AAAAAAAAAAAKAPj/AAAAAAAAAAAKAPn/AAAAAAAAAAAKAPr/AAAAAAAAAAALAPb/AAAAAAAAAAALAPf/AAAAAAAAAAALAPj/AAAAAAAAAAALAPn/AAAAAAAAAAALAPr/AAAAAAAAAAAMAPb/AAAAAAAAAAAMAPf/AAAAAAAAAAAMAPj/AAAAAAAAAAAMAPn/AAAAAAAAAAAMAPr/AAAAAAAAAAANAPb/AAAAAAAAAAANAPf/AAAAAAAAAAANAPj/AAAAAAAAAAANAPn/AAAAAAAAAAANAPr/AAAAAAAAAAAOAPb/AAAAAAAAAAAOAPf/AAAAAAAAAAAOAPj/AAAAAAAAAAAOAPn/AAAAAAAAAAAOAPr/AAAAAAAAAAAPAPb/AAAAAAAAAAAPAPf/AAAAAAAAAAAPAPj/AAAAAAAAAAAPAPn/AAAAAAAAAAAPAPr/AAAAAAAAAAAQAPb/AAAAAAAAAAAQAPf/AAAAAAAAAAAQAPj/AAAAAAAAAAAQAPn/AAAAAAAAAAAQAPr/AAAAAAAAAAARAPb/AAAAAAAAAAARAPf/AAAAAAAAAAARAPj/AAAAAAAAAAARAPn/AAAAAAAAAAARAPr/AAAAAAAAAAASAPb/AAAAAAAAAAASAPf/AAAAAAAAAAASAPj/AAAAAAAAAAASAPn/AAAAAAAAAAASAPr/AAAAAAAAAAATAPb/AAAAAAAAAAATAPf/AAAAAAAAAAATAPj/AAAAAAAAAAATAPn/AAAAAAAAAAATAPr/AAAAAAAAAAAUAPb/AAAAAAAAAAAUAPf/AAAAAAAAAAAUAPj/AAAAAAAAAAAUAPn/AAAAAAAAAAAUAPr/AAAAAAAAAAAVAPb/AAAAAAAAAAAVAPf/AAAAAAAAAAAVAPj/AAAAAAAAAAAVAPn/AAAAAAAAAAAVAPr/AAAAAAAAAAAWAPb/AAAAAAAAAAAWAPf/AAAAAAAAAAAWAPj/AAAAAAAAAAAWAPn/AAAAAAAAAAAWAPr/AAAAAAAAAAAXAPb/AAAAAAAAAAAXAPf/AAAAAAAAAAAXAPj/AAAAAAAAAAAXAPn/AAAAAAAAAAAXAPr/AAAAAAAAAAAYAPb/AAAAAAAAAAAYAPf/AAAAAAAAAAAYAPj/AAAAAAAAAAAYAPn/AAAAAAAAAAAYAPr/AAAAAAAAAAAZAPb/AAAAAAAAAAAZAPf/AAAAAAAAAAAZAPj/AAAAAAAAAAAZAPn/AAAAAAAAAAAZAPr/AAAAAAAAAAAaAPb/AAAAAAAAAAAaAPf/AAAAAAAAAAAaAPj/AAAAAAAAAAAaAPn/AAAAAAAAAAAaAPr/AAAAAAAAAAAbAPb/AAAAAAAAAAAbAPf/AAAAAAAAAAAbAPj/AAAAAAAAAAAbAPn/AAAAAAAAAAAbAPr/AAAAAAAAAAAcAPb/AAAAAAAAAAAcAPf/AAAAAAAAAAAcAPj/AAAAAAAAAAAcAPn/AAAAAAAAAAAcAPr/AAAAAAAAAAAdAPb/AAAAAAAAAAAdAPf/AAAAAAAAAAAdAPj/AAAAAAAAAAAdAPn/AAAAAAAAAAAdAPr/AAAAAAAAAAAeAPb/AAAAAAAAAAAeAPf/AAAAAAAAAAAeAPj/AAAAAAAAAAAeAPn/AAAAAAAAAAAeAPr/AAAAAAAAAAAfAPb/AAAAAAAAAAAfAPf/AAAAAAAAAAAfAPj/AAAAAAAAAAAfAPn/AAAAAAAAAAAfAPr/AAAAAAAAAAAgAPb/AAAAAAAAAAAgAPf/AAAAAAAAAAAgAPj/AAAAAAAAAAAgAPn/AAAAAAAAAAAgAPr/AAAAAAAAAAAhAPb/AAAAAAAAAAAhAPf/AAAAAAAAAAAhAPj/AAAAAAAAAAAhAPn/AAAAAAAAAAAhAPr/AAAAAAAAAAAiAPb/AAAAAAAAAAAiAPf/AAAAAAAAAAAiAPj/AAAAAAAAAAAiAPn/AAAAAAAAAAAiAPr/AAAAAAAAAAAjAPb/AAAAAAAAAAAjAPf/AAAAAAAAAAAjAPj/AAAAAAAAAAAjAPn/AAAAAAAAAAAjAPr/AAAAAAAAAAAkAPb/AAAAAAAAAAAkAPf/AAAAAAAAAAAkAPj/AAAAAAAAAAAkAPn/AAAAAAAAAAAkAPr/AAAAAAAAAAAlAPb/AAAAAAAAAAAlAPf/AAAAAAAAAAAlAPj/AAAAAAAAAAAlAPn/AAAAAAAAAAAlAPr/AAAAAAAAAAAmAPb/AAAAAAAAAAAmAPf/AAAAAAAAAAAmAPj/AAAAAAAAAAAmAPn/AAAAAAAAAAAmAPr/AAAAAAAAAAAnAPb/AAAAAAAAAAAnAPf/AAAAAAAAAAAnAPj/AAAAAAAAAAAnAPn/AAAAAAAAAAAnAPr/AAAAAAAAAAAoAPb/AAAAAAAAAAAoAPf/AAAAAAAAAAAoAPj/AAAAAAAAAAAoAPn/AAAAAAAAAAAoAPr/AAAAAAAAAAApAPb/AAAAAAAAAAApAPf/AAAAAAAAAAApAPj/AAAAAAAAAAApAPn/AAAAAAAAAAApAPr/AAAAAAAAAAAqAPb/AAAAAAAAAAAqAPf/AAAAAAAAAAAqAPj/AAAAAAAAAAAqAPn/AAAAAAAAAAAqAPr/AAAAAAAAAAArAPb/AAAAAAAAAAArAPf/AAAAAAAAAAArAPj/AAAAAAAAAAArAPn/AAAAAAAAAAArAPr/AAAAAAAAAAAsAPb/AAAAAAAAAAAsAPf/AAAAAAAAAAAsAPj/AAAAAAAAAAAsAPn/AAAAAAAAAAAsAPr/AAAAAAAAAAAtAPb/AAAAAAAAAAAtAPf/AAAAAAAAAAAtAPj/AAAAAAAAAAAtAPn/AAAAAAAAAAAtAPr/AAAAAAAAAAAuAPb/AAAAAAAAAAAuAPf/AAAAAAAAAAAuAPj/AAAAAAAAAAAuAPn/AAAAAAAAAAAuAPr/AAAAAAAAAAAvAPb/AAAAAAAAAAAvAPf/AAAAAAAAAAAvAPj/AAAAAAAAAAAvAPn/AAAAAAAAAAAvAPr/AAAAAAAAAAAwAPb/AAAAAAAAAAAwAPf/AAAAAAAAAAAwAPj/AAAAAAAAAAAwAPn/AAAAAAAAAAAwAPr/AAAAAAAAAAAxAPb/AAAAAAAAAAAxAPf/AAAAAAAAAAAxAPj/AAAAAAAAAAAxAPn/AAAAAAAAAAAxAPr/AAAAAAAAAAAyAPb/AAAAAAAAAAAyAPf/AAAAAAAAAAAyAPj/AAAAAAAAAAAyAPn/AAAAAAAAAAAyAPr/AAAAAAAAAAAzAPb/AAAAAAAAAAAzAPf/AAAAAAAAAAAzAPj/AAAAAAAAAAAzAPn/AAAAAAAAAAAzAPr/AAAAAAAAAAA0APb/AAAAAAAAAAA0APf/AAAAAAAAAAA0APj/AAAAAAAAAAA0APn/AAAAAAAAAAA0APr/AAAAAAAAAAA1APb/AAAAAAAAAAA1APf/AAAAAAAAAAA1APj/AAAAAAAAAAA1APn/AAAAAAAAAAA1APr/AAAAAAAAAAA2APb/AAAAAAAAAAA2APf/AAAAAAAAAAA2APj/AAAAAAAAAAA2APn/AAAAAAAAAAA2APr/AAAAAAAAAAA3APb/AAAAAAAAAAA3APf/AAAAAAAAAAA3APj/AAAAAAAAAAA3APn/AAAAAAAAAAA3APr/AAAAAAAAAAA4APb/AAAAAAAAAAA4APf/AAAAAAAAAAA4APj/AAAAAAAAAAA4APn/AAAAAAAAAAA4APr/AAAAAAAAAAA5APb/AAAAAAAAAAA5APf/AAAAAAAAAAA5APj/AAAAAAAAAAA5APn/AAAAAAAAAAA5APr/AAAAAAAAAAA6APb/AAAAAAAAAAA6APf/AAAAAAAAAAA6APj/AAAAAAAAAAA6APn/AAAAAAAAAAA6APr/AAAAAAAAAAAWAA8AAAABAAAAAAAWABAAAAABAAAAAAAWABEAAAABAAAAAAAWABIAAAABAAAAAAAWABMAAAABAAAAAAAWABQAAAABAAAAAAAWABUAAAABAAAAAAAWABYAAAABAAAAAAAbAA8AAAABAAAAAAAbABAAAAABAAAAAAAbABEAAAABAAAAAAAbABIAAAABAAAAAAAbABMAAAABAAAAAAAbABQAAAABAAAAAAAbABUAAAABAAAAAAAbABYAAAABAAAAAAAhAAgAAAABAAAAAAAiAAgAAAABAAAAAAAjAAgAAAABAAAAAABKAAkAAAAAAAAAAABKAAoAAAAAAAAAAABKAAsAAAAAAAAAAABKAAwAAAAAAAAAAABLAAkAAAAAAAAAAABLAAoAAAAAAAAAAABLAAsAAAAAAAAAAABLAAwAAAAAAAAAAABKAAUAAAAAAAAAAABKAAYAAAAAAAAAAABKAAcAAAAAAAAAAABKAAgAAAAAAAAAAABKAA0AAAAAAAAAAABLAAUAAAAAAAAAAABLAAYAAAAAAAAAAABLAAcAAAAAAAAAAABLAAgAAAAAAAAAAABLAA0AAAAAAAAAAABQABMAAAAAAAAAAABQABQAAAAAAAAAAABQABUAAAAAAAAAAABQABYAAAAAAAAAAABQABcAAAAAAAAAAABRABMAAAAAAAAAAABRABQAAAAAAAAAAABRABUAAAAAAAAAAABRABYAAAAAAAAAAABRABcAAAAAAAAAAABSABMAAAAAAAAAAABSABQAAAAAAAAAAABSABUAAAAAAAAAAABSABYAAAAAAAAAAABSABcAAAAAAAAAAABTABMAAAAAAAAAAABTABQAAAAAAAAAAABTABUAAAAAAAAAAABTABYAAAAAAAAAAABTABcAAAAAAAAAAABUABMAAAAAAAAAAABUABQAAAAAAAAAAABUABUAAAAAAAAAAABUABYAAAAAAAAAAABUABcAAAAAAAAAAABVABMAAAAAAAAAAABVABQAAAAAAAAAAABVABUAAAAAAAAAAABVABYAAAAAAAAAAABVABcAAAAAAAAAAABWABMAAAAAAAAAAABWABQAAAAAAAAAAABWABUAAAAAAAAAAABWABYAAAAAAAAAAABWABcAAAAAAAAAAABXAAsAAAAAAAAAAABXAAwAAAAAAAAAAABXAA0AAAAAAAAAAABXAA4AAAAAAAAAAABXABMAAAAAAAAAAABXABQAAAAAAAAAAABXABUAAAAAAAAAAABXABYAAAAAAAAAAABXABcAAAAAAAAAAABYAAsAAAAAAAAAAABYAAwAAAAAAAAAAABYAA0AAAAAAAAAAABYAA4AAAAAAAAAAABYABMAAAAAAAAAAABYABQAAAAAAAAAAABYABUAAAAAAAAAAABYABYAAAAAAAAAAABYABcAAAAAAAAAAABZAAsAAAAAAAAAAABZAAwAAAAAAAAAAABZAA0AAAAAAAAAAABZAA4AAAAAAAAAAABZABMAAAAAAAAAAABZABQAAAAAAAAAAABZABUAAAAAAAAAAABZABYAAAAAAAAAAABZABcAAAAAAAAAAABaAAsAAAAAAAAAAABaAAwAAAAAAAAAAABaAA0AAAAAAAAAAABaAA4AAAAAAAAAAABaABMAAAAAAAAAAABaABQAAAAAAAAAAABaABUAAAAAAAAAAABaABYAAAAAAAAAAABaABcAAAAAAAAAAABbAAsAAAAAAAAAAABbAAwAAAAAAAAAAABbAA0AAAAAAAAAAABbAA4AAAAAAAAAAABbABMAAAAAAAAAAABbABQAAAAAAAAAAABbABUAAAAAAAAAAABbABYAAAAAAAAAAABbABcAAAAAAAAAAABcAAsAAAAAAAAAAABcAAwAAAAAAAAAAABcAA0AAAAAAAAAAABcAA4AAAAAAAAAAABcABMAAAAAAAAAAABcABQAAAAAAAAAAABcABUAAAAAAAAAAABcABYAAAAAAAAAAABcABcAAAAAAAAAAABdAAsAAAAAAAAAAABdAAwAAAAAAAAAAABdAA0AAAAAAAAAAABdAA4AAAAAAAAAAABdABMAAAAAAAAAAABdABQAAAAAAAAAAABdABUAAAAAAAAAAABdABYAAAAAAAAAAABdABcAAAAAAAAAAABeAAsAAAAAAAAAAABeAAwAAAAAAAAAAABeAA0AAAAAAAAAAABeAA4AAAAAAAAAAABeABMAAAAAAAAAAABeABQAAAAAAAAAAABeABUAAAAAAAAAAABeABYAAAAAAAAAAABeABcAAAAAAAAAAAA0AA8AAAAAAAAAAAA0ABAAAAAAAAAAAAA0ABEAAAAAAAAAAAA0ABIAAAAAAAAAAAA0ABMAAAAAAAAAAAA0ABQAAAAAAAAAAAA0ABUAAAAAAAAAAAA0ABYAAAAAAAAAAAA1AA8AAAAAAAAAAAA1ABAAAAAAAAAAAAA1ABEAAAAAAAAAAAA1ABIAAAAAAAAAAAA1ABMAAAAAAAAAAAA1ABQAAAAAAAAAAAA1ABUAAAAAAAAAAAA1ABYAAAAAAAAAAAA2AA8AAAAAAAAAAAA2ABAAAAAAAAAAAAA2ABEAAAAAAAAAAAA2ABIAAAAAAAAAAAA2ABMAAAAAAAAAAAA2ABQAAAAAAAAAAAA2ABUAAAAAAAAAAAA2ABYAAAAAAAAAAAA3AA8AAAAAAAAAAAA3ABAAAAAAAAAAAAA3ABEAAAAAAAAAAAA3ABIAAAAAAAAAAAA3ABMAAAAAAAAAAAA3ABQAAAAAAAAAAAA3ABUAAAAAAAAAAAA3ABYAAAAAAAAAAAA4AA8AAAAAAAAAAAA4ABAAAAAAAAAAAAA4ABEAAAAAAAAAAAA4ABIAAAAAAAAAAAA4ABMAAAAAAAAAAAA4ABQAAAAAAAAAAAA4ABUAAAAAAAAAAAA4ABYAAAAAAAAAAAA5AA8AAAAAAAAAAAA5ABAAAAAAAAAAAAA5ABEAAAAAAAAAAAA5ABIAAAAAAAAAAAA5ABMAAAAAAAAAAAA5ABQAAAAAAAAAAAA5ABUAAAAAAAAAAAA5ABYAAAAAAAAAAAA6AA8AAAAAAAAAAAA6ABAAAAAAAAAAAAA6ABEAAAAAAAAAAAA6ABIAAAAAAAAAAAA6ABMAAAAAAAAAAAA6ABQAAAAAAAAAAAA6ABUAAAAAAAAAAAA6ABYAAAAAAAAAAAA7AA8AAAAAAAAAAAA7ABAAAAAAAAAAAAA7ABEAAAAAAAAAAAA7ABIAAAAAAAAAAAA7ABMAAAAAAAAAAAA7ABQAAAAAAAAAAAA7ABUAAAAAAAAAAAA7ABYAAAAAAAAAAAA8AA8AAAAAAAAAAAA8ABAAAAAAAAAAAAA8ABEAAAAAAAAAAAA8ABIAAAAAAAAAAAA8ABMAAAAAAAAAAAA8ABQAAAAAAAAAAAA8ABUAAAAAAAAAAAA8ABYAAAAAAAAAAAA9AA8AAAAAAAAAAAA9ABAAAAAAAAAAAAA9ABEAAAAAAAAAAAA9ABIAAAAAAAAAAAA9ABMAAAAAAAAAAAA9ABQAAAAAAAAAAAA9ABUAAAAAAAAAAAA9ABYAAAAAAAAAAAA+AA8AAAAAAAAAAAA+ABAAAAAAAAAAAAA+ABEAAAAAAAAAAAA+ABIAAAAAAAAAAAA+ABMAAAAAAAAAAAA+ABQAAAAAAAAAAAA+ABUAAAAAAAAAAAA+ABYAAAAAAAAAAAA/AA8AAAAAAAAAAAA/ABAAAAAAAAAAAAA/ABEAAAAAAAAAAAA/ABIAAAAAAAAAAAA/ABMAAAAAAAAAAAA/ABQAAAAAAAAAAAA/ABUAAAAAAAAAAAA/ABYAAAAAAAAAAABAAA8AAAAAAAAAAABAABAAAAAAAAAAAABAABEAAAAAAAAAAABAABIAAAAAAAAAAABAABMAAAAAAAAAAABAABQAAAAAAAAAAABAABUAAAAAAAAAAABAABYAAAAAAAAAAABBAA8AAAAAAAAAAABBABAAAAAAAAAAAABBABEAAAAAAAAAAABBABIAAAAAAAAAAABBABMAAAAAAAAAAABBABQAAAAAAAAAAABBABUAAAAAAAAAAABBABYAAAAAAAAAAAA0AAkAAAABAAAAAAA0AAoAAAABAAAAAAA0AAsAAAABAAAAAAA0AAwAAAABAAAAAAA0AA0AAAABAAAAAAA0AA4AAAABAAAAAAA1AA4AAAABAAAAAAA2AA4AAAABAAAAAAA3AA4AAAABAAAAAAA4AA4AAAABAAAAAABJAAUAAAABAAAAAABJAAYAAAABAAAAAABJAAcAAAABAAAAAABJAAgAAAABAAAAAABJAAkAAAABAAAAAABJAAoAAAABAAAAAABJAAsAAAABAAAAAABJAAwAAAABAAAAAABJAA0AAAABAAAAAABMAAkAAAABAAAAAAA=") @@ -68,51 +160,6 @@ auto_controlled_avatar = NodePath("../Avatar") position = Vector2(606, 108) collision_mask = 4 -[node name="EventTriggerDoor" parent="." instance=ExtResource("4_p0ota")] -position = Vector2(342, 176) - -[node name="[Prop_0001]" type="Node" parent="EventTriggerDoor"] -script = ExtResource("5_gslp7") -prop_id = 1 -metadata/_custom_type_script = "uid://b4menkyub4ce7" - -[node name="States" type="Node" parent="EventTriggerDoor/[Prop_0001]"] - -[node name="Close" type="Node" parent="EventTriggerDoor/[Prop_0001]/States"] -script = ExtResource("6_6jw57") -state_id = 0 -effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_2t6pm")]) -metadata/_custom_type_script = "uid://7lml6d1t5xtq" - -[node name="Open" type="Node" parent="EventTriggerDoor/[Prop_0001]/States"] -script = ExtResource("6_6jw57") -state_id = 1 -effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_g37lb")]) -metadata/_custom_type_script = "uid://7lml6d1t5xtq" - -[node name="FromClose" type="Node" parent="EventTriggerDoor/[Prop_0001]/States/Open"] -script = ExtResource("8_xkd7q") -from_state_id = 0 -effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_xkd7q")]) -metadata/_custom_type_script = "uid://jeybblac0kg2" - -[node name="PhantomCamera2D" type="Node2D" parent="."] -script = ExtResource("9_ady2r") -tween_resource = SubResource("Resource_xja44") -metadata/_custom_type_script = "uid://bhexx6mj1xv3q" - -[node name="[Prop_0000]" type="Node" parent="PhantomCamera2D"] -script = ExtResource("5_gslp7") -prop_id = 0 -metadata/_custom_type_script = "uid://b4menkyub4ce7" - -[node name="States" type="Node" parent="PhantomCamera2D/[Prop_0000]"] -script = ExtResource("11_m16wo") - -[node name="[ID_0] Default" type="Node" parent="PhantomCamera2D/[Prop_0000]/States"] -script = ExtResource("6_6jw57") -state_id = 0 - [node name="ReedScene" type="Node2D" parent="."] script = ExtResource("13_2tycc") metadata/_custom_type_script = "uid://5e157vdk6175" @@ -123,10 +170,12 @@ TransitionNode = NodePath("Transition") [node name="ActManager" type="Node" parent="ReedScene"] script = ExtResource("12_xja44") -prop_state_map = Dictionary[int, ExtResource("15_3ihdv")]({ -0: SubResource("Resource_hc6q0"), -1: SubResource("Resource_mwuv1"), -2: SubResource("Resource_m325v") +prop_state_map = Dictionary[int, ExtResource("7_xotud")]({ +0: SubResource("Resource_m325v"), +1: SubResource("Resource_acyif"), +2: SubResource("Resource_2xems"), +3: SubResource("Resource_xxq2d"), +4: SubResource("Resource_scty3") }) [node name="Props" type="Node2D" parent="ReedScene"] @@ -142,9 +191,25 @@ prop_id = 0 [node name="States" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]"] script = ExtResource("11_m16wo") -[node name="[ID_0] Default" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]/States"] +[node name="[ID_0] Close" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]/States"] script = ExtResource("6_6jw57") state_id = 0 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_xja44")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]/States/[ID_0] Close"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_ip8nj")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" + +[node name="[ID_1] Open" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]/States"] +script = ExtResource("6_6jw57") +state_id = 1 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_3jvgw")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor/[Prop_0000]/States/[ID_1] Open"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_g66mt")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" [node name="EventTriggerDoor2" parent="ReedScene/Props" instance=ExtResource("4_p0ota")] position = Vector2(723, 64) @@ -156,9 +221,25 @@ prop_id = 1 [node name="States" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]"] script = ExtResource("11_m16wo") -[node name="[ID_0] Default" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]/States"] +[node name="[ID_0] Close" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]/States"] script = ExtResource("6_6jw57") state_id = 0 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_xja44")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]/States/[ID_0] Close"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_ip8nj")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" + +[node name="[ID_1] Open" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]/States"] +script = ExtResource("6_6jw57") +state_id = 1 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_3jvgw")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor2/[Prop_0001]/States/[ID_1] Open"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_g66mt")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" [node name="EventTriggerDoor3" parent="ReedScene/Props" instance=ExtResource("4_p0ota")] position = Vector2(458, 63) @@ -170,6 +251,22 @@ prop_id = 2 [node name="States" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]"] script = ExtResource("11_m16wo") -[node name="[ID_0] Default" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]/States"] +[node name="[ID_0] Close" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]/States"] script = ExtResource("6_6jw57") state_id = 0 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_xja44")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]/States/[ID_0] Close"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_ip8nj")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" + +[node name="[ID_1] Open" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]/States"] +script = ExtResource("6_6jw57") +state_id = 1 +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_3jvgw")]) + +[node name="ReedTransition" type="Node" parent="ReedScene/Props/EventTriggerDoor3/[Prop_0002]/States/[ID_1] Open"] +script = ExtResource("8_xkd7q") +effects = Array[ExtResource("7_2t6pm")]([SubResource("Resource_g66mt")]) +metadata/_custom_type_script = "uid://jeybblac0kg2" diff --git a/_props/door_manager/event_trigger_door.gd b/_props/door_manager/event_trigger_door.gd index 651a610..e5f3a1d 100644 --- a/_props/door_manager/event_trigger_door.gd +++ b/_props/door_manager/event_trigger_door.gd @@ -12,10 +12,6 @@ var door_state_id: int = 0 ##门移动动画结束广播,输出0为关闭,输出1为开启 signal door_move_finished(int) -func _ready() -> void: - await get_tree().create_timer(.2).timeout - $PropComponent.change_state(1,true) - ##开门 func door_open() -> void: door_move(door_open_poser) diff --git a/addons/reedscene/act/ActManager.gd b/addons/reedscene/act/ActManager.gd index 7bb3957..d919a96 100644 --- a/addons/reedscene/act/ActManager.gd +++ b/addons/reedscene/act/ActManager.gd @@ -18,8 +18,49 @@ var _gen_empty_act: Callable = Callable(self, "_editor_generate_empty_act") var max_index := max(prop_state_map.size() - 1, 0) init_act_id = clamp(value, 0, max_index) +## ==================== +## Private Field +## ==================== +var _current_act: Act = null +var _current_act_id: int = -1 signal act_changed(from_act_id: int, to_act_id: int) +func _ready() -> void: + ##初始默认把act 切换到Default状态 + switch_act_with_id(0) + +##通过ID切换act +func switch_act_with_id(act_id: int) -> void: + if not prop_state_map.has(act_id): + push_warning("[ActManager] Act id not found: %d" % act_id) + return + + var act := prop_state_map[act_id] + _switch_act_internal(act, act_id) + +##内部通过ID和Act来切换状态 +func _switch_act_internal(act: Act, act_id: int) -> void: + if act == null: + return + + var from_id := _current_act_id + + _current_act = act + _current_act_id = act_id + + for pid in act.prop_state_map.keys(): + var single := act.prop_state_map[pid] + if single == null: + continue + + var prop := _find_prop_by_id(pid) + if prop == null: + continue + + prop.change_state(single.state_id, single.use_trans) + + emit_signal("act_changed", from_id, act_id) + ##用来扫描prop func _scan_scene_for_props(scene_root: Node) -> Dictionary: var result := {} @@ -158,3 +199,27 @@ func _find_next_free_act_id() -> int: while prop_state_map.has(id): id += 1 return id + +##通过ID寻找Prop +func _find_prop_by_id(prop_id: int) -> PropComponent: + var scene := _get_owner_scene() + if scene == null: + return null + + var props_root := scene.get_node_or_null(scene.props_root_path) + if props_root == null: + return null + + return _find_prop_recursive(props_root, prop_id) + +##递归的寻找Prop +func _find_prop_recursive(node: Node, prop_id: int) -> PropComponent: + if node is PropComponent and node.prop_id == prop_id: + return node as PropComponent + + for child in node.get_children(): + var r := _find_prop_recursive(child, prop_id) + if r != null: + return r + + return null diff --git a/addons/reedscene/act/SingleAct.gd b/addons/reedscene/act/SingleAct.gd index c9c760b..2a1589e 100644 --- a/addons/reedscene/act/SingleAct.gd +++ b/addons/reedscene/act/SingleAct.gd @@ -2,3 +2,4 @@ class_name SingleAct extends Resource @export var state_id: int = 0 @export var use_trans: bool = false +@export var context: Dictionary diff --git a/addons/reedscene/scene/ReedScene.gd b/addons/reedscene/scene/ReedScene.gd index a2fcdb1..f1ef82c 100644 --- a/addons/reedscene/scene/ReedScene.gd +++ b/addons/reedscene/scene/ReedScene.gd @@ -132,9 +132,6 @@ func _on_act_changed(from_act: int, to_act: int) -> void: if debug_log: print("[ReedScene] Act changed:", from_act, "->", to_act) - for prop_comp in _prop_map.values(): - prop_comp.on_act_changed(from_act, to_act) - ##进入场景树,自动添加ActManager,PropsRoot,和SceneManager func _editor_ensure_scene_nodes() -> void: _editor_ensure_node(SCENE_MANAGER_NAME, SceneManager) diff --git a/addons/reedscene/update.md b/addons/reedscene/update.md index 3ecb77a..959562d 100644 --- a/addons/reedscene/update.md +++ b/addons/reedscene/update.md @@ -6,10 +6,35 @@ V0.1 - 添加了基础的Act,Prop,Scene的概念。 +V0.2 + +- 实现了通过切换PropState来切换Prop的功能 + +V0.3 + +- 实现了通过切换ActID来切换Act的功能 + ## 更新计划 V0.1 主要的工作是搭建一个插件的基本架构 -- [x] 角色墙滑 +V0.2 + +完善PropState的功能 + +V0.3 + +完善Act的功能 + +- Act管理器,负责切换Act,广播通知当前Scene下属的Prop进行状态切换。 +- Act的快捷创建各种不同的Act。 + +V0.4 + +完善Scene的功能 + +- Scene具有全局唯一的ID, +- SceneManager可以切换Act,也可以切换PropState,也可以通过ID获取到Prop +- diff --git a/update.md b/update.md index 6fe9e25..9058267 100644 --- a/update.md +++ b/update.md @@ -105,8 +105,8 @@ V0.3 - [ ] 不同的SFX預設 - [ ] GlobalCameraManger - [ ] 全局的相機管理器,可以用來切換相機在不同的幾個預設之間切換 - - [ ] 敘事性相機 - - [ ] 跟隨玩家的運動性相機 + - [ ] 敘事性相機 + - [ ] 跟隨玩家的運動性相機 V0.4