diff --git a/Scenes/Activable/BrokenFloorEmitter.tscn b/Scenes/Activable/BrokenFloorEmitter.tscn new file mode 100644 index 00000000..ae44ae19 --- /dev/null +++ b/Scenes/Activable/BrokenFloorEmitter.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://dmumxecckh42r"] + +[ext_resource type="Texture2D" uid="uid://ck8e4ngk8wy0m" path="res://Sprites/Actors/Floor_Emitter.png" id="1_0r0ud"] + +[node name="BrokenFloorEmitter" type="Sprite2D"] +texture = ExtResource("1_0r0ud") +hframes = 3 +frame = 2 diff --git a/Scenes/Activable/FloorEmitter.tscn b/Scenes/Activable/FloorEmitter.tscn new file mode 100644 index 00000000..a0fe0e4f --- /dev/null +++ b/Scenes/Activable/FloorEmitter.tscn @@ -0,0 +1,45 @@ +[gd_scene load_steps=9 format=3 uid="uid://b7gkxlll3b1eg"] + +[ext_resource type="Script" uid="uid://uq50svtj2muh" path="res://Scripts/Activables/BulletEmitter.cs" id="1_g5ki3"] +[ext_resource type="Script" uid="uid://c6467d6yx50qh" path="res://Scripts/Components/BulletSpawner.cs" id="2_uhbyd"] +[ext_resource type="Texture2D" uid="uid://ck8e4ngk8wy0m" path="res://Sprites/Actors/Floor_Emitter.png" id="3_g5ki3"] +[ext_resource type="Script" uid="uid://cq3hkweplldbr" path="res://Scripts/Components/Actors/GenericDamageReceiver.cs" id="4_bbtu4"] +[ext_resource type="Script" uid="uid://701a3no2cu45" path="res://Scripts/Components/Actors/EmitterActivationStateSprite.cs" id="4_uhbyd"] +[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="6_6dpsy"] +[ext_resource type="PackedScene" uid="uid://dmumxecckh42r" path="res://Scenes/Activable/BrokenFloorEmitter.tscn" id="6_uhbyd"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_4awvh"] +radius = 5.0 + +[node name="FloorEmitter" type="Node2D"] +script = ExtResource("1_g5ki3") +EmissionRotation = 90.0 + +[node name="BulletSpawner" type="Node2D" parent="."] +script = ExtResource("2_uhbyd") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("3_g5ki3") +hframes = 3 +script = ExtResource("4_uhbyd") + +[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("HealthProvider")] +collision_layer = 64 +collision_mask = 136 +script = ExtResource("4_bbtu4") +HealthProvider = NodePath("Health") +BulletGroup = 2 +Debris = ExtResource("6_uhbyd") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] +position = Vector2(0, 3.865) +shape = SubResource("CircleShape2D_4awvh") + +[node name="Health" type="Node2D" parent="DamageReceiver"] +script = ExtResource("6_6dpsy") +ResourceName = "Health" +MaxResource = 4.0 + +[connection signal="StateChanged" from="." to="Sprite2D" method="ChangeState"] +[connection signal="StateChanged" from="." to="DamageReceiver" method="ChangeState"] +[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] diff --git a/Scenes/Activable/WallEmitter.tscn b/Scenes/Activable/WallEmitter.tscn index 7989fb76..14263cc3 100644 --- a/Scenes/Activable/WallEmitter.tscn +++ b/Scenes/Activable/WallEmitter.tscn @@ -1,8 +1,14 @@ -[gd_scene load_steps=4 format=3 uid="uid://b4gugris5j5kd"] +[gd_scene load_steps=8 format=3 uid="uid://b4gugris5j5kd"] [ext_resource type="Script" uid="uid://uq50svtj2muh" path="res://Scripts/Activables/BulletEmitter.cs" id="1_kaaee"] [ext_resource type="Script" uid="uid://c6467d6yx50qh" path="res://Scripts/Components/BulletSpawner.cs" id="2_dj8i8"] [ext_resource type="Texture2D" uid="uid://b6xatixd2u1wn" path="res://Sprites/Actors/WallEmitter.png" id="3_dj8i8"] +[ext_resource type="Script" uid="uid://cq3hkweplldbr" path="res://Scripts/Components/Actors/GenericDamageReceiver.cs" id="4_epfbp"] +[ext_resource type="PackedScene" uid="uid://b4hntn7l5c5ln" path="res://Scenes/Interactable/DestroyedWallEmitter.tscn" id="5_epfbp"] +[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="6_xbljl"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_4awvh"] +radius = 3.0 [node name="BulletEmitter" type="Node2D"] script = ExtResource("1_kaaee") @@ -13,3 +19,22 @@ script = ExtResource("2_dj8i8") [node name="Sprite2D" type="Sprite2D" parent="."] texture = ExtResource("3_dj8i8") +hframes = 2 + +[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("HealthProvider")] +collision_layer = 64 +collision_mask = 136 +script = ExtResource("4_epfbp") +HealthProvider = NodePath("Health") +BulletGroup = 2 +Debris = ExtResource("5_epfbp") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] +shape = SubResource("CircleShape2D_4awvh") + +[node name="Health" type="Node2D" parent="DamageReceiver"] +script = ExtResource("6_xbljl") +ResourceName = "Health" +MaxResource = 4.0 + +[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] diff --git a/Scenes/Interactable/DestroyedWallEmitter.tscn b/Scenes/Interactable/DestroyedWallEmitter.tscn new file mode 100644 index 00000000..c0d7d67e --- /dev/null +++ b/Scenes/Interactable/DestroyedWallEmitter.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://b4hntn7l5c5ln"] + +[ext_resource type="Texture2D" uid="uid://b6xatixd2u1wn" path="res://Sprites/Actors/WallEmitter.png" id="1_kawoo"] + +[node name="DestroyedWallEmitter" type="Sprite2D"] +texture = ExtResource("1_kawoo") +hframes = 2 +frame = 1 diff --git a/Scenes/Maps/Level2.tscn b/Scenes/Maps/Level2.tscn index 66b5747f..312a6421 100644 --- a/Scenes/Maps/Level2.tscn +++ b/Scenes/Maps/Level2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=77 format=4 uid="uid://6a6tjohypmmb"] +[gd_scene load_steps=81 format=4 uid="uid://6a6tjohypmmb"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_t2k72"] [ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="2_2jsgm"] @@ -38,13 +38,16 @@ [ext_resource type="PackedScene" uid="uid://dcbcyp1qogcl0" path="res://Scenes/Props/BigTankHorizontal.tscn" id="30_i668q"] [ext_resource type="PackedScene" uid="uid://b0gpbkxdfbnjh" path="res://Scenes/Actors/ForceField_Horizontal.tscn" id="31_hvfip"] [ext_resource type="AudioStream" uid="uid://blohh20jktoyo" path="res://SFX/270641__phantastonia__alarm2.wav" id="31_nb1db"] +[ext_resource type="PackedScene" uid="uid://b7gkxlll3b1eg" path="res://Scenes/Activable/FloorEmitter.tscn" id="33_6h3t3"] [ext_resource type="Texture2D" uid="uid://r2bdhalt8sih" path="res://Sprites/Items/ofudagun_test.png" id="33_v8wj6"] +[ext_resource type="PackedScene" uid="uid://dre2wvw4pa3hc" path="res://Scenes/Weapons/Bullets/enemyBullet_mid_blue.tscn" id="35_owyq0"] +[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="36_qo7ri"] [ext_resource type="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="37_47klv"] [sub_resource type="Resource" id="Resource_6wo78"] script = ExtResource("4_s1vkf") EggIndex = 0 -StartingEquipment = [ExtResource("3_mqt4u")] +StartingEquipment = Array[ExtResource("3_hw1so")]([ExtResource("3_mqt4u")]) [sub_resource type="Resource" id="Resource_s23f3"] script = ExtResource("14_s23f3") @@ -288,6 +291,20 @@ animations = [{ "speed": 5.0 }] +[sub_resource type="Resource" id="Resource_5j8ks"] +script = ExtResource("36_qo7ri") +BulletScene = ExtResource("35_owyq0") +BulletSpeed = 100.0 +Direction = Vector2(1, 0) +BulletDamage = 4.0 +LifeTime = 10.0 +DestroyOnCollision = true +Owner = 2 +DamageType = 0 +Controllable = false +TimeModifiers = null +metadata/_custom_type_script = "uid://dslyrfcej3g2n" + [node name="GameScene" type="Node2D"] script = ExtResource("1_t2k72") PlayerTemplate = ExtResource("2_2jsgm") @@ -317,7 +334,7 @@ metadata/_edit_lock_ = true [node name="Props" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] y_sort_enabled = true -tile_map_data = PackedByteArray("AAARABEAAQAAAAAAAgASABEAAQAAAAAAAgAVABQAAQAAAAAAAgAVABEAAQAAAAAADAAVABIAAQAAAAAADAAUABEAAQAAAAAADQAKABAAAAAGAAAAAAALABAAAAAHAAAAAAAHABAAAAAGAAAAAAAIABAAAAAHAAAAAAAFABAAAQAAAAAAAgAGABAAAQAAAAAAAgADABUAAQAAAAAAAQADABYAAQAAAAAAAQAEABcAAQAAAAAADgADABcAAQAAAAAAAQATABEAAQAAAAAADwAVABMAAQAAAAAADwADABgAAQAAAAAADgAEABgAAQAAAAAADgALABgAAQAAAAAACQAKABgAAQAAAAAADwALABcAAQAAAAAAAQAJABgAAQAAAAAAEAAIABgAAQAAAAAAEAADABMAAQAAAAAAEAADABQAAQAAAAAAEAAKAB4AAQAAAAAAEAALAB4AAQAAAAAAEAACAB4AAQAAAAAAEAADAB4AAQAAAAAAAQALAB8AAQAAAAAAAQAJACMAAQAAAAAAAgAKACMAAQAAAAAAAgALACMAAQAAAAAACQAIACMAAQAAAAAADAAEACMAAQAAAAAADAAHACMAAQAAAAAAEAADACMAAQAAAAAADQAFACMAAQAAAAAADgAGACMAAQAAAAAAEAAJABAAAQAAAAAAEQACACAAAAAGAAMAAAANAB8AAQAAAAAACQAUACEAAQAAAAAAEAANACEAAQAAAAAAEAAGABMAAAAIAAYAAAAGABQAAAAIAAYAAAAHABUAAAAHAAUAAAAIABUAAAAHAAUAAAAJABMAAAAGAAYAAAAJABQAAAAGAAYAAAAHABIAAAAHAAcAAAAIABIAAAAHAAcAAAAHABMAAQAAAAAAAQAHABQAAQAAAAAAAQAIABMAAQAAAAAAAQAIABQAAQAAAAAAAQAVACAAAAAIAAYAAAAXAB8AAAAIAAYAAAAXACAAAAAIAAYAAAAXACEAAAAIAAYAAAAXACIAAAAIAAYAAAAYACMAAAAHAAUAAAAZACMAAAAHAAUAAAAaACMAAAAHAAUAAAAbACMAAAAHAAUAAAAcACMAAAAHAAUAAAAdACMAAAAHAAUAAAAeAB8AAAAGAAYAAAAeACAAAAAGAAYAAAAeACEAAAAGAAYAAAAeACIAAAAGAAYAAAAYAB4AAAAHAAcAAAAZAB4AAAAHAAcAAAAaAB4AAAAHAAcAAAAbAB4AAAAHAAcAAAAcAB4AAAAHAAcAAAAdAB4AAAAHAAcAAAAfAB0AAQAAAAAADgAVAB4AAAAKAA4AAAAcABsAAAAKAAQAAAAZABsAAAAKAAQAAAAHABwAAAAJAAwAAAAHAB0AAAAJAA0AAAAMABEAAAAJAAwAAAAMABIAAAAJAA0AAAAEABwAAAAKAAwAAAAEAB0AAAAKAA0AAAABAB8AAAAKAAwAAAABACAAAAAKAA0AAAAQABEAAAAKAAwAAAAQABIAAAAKAA0AAAD7/x0AAAAKAAwAAAD7/x4AAAAKAA0AAAD+/x0AAAAJAAwAAAD+/x4AAAAJAA0AAAD//x8AAAAJAAwAAAD//yAAAAAJAA0AAAAMAB4AAAAKAA4AAAAMAB8AAAAKAA8AAAAVAB8AAAAKAA8AAAD6/yAAAAAMAAQAAAD9/yMAAAAGAAwAAAD9/yQAAAAGAAwAAAD9/yUAAAAHAAsAAAD+/yUAAAAHAAsAAADz/yAAAAAHAAsAAAD0/yAAAAAHAAsAAAD1/yAAAAAHAAsAAAD2/yAAAAAHAAsAAAD3/yAAAAAHAAsAAAD4/yAAAAAHAAsAAAD5/yAAAAAHAAsAAADz/x8AAAAGAAwAAADz/x4AAAAGAAwAAAD9/yEAAAAGAAYAAAD9/yIAAAAGAAYAAAD7/yAAAAAHAAcAAAD8/yAAAAAHAAcAAAAKABMAAAANAAgAAAAKABQAAAANAAkAAAALABMAAAAOAAgAAAALABQAAAAOAAkAAAAXACMAAAAEAA8AAAAeAB4AAAAFAA4AAAAeACMAAAAFAA8AAAAXAB4AAAAEAA4AAAD9/yAAAAAFAA4AAAAJABIAAAAFAA4AAAAGABIAAAAEAA4AAAAGABUAAAAEAA8AAAAJABUAAAAFAA8AAADV/x8AAAAJAAwAAADV/yAAAAAJAA0AAADi/x8AAAAKAAwAAADi/yAAAAAKAA0AAADr/xAAAAAKAAwAAADr/xEAAAAKAA0AAADq/xAAAAAJAAwAAADq/xEAAAAJAA0AAADV/x0AAAAGAAYAAADV/x4AAAAGAAYAAADT/xwAAAAHAAcAAADU/xwAAAAHAAcAAADV/xwAAAAFAA4AAAD6/yMAAAAIAAYAAAD6/yQAAAAIAAYAAAD7/yUAAAAHAAUAAAD8/yUAAAAHAAUAAAD6/yUAAAAEAA8AAADT/xkAAAAHAAsAAADU/xkAAAAHAAsAAADV/xkAAAAHAAsAAADW/xkAAAAHAAsAAADX/xkAAAAHAAsAAADY/xkAAAAHAAsAAADZ/xkAAAAHAAsAAADa/xkAAAAHAAsAAADb/xkAAAAHAAsAAADd/w8AAAAIAAwAAADd/xAAAAAIAAwAAADd/xEAAAAIAAwAAADd/xIAAAAIAAwAAADd/xMAAAAIAAwAAADd/xQAAAAIAAwAAADd/xUAAAAIAAwAAADc/xkAAAAHAAsAAADd/xkAAAAHAAsAAADd/xYAAAAHAAsAAAA=") +tile_map_data = PackedByteArray("AAARABEAAQAAAAAAAgASABEAAQAAAAAAAgAVABQAAQAAAAAAAgAVABEAAQAAAAAADAAVABIAAQAAAAAADAAUABEAAQAAAAAADQAKABAAAAAGAAAAAAALABAAAAAHAAAAAAAHABAAAAAGAAAAAAAIABAAAAAHAAAAAAAFABAAAQAAAAAAAgAGABAAAQAAAAAAAgADABUAAQAAAAAAAQADABYAAQAAAAAAAQAEABcAAQAAAAAADgADABcAAQAAAAAAAQATABEAAQAAAAAADwAVABMAAQAAAAAADwADABgAAQAAAAAADgAEABgAAQAAAAAADgALABgAAQAAAAAACQAKABgAAQAAAAAADwALABcAAQAAAAAAAQAJABgAAQAAAAAAEAAIABgAAQAAAAAAEAADABMAAQAAAAAAEAADABQAAQAAAAAAEAAKAB4AAQAAAAAAEAALAB4AAQAAAAAAEAACAB4AAQAAAAAAEAADAB4AAQAAAAAAAQALAB8AAQAAAAAAAQAJACMAAQAAAAAAAgAKACMAAQAAAAAAAgALACMAAQAAAAAACQAIACMAAQAAAAAADAAEACMAAQAAAAAADAAHACMAAQAAAAAAEAADACMAAQAAAAAADQAFACMAAQAAAAAADgAGACMAAQAAAAAAEAAJABAAAQAAAAAAEQACACAAAAAGAAMAAAANAB8AAQAAAAAACQAUACEAAQAAAAAAEAANACEAAQAAAAAAEAAGABMAAAAIAAYAAAAGABQAAAAIAAYAAAAHABUAAAAHAAUAAAAIABUAAAAHAAUAAAAJABMAAAAGAAYAAAAJABQAAAAGAAYAAAAHABIAAAAHAAcAAAAIABIAAAAHAAcAAAAHABMAAQAAAAAAAQAHABQAAQAAAAAAAQAIABMAAQAAAAAAAQAIABQAAQAAAAAAAQAVACAAAAAIAAYAAAAXAB8AAAAIAAYAAAAXACAAAAAIAAYAAAAXACEAAAAIAAYAAAAXACIAAAAIAAYAAAAYACMAAAAHAAUAAAAZACMAAAAHAAUAAAAaACMAAAAHAAUAAAAbACMAAAAHAAUAAAAcACMAAAAHAAUAAAAdACMAAAAHAAUAAAAeAB8AAAAGAAYAAAAeACAAAAAGAAYAAAAeACEAAAAGAAYAAAAeACIAAAAGAAYAAAAYAB4AAAAHAAcAAAAZAB4AAAAHAAcAAAAaAB4AAAAHAAcAAAAbAB4AAAAHAAcAAAAcAB4AAAAHAAcAAAAdAB4AAAAHAAcAAAAfAB0AAQAAAAAADgAVAB4AAAAKAA4AAAAcABsAAAAKAAQAAAAZABsAAAAKAAQAAAAHABwAAAAJAAwAAAAHAB0AAAAJAA0AAAAMABEAAAAJAAwAAAAMABIAAAAJAA0AAAAEABwAAAAKAAwAAAAEAB0AAAAKAA0AAAABAB8AAAAKAAwAAAABACAAAAAKAA0AAAAQABEAAAAKAAwAAAAQABIAAAAKAA0AAAD7/x0AAAAKAAwAAAD7/x4AAAAKAA0AAAD+/x0AAAAJAAwAAAD+/x4AAAAJAA0AAAD//x8AAAAJAAwAAAD//yAAAAAJAA0AAAAMAB4AAAAKAA4AAAAMAB8AAAAKAA8AAAAVAB8AAAAKAA8AAAD6/yAAAAAMAAQAAAD9/yMAAAAGAAwAAAD9/yQAAAAGAAwAAAD9/yUAAAAHAAsAAAD+/yUAAAAHAAsAAADz/yAAAAAHAAsAAAD0/yAAAAAHAAsAAAD1/yAAAAAHAAsAAAD2/yAAAAAHAAsAAAD3/yAAAAAHAAsAAAD4/yAAAAAHAAsAAAD5/yAAAAAHAAsAAADz/x8AAAAGAAwAAADz/x4AAAAGAAwAAAD9/yEAAAAGAAYAAAD9/yIAAAAGAAYAAAD7/yAAAAAHAAcAAAD8/yAAAAAHAAcAAAAKABMAAAANAAgAAAAKABQAAAANAAkAAAALABMAAAAOAAgAAAALABQAAAAOAAkAAAAXACMAAAAEAA8AAAAeAB4AAAAFAA4AAAAeACMAAAAFAA8AAAAXAB4AAAAEAA4AAAD9/yAAAAAFAA4AAAAJABIAAAAFAA4AAAAGABIAAAAEAA4AAAAGABUAAAAEAA8AAAAJABUAAAAFAA8AAADV/x8AAAAJAAwAAADV/yAAAAAJAA0AAADi/x8AAAAKAAwAAADi/yAAAAAKAA0AAADr/xAAAAAKAAwAAADr/xEAAAAKAA0AAADq/xAAAAAJAAwAAADq/xEAAAAJAA0AAADV/x0AAAAGAAYAAADV/x4AAAAGAAYAAADT/xwAAAAHAAcAAADU/xwAAAAHAAcAAADV/xwAAAAFAA4AAAD6/yMAAAAIAAYAAAD6/yQAAAAIAAYAAAD7/yUAAAAHAAUAAAD8/yUAAAAHAAUAAAD6/yUAAAAEAA8AAADT/xkAAAAHAAsAAADU/xkAAAAHAAsAAADV/xkAAAAHAAsAAADW/xkAAAAHAAsAAADX/xkAAAAHAAsAAADY/xkAAAAHAAsAAADZ/xkAAAAHAAsAAADa/xkAAAAHAAsAAADb/xkAAAAHAAsAAADd/w8AAAAIAAwAAADd/xAAAAAIAAwAAADd/xEAAAAIAAwAAADd/xIAAAAIAAwAAADd/xMAAAAIAAwAAADd/xQAAAAIAAwAAADd/xUAAAAIAAwAAADc/xkAAAAHAAsAAADd/xkAAAAHAAsAAADd/xYAAAAHAAsAAAD3/ysAAAAKAAwAAAD3/ywAAAAKAA0AAADy/ysAAAAJAAwAAADy/ywAAAAJAA0AAAA=") tile_set = ExtResource("5_06rc0") metadata/_edit_lock_ = true @@ -327,6 +344,15 @@ metadata/_edit_lock_ = true [node name="Teleporter" parent="Tilemaps/Actors" instance=ExtResource("6_e12id")] position = Vector2(311, 304) +[node name="DebugTeleporter" parent="Tilemaps/Actors" node_paths=PackedStringArray("Target") instance=ExtResource("6_e12id")] +position = Vector2(323.708, 324.168) +IsEnabled = true +Target = NodePath("../DebugTeleporterDestination") + +[node name="DebugTeleporterDestination" parent="Tilemaps/Actors" instance=ExtResource("6_e12id")] +position = Vector2(-72.1223, 735.098) +Invisible = true + [node name="Vials" type="Sprite2D" parent="Tilemaps/Actors"] position = Vector2(134, 259) texture = ExtResource("9_j5c74") @@ -374,6 +400,7 @@ Events = Array[ExtResource("14_hvfip")]([SubResource("Resource_mq37i")]) position = Vector2(264, 482) BulletResource = ExtResource("22_uaqq6") EmitCoolDown = 0.5 +BurstCoolDown = 0.0 [node name="WallEmitter3" parent="Tilemaps/Actors" instance=ExtResource("21_qi6uc")] position = Vector2(456, 455) @@ -384,6 +411,7 @@ EmitCoolDown = 0.5 position = Vector2(312, 482) BulletResource = ExtResource("22_uaqq6") EmitCoolDown = 0.5 +BurstCoolDown = 0.0 [node name="Elevator" parent="Tilemaps/Actors" instance=ExtResource("23_577wb")] position = Vector2(-64, 576) @@ -443,7 +471,7 @@ position = Vector2(-274, 530) [node name="SwitchBox" parent="Tilemaps/Actors" node_paths=PackedStringArray("Targets") instance=ExtResource("30_47klv")] position = Vector2(-152, 707) StartingState = 0 -Targets = [NodePath("../HorizontalForceField")] +Targets = [NodePath("../HorizontalForceField"), NodePath("../FloorEmitter"), NodePath("../FloorEmitter2"), NodePath("../FloorEmitter3")] [node name="HorizontalForceField" parent="Tilemaps/Actors" instance=ExtResource("31_hvfip")] position = Vector2(-48, 480) @@ -455,6 +483,36 @@ autoplay = "default" frame = 22 frame_progress = 0.83544 +[node name="FloorEmitter" parent="Tilemaps/Actors" instance=ExtResource("33_6h3t3")] +position = Vector2(-97, 661) +BulletResource = SubResource("Resource_5j8ks") +InvertSignal = true +BurstCoolDown = 0.7 +Spread = 360.0 +Count = 8 +RotationSpeed = 5.0 +BulletsPerBurst = 4 + +[node name="FloorEmitter2" parent="Tilemaps/Actors" instance=ExtResource("33_6h3t3")] +position = Vector2(-170.149, 591.864) +BulletResource = SubResource("Resource_5j8ks") +InvertSignal = true +BurstCoolDown = 0.7 +Spread = 360.0 +Count = 8 +RotationSpeed = 5.0 +BulletsPerBurst = 4 + +[node name="FloorEmitter3" parent="Tilemaps/Actors" instance=ExtResource("33_6h3t3")] +position = Vector2(-282.728, 648.41) +BulletResource = SubResource("Resource_5j8ks") +InvertSignal = true +BurstCoolDown = 0.7 +Spread = 360.0 +Count = 8 +RotationSpeed = 5.0 +BulletsPerBurst = 4 + [node name="CameraController" type="Camera2D" parent="."] script = ExtResource("7_lxkiw") pixel_snap = false diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 2d117753..6d423645 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=124 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=125 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="2_ksslq"] @@ -60,6 +60,7 @@ [ext_resource type="Script" uid="uid://d0a0o50j82eo6" path="res://Scripts/Activables/ScriptableBase.cs" id="42_wigyb"] [ext_resource type="PackedScene" uid="uid://fxvlaidieiv7" path="res://Scenes/Interactable/ScriptableAreaTrigger.tscn" id="43_kf3qc"] [ext_resource type="Script" uid="uid://dkihoo85jfec5" path="res://Scripts/Resources/Events/MovePlayerEvent.cs" id="44_klwgh"] +[ext_resource type="Script" uid="uid://b5fesrd4lv8t1" path="res://Scripts/Resources/Events/EventResource.cs" id="44_mah4x"] [ext_resource type="PackedScene" uid="uid://dx1urm7nttkqk" path="res://Scenes/Actors/level_teleporter.tscn" id="44_q5xi2"] [ext_resource type="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="45_5qg27"] [ext_resource type="Script" uid="uid://bwox5lmgiijcs" path="res://Scripts/Resources/Events/ActivateEvent.cs" id="45_emjoj"] @@ -104,7 +105,7 @@ [sub_resource type="Resource" id="Resource_6sau4"] script = ExtResource("7_l32kg") EggIndex = 0 -StartingEquipment = [ExtResource("6_khabp")] +StartingEquipment = Array[ExtResource("6_8tdlb")]([ExtResource("6_khabp")]) [sub_resource type="RectangleShape2D" id="RectangleShape2D_ksslq"] size = Vector2(184, 46.5) @@ -208,7 +209,7 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_qnbhd"] +[sub_resource type="Resource" id="Resource_bhq8p"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") @@ -232,7 +233,7 @@ SpawnMarkers = Dictionary[int, NodePath]({ 2: NodePath("Parallax2D/Factory Tilemaps/LevelProps/BossDebugTeleporterDestination"), 255: NodePath("Parallax2D/Factory Tilemaps/Debug Room/DebugRoomStartPosition") }) -StartingEquipment = [ExtResource("4_swym2"), ExtResource("5_nqier")] +StartingEquipment = Array[ExtResource("6_8tdlb")]([ExtResource("4_swym2"), ExtResource("5_nqier")]) MapStartData = SubResource("Resource_6sau4") PlayerParentNode = NodePath("Parallax2D/Factory Tilemaps/PlayerParent") metadata/_edit_lock_ = true @@ -554,7 +555,7 @@ Invisible = true metadata/_edit_group_ = true [node name="ScriptableAreaTrigger" parent="Parallax2D/Factory Tilemaps/LevelProps/DebugTeleporter" instance=ExtResource("43_kf3qc")] -Events = [SubResource("Resource_usuub")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_usuub")]) [node name="BlueKeycard2" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("35_rblsn")] position = Vector2(-1032, -317) @@ -730,7 +731,7 @@ position = Vector2(-1506, -188) [node name="LevelStartTrigger" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-781, -160) scale = Vector2(1.455, 1.455) -Events = [SubResource("Resource_5er5x"), SubResource("Resource_b25hy")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_5er5x"), SubResource("Resource_b25hy")]) [node name="AreaTrigger2" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("28_6au4t")] position = Vector2(-435, -162) @@ -772,7 +773,7 @@ Targets = [NodePath("Script2")] [node name="Script2" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer2"] position = Vector2(120, 25) script = ExtResource("42_wigyb") -Events = [SubResource("Resource_ji7au")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_ji7au")]) [node name="Computer5" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("31_243ec")] position = Vector2(-1344, -251) @@ -780,7 +781,7 @@ Targets = [NodePath("Computer5Script")] [node name="Computer5Script" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer5"] script = ExtResource("42_wigyb") -Events = [SubResource("Resource_fasrq"), SubResource("Resource_mah4x"), SubResource("Resource_yot54")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_fasrq"), SubResource("Resource_mah4x"), SubResource("Resource_yot54")]) [node name="Computer3" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("31_243ec")] position = Vector2(-612.57, -358.528) @@ -788,7 +789,7 @@ Target = NodePath("Script") [node name="Script" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer3"] script = ExtResource("42_wigyb") -Events = [SubResource("Resource_o2kpk")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_o2kpk")]) [node name="Computer4" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("31_243ec")] position = Vector2(-791, -505) @@ -796,7 +797,7 @@ Target = NodePath("Node2D") [node name="Node2D" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer4"] script = ExtResource("42_wigyb") -Events = [SubResource("Resource_s3g2w")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_s3g2w")]) [node name="Label" type="Label" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer4"] offset_left = -5.0 @@ -824,11 +825,11 @@ position = Vector2(-792, -407) [node name="BossBattleEndScript" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] position = Vector2(-1628.53, -477.628) script = ExtResource("42_wigyb") -Events = [SubResource("Resource_068l7"), SubResource("Resource_l3nop")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_068l7"), SubResource("Resource_l3nop")]) [node name="BossBattleStartScript" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = [SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_qnbhd")] +Events = Array[ExtResource("44_mah4x")]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_bhq8p")]) [node name="Enemy13" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("47_u1ve6")] position = Vector2(-1657, -788) @@ -1025,7 +1026,7 @@ position = Vector2(-2000, -736) [node name="ControlPad8" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("12_hfkf1")] position = Vector2(-2027, -735) Targets = [NodePath("../HorizontalForceField")] -Requirements = [ExtResource("84_ma1ta")] +Requirements = Array[ExtResource("6_8tdlb")]([ExtResource("84_ma1ta")]) [node name="Ammo6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("34_17pjh")] position = Vector2(-872, -220) diff --git a/Scripts/Activables/BulletEmitter.cs b/Scripts/Activables/BulletEmitter.cs index 2d5a7104..25bf4fec 100644 --- a/Scripts/Activables/BulletEmitter.cs +++ b/Scripts/Activables/BulletEmitter.cs @@ -14,33 +14,74 @@ public partial class BulletEmitter : Node2D, IActivable public bool EmitOnStart { get; set; } = false; [Export] - public float EmitCoolDown { get; private set; } = 1f; + public bool InvertSignal { get; private set; } = false; + + [Export] + public float EmitCoolDown { get; private set; } = 0.2f; + + [Export] public float BurstCoolDown { get; private set; } = 2f; [Export] public float Spread { get; set; } = 0f; [Export] public int Count { get; set; } = 1; [Export] public float EmissionRotation { get; set; } = 0f; - + + [Export] public float RotationSpeed { get; private set; } = 0f; + + [Export] public int BulletsPerBurst { get; private set; } = 1; + + + [Signal] + public delegate void StateChangedEventHandler(bool isEmitting); + private BulletSpawner _bulletSpawner; protected bool IsEmitting = false; private double _emitTimer = 0f; + private double _reloadTimer = 0f; + + private float _currentEmissionRotation = 0f; + + private int _currentBullets = 0; + + private bool _isReloading = false; + public override void _Ready() { _bulletSpawner = GetNode("BulletSpawner"); + + _currentEmissionRotation = EmissionRotation; + _currentBullets = BulletsPerBurst; + if (EmitOnStart) { IsEmitting = true; CallDeferred(MethodName.Shoot); } + EmitSignal(SignalName.StateChanged, IsEmitting); } public override void _Process(double delta) { if (!IsEmitting) return; + + if (_isReloading) + { + _reloadTimer += delta; + + if (_reloadTimer >= BurstCoolDown) + { + _currentBullets = BulletsPerBurst; + _isReloading = false; + _reloadTimer = 0f; + } + + return; + } + _emitTimer += delta; if (_emitTimer >= EmitCoolDown) @@ -52,7 +93,16 @@ public partial class BulletEmitter : Node2D, IActivable public void Shoot() { - _bulletSpawner.SpawnBullet(BulletResource.MakeBullet(this.GlobalPosition, Count, Spread, EmissionRotation)); + _bulletSpawner.SpawnBullet(BulletResource.MakeBullet(this.GlobalPosition, Count, Spread, _currentEmissionRotation)); + + _currentEmissionRotation += RotationSpeed; + + _currentBullets--; + + if (_currentBullets <= 0) + { + _isReloading = true; + } } public bool Activate(ActivationType activationType = ActivationType.Toggle) @@ -61,12 +111,12 @@ public partial class BulletEmitter : Node2D, IActivable { case ActivationType.Open: case ActivationType.Enable: - IsEmitting = true; + IsEmitting = !InvertSignal; _emitTimer = 0; break; case ActivationType.Close: case ActivationType.Disable: - IsEmitting = false; + IsEmitting = InvertSignal; _emitTimer = 0; break; case ActivationType.Use: @@ -77,7 +127,8 @@ public partial class BulletEmitter : Node2D, IActivable case ActivationType.Destroy: break; } - + + EmitSignal(SignalName.StateChanged, IsEmitting); return true; } } \ No newline at end of file diff --git a/Scripts/Components/Actors/EmitterActivationStateSprite.cs b/Scripts/Components/Actors/EmitterActivationStateSprite.cs new file mode 100644 index 00000000..cc17353f --- /dev/null +++ b/Scripts/Components/Actors/EmitterActivationStateSprite.cs @@ -0,0 +1,17 @@ +using Godot; +using System; + +public partial class EmitterActivationStateSprite : Sprite2D +{ + public void ChangeState(bool enabled) + { + if (enabled) + { + this.Frame = 1; + } + else + { + this.Frame = 0; + } + } +} diff --git a/Scripts/Components/Actors/EmitterActivationStateSprite.cs.uid b/Scripts/Components/Actors/EmitterActivationStateSprite.cs.uid new file mode 100644 index 00000000..df113f0b --- /dev/null +++ b/Scripts/Components/Actors/EmitterActivationStateSprite.cs.uid @@ -0,0 +1 @@ +uid://701a3no2cu45 diff --git a/Scripts/Components/Actors/GenericDamageReceiver.cs b/Scripts/Components/Actors/GenericDamageReceiver.cs index 76c85ba1..af8b0663 100644 --- a/Scripts/Components/Actors/GenericDamageReceiver.cs +++ b/Scripts/Components/Actors/GenericDamageReceiver.cs @@ -19,15 +19,23 @@ public partial class GenericDamageReceiver : Area2D, IHittable private Node2D _parent; + public bool Enabled { get; private set; } = true; + public override void _Ready() { _parent = GetParent(); HealthProvider.FillResource(); HealthProvider.ResourceDepleted += OnDeath; } + + public void ChangeState(bool enabled) + { + Enabled = enabled; + } private void _on_damage_hitbox_area_entered(Area2D area) { + if (!Enabled) return; if (Invulnerable) return; if (area is not Bullet bullet) return; @@ -46,6 +54,7 @@ public partial class GenericDamageReceiver : Area2D, IHittable public void Hit(float damage, DamageType damageType = DamageType.Neutral) { + if (!Enabled) return; if (Invulnerable) return; var dmg = DamageResistances.Aggregate(damage, (current, resistance) => current * resistance.CalculateDamage(current, damageType)); diff --git a/Scripts/Interactables/StateSwitch.cs b/Scripts/Interactables/StateSwitch.cs index 140e689e..bb3155cf 100644 --- a/Scripts/Interactables/StateSwitch.cs +++ b/Scripts/Interactables/StateSwitch.cs @@ -16,6 +16,21 @@ public partial class StateSwitch : Switch base._Ready(); CurrentState = StartingState; + + switch (CurrentState) + { + case SwitchState.On: + TriggerEnable(); + break; + case SwitchState.Off: + TriggerDisable(); + break; + case SwitchState.Destroyed: + break; + case SwitchState.Disabled: + break; + + } } public override bool Activate(ActivationType activationType = ActivationType.Toggle) diff --git a/Sprites/Actors/Floor_Emitter.aseprite b/Sprites/Actors/Floor_Emitter.aseprite new file mode 100644 index 00000000..7076f7cc --- /dev/null +++ b/Sprites/Actors/Floor_Emitter.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27fac3e6d06960dc2dd08045fd59ab8de561072d4d3b010a32e375c6794b6959 +size 858 diff --git a/Sprites/Actors/Floor_Emitter.png b/Sprites/Actors/Floor_Emitter.png new file mode 100644 index 00000000..493362be --- /dev/null +++ b/Sprites/Actors/Floor_Emitter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b33e443ad7a9c7c51af452653fb903d4190797a42c2ea8737dc864c08a9e012 +size 434 diff --git a/Sprites/Actors/Floor_Emitter.png.import b/Sprites/Actors/Floor_Emitter.png.import new file mode 100644 index 00000000..9b8243f8 --- /dev/null +++ b/Sprites/Actors/Floor_Emitter.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ck8e4ngk8wy0m" +path="res://.godot/imported/Floor_Emitter.png-55d9af697d9013c7f62d6c7b500bba7d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/Actors/Floor_Emitter.png" +dest_files=["res://.godot/imported/Floor_Emitter.png-55d9af697d9013c7f62d6c7b500bba7d.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/Sprites/Actors/WallEmitter.aseprite b/Sprites/Actors/WallEmitter.aseprite index 4cdf8a44..63b520bd 100644 --- a/Sprites/Actors/WallEmitter.aseprite +++ b/Sprites/Actors/WallEmitter.aseprite @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3da0aa1ef00bf43a881e0236340f28b5bebaac68a23684ee98acf32a7061e00 -size 575 +oid sha256:2cca1e925108113c196244e4639dd243b3d6a5eed5428344143143bfda9cc905 +size 713 diff --git a/Sprites/Actors/WallEmitter.png b/Sprites/Actors/WallEmitter.png index 1e26fa17..20ea112c 100644 --- a/Sprites/Actors/WallEmitter.png +++ b/Sprites/Actors/WallEmitter.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c81417f8937482e739244015ac8865eb3a89674477db7b960fdf14a3073e0330 -size 201 +oid sha256:2616c818a733643a07278e46fb86b5009cb91afd6891c962b576586e2425fc06 +size 379