From c37278075da1248f41f280184fd8fef510dfe620 Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 16 May 2025 17:38:02 +0200 Subject: [PATCH] Now boss FSM Actor movement --- Cirno.sln.DotSettings.user | 1 + ExternalMaterial/Table/Table.png | 3 ++ ExternalMaterial/Table/Table.png.import | 34 ++++++++++++ ExternalMaterial/Table/Table.pxc | Bin 2991 -> 5648 bytes ExternalMaterial/Table/Table.pxc1 | Bin 2985 -> 5463 bytes .../Roguelite/Roguelite_Boss_1.tres | 29 +++++++++- .../Factory_Vertical_Corridor.tres | 4 +- Scenes/Actors/Roguelite_Boss_1.tscn | 20 ++++--- Scenes/Maps/Roguelike.tscn | 1 + .../Factory_Vertical_Corridor.tscn | 51 ++++++++++++++++-- Scripts/Actors/Boss.cs | 2 + Scripts/Actors/ScriptableBulletsEmitter.cs | 2 + .../AttackPatterns/AutonomousBulletEmitter.cs | 1 + Scripts/AttackPatterns/IScriptHost.cs | 2 + Scripts/AttackPatterns/NodeMovementPattern.cs | 38 +++++++++---- .../FSM/Boss/BossScriptHostModule.cs | 47 ++++++++++++++++ .../FSM/Boss/BossScriptHostModule.cs.uid | 1 + Scripts/Components/FSM/Boss/Idle.cs | 3 ++ Scripts/Components/FSM/Boss/Shooting.cs | 4 +- 19 files changed, 215 insertions(+), 28 deletions(-) create mode 100644 ExternalMaterial/Table/Table.png create mode 100644 ExternalMaterial/Table/Table.png.import create mode 100644 Scripts/Components/FSM/Boss/BossScriptHostModule.cs create mode 100644 Scripts/Components/FSM/Boss/BossScriptHostModule.cs.uid 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 8e834023fff7200352d686721e21cd0361d55f08..9728888245b592a0983f1e0f5e927cbdf8425a17 100644 GIT binary patch literal 5648 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 N^T&_>`Ck`$-Sz};p?v@V literal 2985 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 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); } }