Redesigned bullet emitters

This commit is contained in:
MaddoScientisto 2025-03-14 23:04:59 +01:00
commit 7b24e47739
16 changed files with 306 additions and 28 deletions

View file

@ -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

View file

@ -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"]

View file

@ -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"]

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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>("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;
}
}

View file

@ -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;
}
}
}

View file

@ -0,0 +1 @@
uid://701a3no2cu45

View file

@ -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<Node2D>();
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));

View file

@ -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)

BIN
Sprites/Actors/Floor_Emitter.aseprite (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Sprites/Actors/Floor_Emitter.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
Sprites/Actors/WallEmitter.aseprite (Stored with Git LFS)

Binary file not shown.

BIN
Sprites/Actors/WallEmitter.png (Stored with Git LFS)

Binary file not shown.