diff --git a/Cirno.sln.DotSettings.user b/Cirno.sln.DotSettings.user
index 47433a12..bf49faed 100644
--- a/Cirno.sln.DotSettings.user
+++ b/Cirno.sln.DotSettings.user
@@ -7,6 +7,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/ExternalMaterial/Table/Table.png b/ExternalMaterial/Table/Table.png
new file mode 100644
index 00000000..245d567d
--- /dev/null
+++ b/ExternalMaterial/Table/Table.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6d8a2eedc12a5a7ccb7671dd92f762b427e148ef709c0d7cfa74a94391b2f58
+size 2069
diff --git a/ExternalMaterial/Table/Table.png.import b/ExternalMaterial/Table/Table.png.import
new file mode 100644
index 00000000..0fd0ac23
--- /dev/null
+++ b/ExternalMaterial/Table/Table.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bd2hv6ccjfb0c"
+path="res://.godot/imported/Table.png-d9d1f491b46f2b20edc0e51d7b631de8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://ExternalMaterial/Table/Table.png"
+dest_files=["res://.godot/imported/Table.png-d9d1f491b46f2b20edc0e51d7b631de8.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/ExternalMaterial/Table/Table.pxc b/ExternalMaterial/Table/Table.pxc
index 8e834023..97288882 100644
Binary files a/ExternalMaterial/Table/Table.pxc and b/ExternalMaterial/Table/Table.pxc differ
diff --git a/ExternalMaterial/Table/Table.pxc1 b/ExternalMaterial/Table/Table.pxc1
index 74b7718a..ac0f3e67 100644
Binary files a/ExternalMaterial/Table/Table.pxc1 and b/ExternalMaterial/Table/Table.pxc1 differ
diff --git a/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres b/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres
index 4ea61895..d0e9846b 100644
--- a/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres
+++ b/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres
@@ -1,6 +1,7 @@
-[gd_resource type="Resource" script_class="BossPhase" load_steps=17 format=3 uid="uid://go6rfnglefe8"]
+[gd_resource type="Resource" script_class="BossPhase" load_steps=20 format=3 uid="uid://go6rfnglefe8"]
[ext_resource type="Resource" uid="uid://bpc2kyft8q2qq" path="res://Resources/Bullets/simple_enemy_bullet_big.tres" id="1_favpk"]
+[ext_resource type="Script" uid="uid://bgwt0pml2omnf" path="res://Scripts/AttackPatterns/NodeMovementPattern.cs" id="1_hmrwn"]
[ext_resource type="Script" uid="uid://b5s5mjuk1rng5" path="res://Scripts/Resources/TimeModifier.cs" id="2_36ba4"]
[ext_resource type="Script" uid="uid://c0ndqalsc4jve" path="res://Scripts/AttackPatterns/SpiralPattern.cs" id="3_agmbo"]
[ext_resource type="PackedScene" uid="uid://dohakkayqj4w2" path="res://Scenes/Weapons/Bullets/enemyBullet_green.tscn" id="4_agmbo"]
@@ -12,6 +13,7 @@
[sub_resource type="Resource" id="Resource_n7vdy"]
script = ExtResource("3_agmbo")
BulletResource = ExtResource("1_favpk")
+EmitterOffset = Vector2(0, 0)
bulletCount = 16
rotationSpeed = 15.0
_rotationOffset = 0.0
@@ -33,12 +35,21 @@ TimeModifiers = Array[ExtResource("2_36ba4")]([])
WaitForCompletion = true
metadata/_custom_type_script = "uid://c0ndqalsc4jve"
+[sub_resource type="Resource" id="Resource_wkdjr"]
+script = ExtResource("1_hmrwn")
+relativeTargetPosition = Vector2(64, 64)
+moveDuration = 2.0
+EaseType = 0
+WaitForCompletion = true
+metadata/_custom_type_script = "uid://bgwt0pml2omnf"
+
[sub_resource type="Resource" id="Resource_du806"]
script = ExtResource("5_tppsm")
BulletScene = ExtResource("4_agmbo")
BulletSpeed = 60.0
Direction = Vector2(1, 0)
BulletDamage = 12.0
+Knockback = 1.0
LifeTime = 10.0
DestroyOnCollision = true
Owner = 2
@@ -54,6 +65,7 @@ metadata/_custom_type_script = "uid://dslyrfcej3g2n"
[sub_resource type="Resource" id="Resource_hmrwn"]
script = ExtResource("3_agmbo")
BulletResource = SubResource("Resource_du806")
+EmitterOffset = Vector2(0, 0)
bulletCount = 8
rotationSpeed = 0.0
_rotationOffset = -90.0
@@ -75,9 +87,18 @@ TimeModifiers = Array[ExtResource("2_36ba4")]([])
WaitForCompletion = true
metadata/_custom_type_script = "uid://c0ndqalsc4jve"
+[sub_resource type="Resource" id="Resource_hrgj4"]
+script = ExtResource("1_hmrwn")
+relativeTargetPosition = Vector2(0, 0)
+moveDuration = 2.0
+EaseType = 10
+WaitForCompletion = true
+metadata/_custom_type_script = "uid://bgwt0pml2omnf"
+
[sub_resource type="Resource" id="Resource_tppsm"]
script = ExtResource("3_agmbo")
BulletResource = ExtResource("1_favpk")
+EmitterOffset = Vector2(0, 0)
bulletCount = 16
rotationSpeed = -15.0
_rotationOffset = 0.0
@@ -105,6 +126,7 @@ BulletScene = ExtResource("7_du806")
BulletSpeed = 120.0
Direction = Vector2(1, 0)
BulletDamage = 12.0
+Knockback = 1.0
LifeTime = 10.0
DestroyOnCollision = true
Owner = 2
@@ -120,6 +142,7 @@ metadata/_custom_type_script = "uid://dslyrfcej3g2n"
[sub_resource type="Resource" id="Resource_ctoyw"]
script = ExtResource("3_agmbo")
BulletResource = SubResource("Resource_ll7yb")
+EmitterOffset = Vector2(0, 0)
bulletCount = 1
rotationSpeed = 0.0
_rotationOffset = 0.0
@@ -147,6 +170,7 @@ BulletScene = ExtResource("6_tppsm")
BulletSpeed = 80.0
Direction = Vector2(1, 0)
BulletDamage = 12.0
+Knockback = 1.0
LifeTime = 10.0
DestroyOnCollision = true
Owner = 2
@@ -162,6 +186,7 @@ metadata/_custom_type_script = "uid://dslyrfcej3g2n"
[sub_resource type="Resource" id="Resource_we0cr"]
script = ExtResource("3_agmbo")
BulletResource = SubResource("Resource_qhi1m")
+EmitterOffset = Vector2(0, 0)
bulletCount = 1
rotationSpeed = 0.0
_rotationOffset = 0.0
@@ -188,5 +213,5 @@ script = ExtResource("4_tppsm")
PhaseName = "Asdf"
Threshold = 0
PlayAnimation = false
-Patterns = Array[Object]([SubResource("Resource_n7vdy"), SubResource("Resource_hmrwn"), SubResource("Resource_tppsm"), SubResource("Resource_ctoyw"), SubResource("Resource_we0cr")])
+Patterns = Array[Object]([SubResource("Resource_n7vdy"), SubResource("Resource_wkdjr"), SubResource("Resource_hmrwn"), SubResource("Resource_hrgj4"), SubResource("Resource_tppsm"), SubResource("Resource_ctoyw"), SubResource("Resource_we0cr")])
metadata/_custom_type_script = "uid://cdd6q2h0t1hhq"
diff --git a/Resources/RogueliteMaps/Factory_Vertical_Corridor.tres b/Resources/RogueliteMaps/Factory_Vertical_Corridor.tres
index a770b668..c205ea41 100644
--- a/Resources/RogueliteMaps/Factory_Vertical_Corridor.tres
+++ b/Resources/RogueliteMaps/Factory_Vertical_Corridor.tres
@@ -8,9 +8,9 @@
[resource]
script = ExtResource("5_odelv")
-RoomName = &"LongX3Map"
+RoomName = &"Factory_Vertical_Corridor"
Type = 1
-ScenePath = &"uid://ss7hm1utnvn1"
+ScenePath = &"uid://o010o1aq0jkp"
Size = Vector2i(1, 3)
StartShrouded = true
DoorGridPositions = Array[Vector2i]([Vector2i(0, -1), Vector2i(0, 1), Vector2i(1, 0), Vector2i(-1, 0)])
diff --git a/Scenes/Actors/Roguelite_Boss_1.tscn b/Scenes/Actors/Roguelite_Boss_1.tscn
index 698ed3ca..165949ca 100644
--- a/Scenes/Actors/Roguelite_Boss_1.tscn
+++ b/Scenes/Actors/Roguelite_Boss_1.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=39 format=3 uid="uid://clyrne78j3f5a"]
+[gd_scene load_steps=40 format=3 uid="uid://clyrne78j3f5a"]
[ext_resource type="Script" uid="uid://bi2edpdosngll" path="res://Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs" id="1_krhq1"]
[ext_resource type="Resource" uid="uid://ng3lpe8ifbsn" path="res://Resources/Enemies/Boss_1.tres" id="2_u32k8"]
@@ -30,6 +30,7 @@
[ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="25_8rqch"]
[ext_resource type="Script" uid="uid://d208gvthkstvc" path="res://Scripts/Components/Actors/PlayerCrosshairProvider.cs" id="26_q2yik"]
[ext_resource type="Texture2D" uid="uid://cf2855sd3hqty" path="res://Sprites/Actors/Aiming_Reticule_Small.png" id="27_8kytv"]
+[ext_resource type="Script" uid="uid://c2mngevyoefky" path="res://Scripts/Components/FSM/Boss/BossScriptHostModule.cs" id="31_003dv"]
[sub_resource type="CircleShape2D" id="CircleShape2D_pnkma"]
radius = 23.0217
@@ -111,17 +112,14 @@ DamageReceiver = NodePath("../../DamageReceiver")
NavigationModule = NodePath("../../NavigationModule")
_moduleNodes = [NodePath("../../AnimationModule")]
-[node name="Shooting" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("DamageReceiver", "EquippedWeapon", "StorageModule", "_moduleNodes")]
+[node name="Shooting" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("DamageReceiver", "EquippedWeapon", "StorageModule", "BossScriptHostModule", "_moduleNodes")]
script = ExtResource("7_u32k8")
DamageReceiver = NodePath("../../DamageReceiver")
EquippedWeapon = NodePath("../../EnemyWeapon")
StorageModule = NodePath("../../Storage")
+BossScriptHostModule = NodePath("../../ScriptHostModule")
BossScript = ExtResource("8_q8sxg")
-_moduleNodes = [NodePath("../../AnimationModule")]
-
-[node name="BulletSpawner" type="Node2D" parent="StateMachine/Shooting"]
-script = ExtResource("13_3n0dy")
-BulletScene = ExtResource("14_d5ed4")
+_moduleNodes = [NodePath("../../AnimationModule"), NodePath("../../ScriptHostModule")]
[node name="Dead" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DropsProvider")]
script = ExtResource("8_3n0dy")
@@ -232,6 +230,14 @@ CrosshairDistance = 35.0
[node name="Crosshair" type="AnimatedSprite2D" parent="CrosshairProvider"]
sprite_frames = SubResource("SpriteFrames_biwfl")
+[node name="ScriptHostModule" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")]
+script = ExtResource("31_003dv")
+StorageModule = NodePath("../Storage")
+
+[node name="BulletSpawner" type="Node2D" parent="ScriptHostModule"]
+script = ExtResource("13_3n0dy")
+BulletScene = ExtResource("14_d5ed4")
+
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
diff --git a/Scenes/Maps/Roguelike.tscn b/Scenes/Maps/Roguelike.tscn
index 82d2b87d..d095a235 100644
--- a/Scenes/Maps/Roguelike.tscn
+++ b/Scenes/Maps/Roguelike.tscn
@@ -27,6 +27,7 @@ process_mode = 1
y_sort_enabled = true
script = ExtResource("4_jtlua")
MapThemes = Array[Object]([ExtResource("25_7gtqx")])
+ManualSeed = "10654867435605601236"
[node name="CameraController" parent="." instance=ExtResource("6_gwtv6")]
diff --git a/Scenes/Maps/RogueliteMaps/Factory_Vertical_Corridor.tscn b/Scenes/Maps/RogueliteMaps/Factory_Vertical_Corridor.tscn
index cecd4545..d4454e4f 100644
--- a/Scenes/Maps/RogueliteMaps/Factory_Vertical_Corridor.tscn
+++ b/Scenes/Maps/RogueliteMaps/Factory_Vertical_Corridor.tscn
@@ -1,17 +1,20 @@
-[gd_scene load_steps=12 format=4 uid="uid://o010o1aq0jkp"]
+[gd_scene load_steps=15 format=4 uid="uid://o010o1aq0jkp"]
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_cr0e6"]
[ext_resource type="Resource" uid="uid://dyant7sb34jt1" path="res://Resources/RogueliteMaps/Factory_Vertical_Corridor.tres" id="2_cr0e6"]
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="3_xdgau"]
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="4_2w7cp"]
[ext_resource type="Script" uid="uid://8umfjejbkcsm" path="res://Scripts/Actors/RogueliteEnemySpawner.cs" id="5_7gtxd"]
+[ext_resource type="PackedScene" uid="uid://dcbcyp1qogcl0" path="res://Scenes/Props/BigTankHorizontal.tscn" id="5_xdgau"]
+[ext_resource type="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="6_2w7cp"]
[ext_resource type="Resource" uid="uid://cocl3qontm3be" path="res://Resources/Enemies/Base_Fairy.tres" id="6_mrmg4"]
[ext_resource type="Script" uid="uid://umyqgyxjiaig" path="res://Scripts/Actors/ChestMarker.cs" id="7_fgi8q"]
[ext_resource type="Texture2D" uid="uid://qeh4ai8h6sw5" path="res://Sprites/Chest.png" id="8_5wqsi"]
+[ext_resource type="Resource" uid="uid://qbo6avc7x64b" path="res://Resources/Enemies/Fairy_Guard.tres" id="9_2w7cp"]
[sub_resource type="NavigationPolygon" id="NavigationPolygon_rlq0q"]
-vertices = PackedVector2Array(166, 58, 294, 58, 294, 454, 166, 454, 166, 470, 154, 470, 154, 454, 154, 58, 26, 454, 26, 58, 166, 10, 154, 10)
-polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6), PackedInt32Array(0, 3, 6, 7), PackedInt32Array(6, 8, 9, 7), PackedInt32Array(10, 0, 7, 11)])
+vertices = PackedVector2Array(56, 436, 56, 438, 40, 438, 26, 436, 26, 454, 40, 454, 218, 170, 265, 182, 265, 198, 264, 198, 72, 196, 136, 180, 166, 58, 262, 58, 262, 77, 218, 70, 294, 77, 294, 86, 248, 86, 248, 132, 294, 132, 294, 182, 264, 214, 182, 214, 182, 282, 248, 282, 248, 292, 182, 310, 138, 310, 136, 294, 294, 292, 294, 310, 278, 310, 278, 378, 280, 378, 280, 436, 264, 404, 294, 436, 294, 454, 280, 438, 280, 454, 250, 438, 250, 404, 264, 378, 266, 378, 266, 310, 136, 406, 182, 394, 200, 394, 200, 420, 166, 454, 154, 454, 136, 452, 214, 420, 214, 454, 166, 470, 154, 470, 106, 454, 106, 452, 106, 406, 106, 394, 138, 394, 136, 310, 105, 294, 105, 310, 54, 310, 88, 292, 54, 378, 70, 378, 70, 422, 56, 406, 56, 422, 26, 406, 42, 378, 26, 378, 42, 310, 26, 310, 26, 292, 88, 282, 138, 282, 138, 214, 40, 214, 40, 198, 26, 198, 26, 136, 40, 196, 40, 102, 26, 102, 26, 84, 40, 84, 40, 78, 86, 78, 86, 154, 40, 136, 72, 166, 88, 154, 88, 164, 104, 164, 104, 180, 136, 171, 169, 171, 169, 170, 218, 120, 232, 120, 232, 86, 218, 86, 138, 70, 138, 58, 154, 58, 154, 10, 166, 10, 40, 166)
+polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(4, 3, 2, 5), PackedInt32Array(6, 7, 8, 9, 10, 11), PackedInt32Array(12, 13, 14, 15), PackedInt32Array(14, 16, 17, 18), PackedInt32Array(19, 20, 21, 7, 6), PackedInt32Array(9, 22, 23, 10), PackedInt32Array(24, 25, 26, 27, 28, 29), PackedInt32Array(26, 30, 31, 32), PackedInt32Array(33, 34, 35, 36), PackedInt32Array(35, 37, 38, 39), PackedInt32Array(38, 40, 39), PackedInt32Array(35, 39, 41, 42, 36), PackedInt32Array(36, 43, 44), PackedInt32Array(33, 36, 44, 32), PackedInt32Array(32, 44, 45), PackedInt32Array(26, 32, 45), PackedInt32Array(26, 45, 27), PackedInt32Array(46, 47, 48, 49, 50, 51, 52), PackedInt32Array(49, 53, 54, 50), PackedInt32Array(50, 55, 56, 51), PackedInt32Array(51, 57, 58, 52), PackedInt32Array(46, 59, 60, 61), PackedInt32Array(28, 62, 29), PackedInt32Array(63, 64, 65, 66), PackedInt32Array(67, 68, 69, 70), PackedInt32Array(69, 71, 70), PackedInt32Array(67, 70, 72, 73), PackedInt32Array(72, 74, 73), PackedInt32Array(65, 67, 73, 75), PackedInt32Array(75, 76, 77, 66), PackedInt32Array(65, 75, 66), PackedInt32Array(63, 66, 78, 79, 29), PackedInt32Array(80, 81, 82, 10), PackedInt32Array(82, 83, 84, 85), PackedInt32Array(86, 87, 88, 89), PackedInt32Array(89, 90, 91, 92), PackedInt32Array(86, 89, 92), PackedInt32Array(93, 86, 92), PackedInt32Array(94, 92, 95, 96, 10), PackedInt32Array(96, 97, 98, 10), PackedInt32Array(11, 99, 100), PackedInt32Array(100, 101, 6), PackedInt32Array(6, 102, 103, 19), PackedInt32Array(104, 105, 15, 14), PackedInt32Array(15, 106, 107, 108), PackedInt32Array(108, 109, 110, 12), PackedInt32Array(15, 108, 12), PackedInt32Array(104, 14, 18), PackedInt32Array(104, 18, 19, 103), PackedInt32Array(47, 46, 61, 27), PackedInt32Array(27, 61, 28), PackedInt32Array(24, 29, 79, 23), PackedInt32Array(23, 79, 80), PackedInt32Array(10, 23, 80), PackedInt32Array(85, 10, 82), PackedInt32Array(111, 85, 84), PackedInt32Array(111, 84, 93, 92, 94), PackedInt32Array(10, 98, 11), PackedInt32Array(6, 11, 100)])
outlines = Array[PackedVector2Array]([PackedVector2Array(17, 36, 14, 12, 47, 15, 49, 34)])
parsed_collision_mask = 353
source_geometry_mode = 1
@@ -40,12 +43,13 @@ _solidLayers = [NodePath("../Solid"), NodePath("../Props")]
metadata/_edit_lock_ = true
[node name="Solid" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]]
-tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAAEAAsAAAAGAAAAAAAFAAsAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAAAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAAAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAQAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAAAAQAAAATAAkAAAAAAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAAAAQAAAATAAMAAAAAAAQAAAATAAQAAAAAAAQAAAALAAEAAAAPAAgAAAALAAIAAAAPAAkAAAAMAAEAAAAPAAgAAAAMAAIAAAAPAAkAAAANAAEAAAAPAAgAAAANAAIAAAAPAAkAAAAOAAEAAAAPAAgAAAAOAAIAAAAPAAkAAAAPAAEAAAAPAAgAAAAPAAIAAAAPAAkAAAAQAAEAAAAPAAgAAAAQAAIAAAAPAAkAAAARAAEAAAAPAAgAAAARAAIAAAAPAAkAAAASAAEAAAAPAAgAAAASAAIAAAAPAAkAAAABAAEAAAAPAAgAAAABAAIAAAAPAAkAAAACAAEAAAAPAAgAAAACAAIAAAAPAAkAAAADAAEAAAAPAAgAAAADAAIAAAAPAAkAAAAEAAEAAAAPAAgAAAAEAAIAAAAPAAkAAAAFAAEAAAAPAAgAAAAFAAIAAAAPAAkAAAAGAAEAAAAAAAYAAAAGAAIAAAAAAAYAAAAHAAEAAAACAAYAAAAHAAIAAAACAAYAAAAIAAEAAAAPAAgAAAAIAAIAAAAPAAkAAAAAAAMAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAoAAAAAAAQAAAAAAAsAAAAAAAQAAAAAAAwAAAAAAAQAAAAAAA0AAAAAAAQAAAAAAA4AAAABAA4AAAAAABAAAAAAAAQAAAAAABEAAAAAAAQAAAAAABIAAAAAAAQAAAAAABMAAAAAAAQAAAATAAoAAAAAAAQAAAATAAsAAAAAAAQAAAATAAwAAAAAAAQAAAATAA0AAAAAAAQAAAATAA4AAAABAA0AAAATABAAAAAAAAQAAAATABEAAAAAAAQAAAATABIAAAAAAAQAAAATABMAAAAAAAQAAAAAABQAAAABAA4AAAAAABUAAAAAAAQAAAAAABYAAAAAAAQAAAAAABcAAAAAAAQAAAAAABgAAAAAAAQAAAAAABoAAAAAAAQAAAAAABsAAAAAAAQAAAAAABwAAAAAAAQAAAAAAB0AAAAAAAwAAAABAB0AAAABAAQAAAACAB0AAAABAAQAAAADAB0AAAABAAQAAAAEAB0AAAABAAQAAAAFAB0AAAAAAA4AAAAGAB0AAAABAAQAAAAHAB0AAAABAAQAAAAIAB0AAAADAAQAAAALAB0AAAACAAQAAAAMAB0AAAABAAQAAAANAB0AAAABAAQAAAAOAB0AAAAAAA4AAAAPAB0AAAABAAQAAAAQAB0AAAABAAQAAAARAB0AAAABAAQAAAASAB0AAAABAAQAAAATABQAAAABAA0AAAATABUAAAAAAAQAAAATABYAAAAAAAQAAAATABcAAAAAAAQAAAATABgAAAAAAAQAAAATABoAAAAAAAQAAAATABsAAAAAAAQAAAATABwAAAAAAAQAAAATAB0AAAABAAwAAAAAAAUAAAAAAAQAAAAAAA8AAAAAAAQAAAAAABkAAAAAAAQAAAATAAUAAAAAAAQAAAATAA8AAAAAAAQAAAATABkAAAAAAAQAAAAHAAMAAAACAAYAAAAHAAQAAAACAAYAAAAGAAQAAAAAAAYAAAAGAAMAAAAAAAYAAAAMAAYAAAACAAYAAAAMAAUAAAACAAUAAAALAAYAAAABAAgAAAALAAUAAAABAAUAAAAKAAYAAAABAAcAAAAKAAUAAAABAAUAAAAJAAYAAAABAAcAAAAJAAUAAAABAAUAAAAIAAYAAAABAAcAAAAIAAUAAAABAAUAAAAHAAYAAAABAAcAAAAHAAUAAAAAAAkAAAAGAAYAAAAAAAcAAAAGAAUAAAAAAAYAAAAMAAcAAAACAAcAAAALAAcAAAAAAAcAAAAOABwAAAAAAAQAAAAOABsAAAAAAAQAAAAOABoAAAAAAAQAAAAOABkAAAAAAAQAAAAFABwAAAAAAAQAAAAFABsAAAAAAAQAAAAFABoAAAAAAAQAAAAFABkAAAAAAAQAAAAFABgAAAAAAAQAAAAOABgAAAAAAAQAAAAFABcAAAAAAAQAAAAOABcAAAAAAAQAAAAFABYAAAAAAAQAAAAFABUAAAACAAsAAAAHABUAAAACAAcAAAAGABUAAAABAAcAAAAOABUAAAADAAsAAAANABUAAAABAAcAAAAMABUAAAAAAAcAAAAOABYAAAAAAAQAAAAGABYAAAAPAAgAAAAGABcAAAAPAAkAAAAHABYAAAAPAAgAAAAHABcAAAAPAAkAAAAMABYAAAAPAAgAAAAMABcAAAAPAAkAAAANABYAAAAPAAgAAAANABcAAAAPAAkAAAAHABQAAAACAAUAAAAGABQAAAABAAUAAAAFABQAAAAFAAsAAAAOABQAAAAEAAsAAAANABQAAAABAAUAAAAMABQAAAAAAAUAAAAHAA4AAAADAAQAAAAGAA4AAAABAAQAAAAFAA4AAAABAAQAAAAEAA4AAAABAAQAAAADAA4AAAABAAQAAAACAA4AAAABAAQAAAABAA4AAAABAAQAAAASAA4AAAABAAQAAAARAA4AAAABAAQAAAAQAA4AAAABAAQAAAAPAA4AAAABAAQAAAAOAA4AAAABAAQAAAANAA4AAAABAAQAAAAMAA4AAAACAAQAAAAHAA8AAAAPAAgAAAAHABAAAAAPAAkAAAAGAA8AAAAPAAgAAAAGABAAAAAPAAkAAAAFAA8AAAAPAAgAAAAFABAAAAAPAAkAAAAEAA8AAAAPAAgAAAAEABAAAAAPAAkAAAADAA8AAAAPAAgAAAADABAAAAAPAAkAAAACAA8AAAAPAAgAAAACABAAAAAPAAkAAAABAA8AAAAPAAgAAAABABAAAAAPAAkAAAAMAA8AAAAPAAgAAAAMABAAAAAPAAkAAAANAA8AAAAPAAgAAAANABAAAAAPAAkAAAAOAA8AAAAPAAgAAAAOABAAAAAPAAkAAAAPAA8AAAAPAAgAAAAPABAAAAAPAAkAAAAQAA8AAAAPAAgAAAAQABAAAAAPAAkAAAARAA8AAAAPAAgAAAARABAAAAAPAAkAAAASAA8AAAAPAAgAAAASABAAAAAPAAkAAAAEABQAAAACAAQAAAABABQAAAADAAQAAAAPABQAAAADAAQAAAASABQAAAACAAQAAAASABUAAAAPAAgAAAASABYAAAAPAAkAAAAPABUAAAAPAAgAAAAPABYAAAAPAAkAAAAEABUAAAAPAAgAAAAEABYAAAAPAAkAAAABABUAAAAPAAgAAAABABYAAAAPAAkAAAALAAgAAAAPAAgAAAALAAkAAAAPAAkAAAAMAAgAAAAPAAgAAAAMAAkAAAAPAAkAAAAGAAcAAAAPAAgAAAAGAAgAAAAPAAkAAAAHAAcAAAAPAAgAAAAHAAgAAAAPAAkAAAAIAAcAAAAPAAgAAAAIAAgAAAAPAAkAAAAJAAcAAAAPAAgAAAAJAAgAAAAPAAkAAAAKAAcAAAAPAAgAAAAKAAgAAAAPAAkAAAA=")
+tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAAEAAsAAAAGAAAAAAAFAAsAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAAAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAAAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAQAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAAAAQAAAATAAkAAAAAAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAAAAQAAAATAAMAAAAAAAQAAAATAAQAAAAAAAQAAAALAAEAAAAPAAgAAAALAAIAAAAPAAkAAAAMAAEAAAAJAAIAAAAMAAIAAAAJAAMAAAANAAEAAAAKAAIAAAANAAIAAAAKAAMAAAAOAAEAAAAKAAoAAAAOAAIAAAAKAAsAAAAPAAEAAAAJAAoAAAAPAAIAAAAJAAsAAAAQAAEAAAAJAAIAAAAQAAIAAAAJAAMAAAARAAEAAAAKAAIAAAARAAIAAAAKAAMAAAASAAEAAAAPAAgAAAASAAIAAAAPAAkAAAABAAEAAAAPAAgAAAABAAIAAAAPAAkAAAACAAEAAAAJAAoAAAACAAIAAAAJAAsAAAADAAEAAAAKAAoAAAADAAIAAAAKAAsAAAAEAAEAAAAJAAoAAAAEAAIAAAAJAAsAAAAFAAEAAAAPAAgAAAAFAAIAAAAPAAkAAAAGAAEAAAAAAAYAAAAGAAIAAAAAAAYAAAAHAAEAAAACAAYAAAAHAAIAAAACAAYAAAAIAAEAAAAPAAgAAAAIAAIAAAAPAAkAAAAAAAMAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAoAAAAAAAQAAAAAAAsAAAAAAAQAAAAAAAwAAAAAAAQAAAAAAA0AAAAAAAQAAAAAAA4AAAABAA4AAAAAABAAAAAAAAQAAAAAABEAAAAAAAQAAAAAABIAAAAAAAQAAAAAABMAAAAAAAQAAAATAAoAAAAAAAQAAAATAAsAAAAAAAQAAAATAAwAAAAAAAQAAAATAA0AAAAAAAQAAAATAA4AAAABAA0AAAATABAAAAAAAAQAAAATABEAAAAAAAQAAAATABIAAAAAAAQAAAATABMAAAAAAAQAAAAAABQAAAABAA4AAAAAABUAAAAAAAQAAAAAABYAAAAAAAQAAAAAABcAAAAAAAQAAAAAABgAAAAAAAQAAAAAABoAAAAAAAQAAAAAABsAAAAAAAQAAAAAABwAAAAAAAQAAAAAAB0AAAAAAAwAAAABAB0AAAABAAQAAAACAB0AAAABAAQAAAADAB0AAAABAAQAAAAEAB0AAAABAAQAAAAFAB0AAAAAAA4AAAAGAB0AAAABAAQAAAAHAB0AAAABAAQAAAAIAB0AAAADAAQAAAALAB0AAAACAAQAAAAMAB0AAAABAAQAAAANAB0AAAABAAQAAAAOAB0AAAAAAA4AAAAPAB0AAAABAAQAAAAQAB0AAAABAAQAAAARAB0AAAABAAQAAAASAB0AAAABAAQAAAATABQAAAABAA0AAAATABUAAAAAAAQAAAATABYAAAAAAAQAAAATABcAAAAAAAQAAAATABgAAAAAAAQAAAATABoAAAAAAAQAAAATABsAAAAAAAQAAAATABwAAAAAAAQAAAATAB0AAAABAAwAAAAAAAUAAAAAAAQAAAAAAA8AAAAAAAQAAAAAABkAAAAAAAQAAAATAAUAAAAAAAQAAAATAA8AAAAAAAQAAAATABkAAAAAAAQAAAAHAAMAAAACAAYAAAAHAAQAAAACAAYAAAAGAAQAAAAAAAYAAAAGAAMAAAAAAAYAAAAMAAYAAAACAAYAAAAMAAUAAAACAAUAAAALAAYAAAABAAgAAAALAAUAAAABAAUAAAAKAAYAAAABAAcAAAAKAAUAAAABAAUAAAAJAAYAAAABAAcAAAAJAAUAAAABAAUAAAAIAAYAAAABAAcAAAAIAAUAAAABAAUAAAAHAAYAAAABAAcAAAAHAAUAAAAAAAkAAAAGAAYAAAAAAAcAAAAGAAUAAAAAAAYAAAAMAAcAAAACAAcAAAALAAcAAAAAAAcAAAAOABwAAAAAAAQAAAAOABsAAAAAAAQAAAAOABoAAAAAAAQAAAAOABkAAAAAAAQAAAAFABwAAAAAAAQAAAAFABsAAAAAAAQAAAAFABoAAAAAAAQAAAAFABkAAAAAAAQAAAAFABgAAAAAAAQAAAAOABgAAAAAAAQAAAAFABcAAAAAAAQAAAAOABcAAAAAAAQAAAAFABYAAAAAAAQAAAAFABUAAAACAAsAAAAHABUAAAACAAcAAAAGABUAAAABAAcAAAAOABUAAAADAAsAAAANABUAAAABAAcAAAAMABUAAAAAAAcAAAAOABYAAAAAAAQAAAAGABYAAAAPAAIAAAAGABcAAAAPAAIAAAAHABYAAAAPAAIAAAAHABcAAAAPAAIAAAAMABYAAAAPAAIAAAAMABcAAAAPAAIAAAANABYAAAAPAAIAAAANABcAAAAPAAIAAAAHABQAAAACAAUAAAAGABQAAAABAAUAAAAFABQAAAAFAAsAAAAOABQAAAAEAAsAAAANABQAAAABAAUAAAAMABQAAAAAAAUAAAAHAA4AAAADAAQAAAAGAA4AAAABAAQAAAAFAA4AAAABAAQAAAAEAA4AAAABAAQAAAADAA4AAAABAAQAAAACAA4AAAABAAQAAAABAA4AAAABAAQAAAASAA4AAAABAAQAAAARAA4AAAABAAQAAAAQAA4AAAABAAQAAAAPAA4AAAABAAQAAAAOAA4AAAABAAQAAAANAA4AAAABAAQAAAAMAA4AAAACAAQAAAAHAA8AAAAPAAgAAAAHABAAAAAPAAkAAAAGAA8AAAAKAAIAAAAGABAAAAAKAAMAAAAFAA8AAAAJAAIAAAAFABAAAAAJAAMAAAAEAA8AAAAKAAoAAAAEABAAAAAKAAsAAAADAA8AAAAJAAoAAAADABAAAAAJAAsAAAACAA8AAAAJAAoAAAACABAAAAAJAAsAAAABAA8AAAAPAAgAAAABABAAAAAPAAkAAAAMAA8AAAAPAAgAAAAMABAAAAAPAAkAAAANAA8AAAAJAAIAAAANABAAAAAJAAMAAAAOAA8AAAAKAAIAAAAOABAAAAAKAAMAAAAPAA8AAAAKAAoAAAAPABAAAAAKAAsAAAAQAA8AAAAJAAoAAAAQABAAAAAJAAsAAAARAA8AAAAJAAoAAAARABAAAAAJAAsAAAASAA8AAAAPAAgAAAASABAAAAAPAAkAAAAEABQAAAACAAQAAAABABQAAAADAAQAAAAPABQAAAADAAQAAAASABQAAAACAAQAAAASABUAAAAPAAgAAAASABYAAAAPAAkAAAAPABUAAAAPAAgAAAAPABYAAAAPAAkAAAAEABUAAAAPAAgAAAAEABYAAAAPAAkAAAABABUAAAAPAAgAAAABABYAAAAPAAkAAAALAAgAAAAPAAgAAAALAAkAAAAPAAkAAAAMAAgAAAAPAAgAAAAMAAkAAAAPAAkAAAAGAAcAAAAPAAgAAAAGAAgAAAAPAAkAAAAHAAcAAAAJAAIAAAAHAAgAAAAJAAMAAAAIAAcAAAAKAAIAAAAIAAgAAAAKAAMAAAAJAAcAAAAPAAgAAAAJAAgAAAAPAAkAAAAKAAcAAAAKAAAAAAAKAAgAAAAKAAEAAAA=")
tile_set = ExtResource("3_xdgau")
navigation_enabled = false
metadata/_edit_lock_ = true
[node name="Props" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]]
+tile_map_data = PackedByteArray("AAARABEAAAAGAAAAAAASABEAAAAHAAAAAAABABEAAAAGAAAAAAACABEAAAAHAAAAAAAJABkAAAANAAgAAAAJABoAAAANAAkAAAAKABkAAAAOAAgAAAAKABoAAAAOAAkAAAAMABYAAAAJAAwAAAAMABcAAAAJAA0AAAAMAA8AAAAJAAwAAAAMABAAAAAJAA0AAAASABUAAAAJAAwAAAASABYAAAAJAA0AAAAEABUAAAAJAAwAAAAEABYAAAAJAA0AAAALAAEAAAAJAAwAAAALAAIAAAAJAA0AAAAGAAcAAAAJAAwAAAAGAAgAAAAJAA0AAAAHABYAAAAKAAwAAAAHABcAAAAKAA0AAAABABUAAAAKAAwAAAABABYAAAAKAA0AAAAPABUAAAAKAAwAAAAPABYAAAAKAA0AAAAHAA8AAAAKAAwAAAAHABAAAAAKAA0AAAAMAAgAAAAKAAwAAAAMAAkAAAAKAA0AAAAIAAEAAAAKAAwAAAAIAAIAAAAKAA0AAAALAAgAAAAJAAwAAAALAAkAAAAJAA0AAAADABEAAQAAAAAAAgAEABEAAQAAAAAAAgAQABEAAQAAAAAAAgASABcAAQAAAAAAAgASABgAAQAAAAAAAgAQABwAAQAAAAAAAgADABwAAQAAAAAAAgAHAAkAAQAAAAAAAgAHAAoAAQAAAAAAAgAGAAkAAQAAAAAAAgABAAMAAQAAAAAAAgABAAQAAQAAAAAAAgABAAcAAQAAAAAAAQAHABMAAQAAAAAAAQAKAAkAAQAAAAAAAQANAAYAAQAAAAAAAQARAAwAAQAAAAAAAQASAA0AAQAAAAAADQARAA0AAQAAAAAADQAPABgAAQAAAAAADQAPABcAAQAAAAAADQABAA0AAQAAAAAADQAEABsAAQAAAAAAEAAEABwAAQAAAAAAEAABABoAAQAAAAAAEAACABoAAQAAAAAAEAASABoAAQAAAAAAEAASABkAAQAAAAAAEAAHABoAAQAAAAAAEAAHABsAAQAAAAAAEAANABgAAQAAAAAAEAANABkAAQAAAAAAEAAQAAYAAQAAAAAAEAAQAAcAAQAAAAAAEAARAAYAAQAAAAAAEAARAAcAAQAAAAAAEAADAAsAAQAAAAAAEAA=")
tile_set = ExtResource("3_xdgau")
navigation_enabled = false
metadata/_edit_lock_ = true
@@ -53,6 +57,18 @@ metadata/_edit_lock_ = true
[node name="Actors" type="Node2D" parent="Tilemaps"]
metadata/_edit_lock_ = true
+[node name="BigTankHorizontal" parent="Tilemaps/Actors" instance=ExtResource("5_xdgau")]
+position = Vector2(80, 55)
+
+[node name="BigTankHorizontal2" parent="Tilemaps/Actors" instance=ExtResource("5_xdgau")]
+position = Vector2(146, 148)
+
+[node name="BigTank" parent="Tilemaps/Actors" instance=ExtResource("6_2w7cp")]
+position = Vector2(288, 50)
+
+[node name="BigTank2" parent="Tilemaps/Actors" instance=ExtResource("6_2w7cp")]
+position = Vector2(49, 51)
+
[node name="EnemySpawners" type="Node2D" parent="."]
[node name="RogueliteEnemySpawner6" type="Marker2D" parent="EnemySpawners"]
@@ -60,6 +76,31 @@ position = Vector2(165, 301)
script = ExtResource("5_7gtxd")
Enemy = ExtResource("6_mrmg4")
+[node name="RogueliteEnemySpawner7" type="Marker2D" parent="EnemySpawners"]
+position = Vector2(233.374, 179.149)
+script = ExtResource("5_7gtxd")
+Enemy = ExtResource("6_mrmg4")
+
+[node name="RogueliteEnemySpawner8" type="Marker2D" parent="EnemySpawners"]
+position = Vector2(44.4718, 144.374)
+script = ExtResource("5_7gtxd")
+Enemy = ExtResource("9_2w7cp")
+
+[node name="RogueliteEnemySpawner9" type="Marker2D" parent="EnemySpawners"]
+position = Vector2(272.442, 388.229)
+script = ExtResource("5_7gtxd")
+Enemy = ExtResource("6_mrmg4")
+
+[node name="RogueliteEnemySpawner10" type="Marker2D" parent="EnemySpawners"]
+position = Vector2(45.7598, 358.177)
+script = ExtResource("5_7gtxd")
+Enemy = ExtResource("6_mrmg4")
+
+[node name="RogueliteEnemySpawner11" type="Marker2D" parent="EnemySpawners"]
+position = Vector2(241.482, 101.284)
+script = ExtResource("5_7gtxd")
+Enemy = ExtResource("9_2w7cp")
+
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
visible = false
navigation_polygon = SubResource("NavigationPolygon_rlq0q")
@@ -83,7 +124,7 @@ MarkerTexture = SubResource("AtlasTexture_mr604")
SpawnChance = 10.0
[node name="Chest2" type="Marker2D" parent="Features"]
-position = Vector2(429, 141)
+position = Vector2(248, 455)
script = ExtResource("7_fgi8q")
MarkerTexture = SubResource("AtlasTexture_mr604")
SpawnChance = 10.0
diff --git a/Scripts/Actors/Boss.cs b/Scripts/Actors/Boss.cs
index 44d6670b..3fb11ea2 100644
--- a/Scripts/Actors/Boss.cs
+++ b/Scripts/Actors/Boss.cs
@@ -23,6 +23,8 @@ public partial class Boss : Enemy, IActivable, IScriptHost
private Vector2 _homePosition;
public Vector2 HomePosition => _homePosition;
+ public CharacterBody2D Body => this;
+ public Node2D ParentObject => this;
private BossPhase CurrentPhase => BossScript.Phases[currentPhaseIndex];
private Marker2D _cameraMarker;
diff --git a/Scripts/Actors/ScriptableBulletsEmitter.cs b/Scripts/Actors/ScriptableBulletsEmitter.cs
index 3c5e5279..3383855c 100644
--- a/Scripts/Actors/ScriptableBulletsEmitter.cs
+++ b/Scripts/Actors/ScriptableBulletsEmitter.cs
@@ -7,6 +7,8 @@ namespace Cirno.Scripts.Actors;
public partial class ScriptableBulletsEmitter : Node2D, IActivable, IScriptHost
{
+ public Node2D ParentObject => this;
+
[Export]
public BulletScript Script { get; set; }
diff --git a/Scripts/AttackPatterns/AutonomousBulletEmitter.cs b/Scripts/AttackPatterns/AutonomousBulletEmitter.cs
index 0a462f41..37d8be71 100644
--- a/Scripts/AttackPatterns/AutonomousBulletEmitter.cs
+++ b/Scripts/AttackPatterns/AutonomousBulletEmitter.cs
@@ -5,6 +5,7 @@ namespace Cirno.Scripts.AttackPatterns;
public partial class AutonomousBulletEmitter : Node2D, IScriptHost
{
+ public Node2D ParentObject => this;
[Export]
public BulletScript Script { get; set; }
[Export]
diff --git a/Scripts/AttackPatterns/IScriptHost.cs b/Scripts/AttackPatterns/IScriptHost.cs
index 02b0b218..88a8ac1a 100644
--- a/Scripts/AttackPatterns/IScriptHost.cs
+++ b/Scripts/AttackPatterns/IScriptHost.cs
@@ -4,6 +4,8 @@ namespace Cirno.Scripts.AttackPatterns;
public interface IScriptHost
{
+ public Node2D ParentObject { get; }
public Vector2 HomePosition { get; }
public void ChangeSpriteDirection(Vector2 direction);
+
}
\ No newline at end of file
diff --git a/Scripts/AttackPatterns/NodeMovementPattern.cs b/Scripts/AttackPatterns/NodeMovementPattern.cs
index 524eb777..0b6eeb67 100644
--- a/Scripts/AttackPatterns/NodeMovementPattern.cs
+++ b/Scripts/AttackPatterns/NodeMovementPattern.cs
@@ -1,5 +1,9 @@
using Cirno.Scripts.Resources;
using Godot;
+using GTweens.Builders;
+using GTweens.Easings;
+using GTweens.Tweens;
+using GTweensGodot.Extensions;
namespace Cirno.Scripts.AttackPatterns;
@@ -8,8 +12,8 @@ public partial class NodeMovementPattern : AttackPattern
{
[Export] private Vector2 relativeTargetPosition;
[Export] private float moveDuration = 2f;
- [Export] private Tween.TransitionType transitionType = Tween.TransitionType.Linear;
- [Export] private Tween.EaseType easeType = Tween.EaseType.InOut;
+ // [Export] private Tween.TransitionType transitionType = Tween.TransitionType.Linear;
+ [Export] public GTweens.Easings.Easing EaseType { get; private set; } = Easing.Linear;
public override IPatternMachine MakeMachine(Node2D parent)
{
@@ -20,7 +24,7 @@ public partial class NodeMovementPattern : AttackPattern
{
public Node2D Parent => parent;
- private Tween tween;
+ private GTween _tween;
private bool isComplete = false;
public void Start()
@@ -32,18 +36,30 @@ public partial class NodeMovementPattern : AttackPattern
return;
}
- tween = Parent.CreateTween();
+ _tween?.Complete();
+
isComplete = false;
Vector2 targetPosition = (scriptHost?.HomePosition ?? Parent.GlobalPosition) + pattern.relativeTargetPosition;
+
+ _tween = GTweenSequenceBuilder.New()
+ .Append(scriptHost.ParentObject.TweenGlobalPosition(targetPosition, pattern.moveDuration))
+ .AppendCallback(() =>
+ {
+ isComplete = true;
+ })
+ .Build();
+
+ _tween.SetEasing(pattern.EaseType);
- tween.TweenProperty(Parent, "global_position", targetPosition, pattern.moveDuration)
- .SetTrans(pattern.transitionType)
- .SetEase(pattern.easeType)
- .Finished += () =>
- {
- isComplete = true;
- };
+ _tween.Play();
+ // tween.TweenProperty(Parent, "global_position", targetPosition, pattern.moveDuration)
+ // .SetTrans(pattern.transitionType)
+ // .SetEase(pattern.easeType)
+ // .Finished += () =>
+ // {
+ // isComplete = true;
+ // };
}
public void UpdatePattern(double delta) { }
diff --git a/Scripts/Components/FSM/Boss/BossScriptHostModule.cs b/Scripts/Components/FSM/Boss/BossScriptHostModule.cs
new file mode 100644
index 00000000..7316c96d
--- /dev/null
+++ b/Scripts/Components/FSM/Boss/BossScriptHostModule.cs
@@ -0,0 +1,47 @@
+using Cirno.Scripts.AttackPatterns;
+using Cirno.Scripts.Components.FSM.Enemy;
+using Cirno.Scripts.Enums;
+using Godot;
+
+namespace Cirno.Scripts.Components.FSM.Boss;
+
+public partial class BossScriptHostModule : ModuleBase, IScriptHost
+{
+ [Export]
+ public EnemyStorageModule StorageModule { get; private set; }
+
+ public Node2D ParentObject => _machine.MainObject;
+ public Vector2 HomePosition => StorageModule.HomePosition;
+
+ private IStateMachine _machine;
+
+ public void ChangeSpriteDirection(Vector2 direction)
+ {
+
+ }
+
+ public override void EnterState(EnemyState state)
+ {
+
+ }
+
+ public override void ExitState(EnemyState state)
+ {
+
+ }
+
+ public override void Init(IStateMachine machine)
+ {
+ _machine = machine;
+ }
+
+ public override void Process(double delta)
+ {
+
+ }
+
+ public override void PhysicsProcess(double delta)
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Scripts/Components/FSM/Boss/BossScriptHostModule.cs.uid b/Scripts/Components/FSM/Boss/BossScriptHostModule.cs.uid
new file mode 100644
index 00000000..cec050c0
--- /dev/null
+++ b/Scripts/Components/FSM/Boss/BossScriptHostModule.cs.uid
@@ -0,0 +1 @@
+uid://c2mngevyoefky
diff --git a/Scripts/Components/FSM/Boss/Idle.cs b/Scripts/Components/FSM/Boss/Idle.cs
index 1d69617b..916a1868 100644
--- a/Scripts/Components/FSM/Boss/Idle.cs
+++ b/Scripts/Components/FSM/Boss/Idle.cs
@@ -19,6 +19,9 @@ public partial class Idle : EnemyStateBase
public override void EnterState()
{
base.EnterState();
+
+ StorageModule.HomePosition = StateMachine.MainObject.GlobalPosition;
+
DamageReceiver.ChangeState(false);
GD.Print("Boss idle");
_ = DelayStart();
diff --git a/Scripts/Components/FSM/Boss/Shooting.cs b/Scripts/Components/FSM/Boss/Shooting.cs
index 6cc2da2c..224622e2 100644
--- a/Scripts/Components/FSM/Boss/Shooting.cs
+++ b/Scripts/Components/FSM/Boss/Shooting.cs
@@ -17,6 +17,8 @@ public partial class Shooting : EnemyStateBase
[Export] public EnemyStorageModule StorageModule { get; private set; }
+ [Export] public BossScriptHostModule BossScriptHostModule { get; private set; }
+
[Export] public BossScript BossScript { get; set; }
// private Marker2D _cameraMarker;
@@ -101,7 +103,7 @@ public partial class Shooting : EnemyStateBase
}
else
{
- phase.Start(this);
+ phase.Start(BossScriptHostModule);
}
}