diff --git a/Resources/Bullets/EmitterTestBullet.tres b/Resources/Bullets/EmitterTestBullet.tres new file mode 100644 index 00000000..29167966 --- /dev/null +++ b/Resources/Bullets/EmitterTestBullet.tres @@ -0,0 +1,16 @@ +[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://bj331rcsq65es"] + +[ext_resource type="PackedScene" uid="uid://bi3f14klscvlw" path="res://Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn" id="1_ji2e1"] +[ext_resource type="Script" path="res://Scripts/Resources/BulletResource.cs" id="2_kwmfx"] + +[resource] +script = ExtResource("2_kwmfx") +BulletScene = ExtResource("1_ji2e1") +BulletSpeed = 20.0 +Direction = Vector2(1, 0) +BulletDamage = 8.0 +LifeTime = 4.0 +DestroyOnCollision = false +Owner = 0 +DamageType = 2 +TimeModifiers = Array[Object]([]) diff --git a/Scenes/Activable/BulletEmitter.tscn b/Scenes/Activable/BulletEmitter.tscn index 67f9f8f1..a0412a70 100644 --- a/Scenes/Activable/BulletEmitter.tscn +++ b/Scenes/Activable/BulletEmitter.tscn @@ -1,23 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://cd36ch65jijg0"] +[gd_scene load_steps=3 format=3 uid="uid://cd36ch65jijg0"] [ext_resource type="Script" path="res://Scripts/Activables/BulletEmitter.cs" id="1_11khd"] [ext_resource type="Script" path="res://Scripts/Components/BulletSpawner.cs" id="2_cr25o"] -[ext_resource type="PackedScene" uid="uid://bi3f14klscvlw" path="res://Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn" id="2_tvufl"] -[ext_resource type="Script" path="res://Scripts/Resources/BulletResource.cs" id="3_njoox"] - -[sub_resource type="Resource" id="Resource_pcsuf"] -script = ExtResource("3_njoox") -BulletScene = ExtResource("2_tvufl") -BulletSpeed = 20.0 -BulletDamage = 8.0 -LifeTime = 4.0 -Owner = 0 -DamageType = 2 -TimeModifiers = Array[Object]([]) [node name="BulletEmitter" type="Node2D"] script = ExtResource("1_11khd") -BulletResource = SubResource("Resource_pcsuf") [node name="BulletSpawner" type="Node2D" parent="."] script = ExtResource("2_cr25o") diff --git a/Scenes/Maps/NewActorTest.tscn b/Scenes/Maps/NewActorTest.tscn index 1516619d..30ab32fc 100644 --- a/Scenes/Maps/NewActorTest.tscn +++ b/Scenes/Maps/NewActorTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=25 format=4 uid="uid://5klhna6pdpss"] +[gd_scene load_steps=27 format=4 uid="uid://5klhna6pdpss"] [ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_uhxhn"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_afebu"] @@ -10,8 +10,10 @@ [ext_resource type="PackedScene" uid="uid://b0gpbkxdfbnjh" path="res://Scenes/Actors/ForceField_Horizontal.tscn" id="8_5cbgu"] [ext_resource type="Script" path="res://Scripts/InventoryManager.cs" id="8_scbgd"] [ext_resource type="PackedScene" uid="uid://bc054js8ep2b" path="res://Scenes/Actors/4WayActorEnemyTest.tscn" id="8_vi7eu"] +[ext_resource type="PackedScene" uid="uid://cd36ch65jijg0" path="res://Scenes/Activable/BulletEmitter.tscn" id="9_tniww"] [ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="9_xs7rn"] [ext_resource type="Script" path="res://Scenes/CameraTarget.gd" id="10_86lpq"] +[ext_resource type="Resource" uid="uid://bj331rcsq65es" path="res://Resources/Bullets/EmitterTestBullet.tres" id="10_gkpxd"] [ext_resource type="Script" path="res://Scripts/AlarmManager.cs" id="11_njjjf"] [ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="12_8mkvw"] [ext_resource type="PackedScene" uid="uid://d1h48wgasakk4" path="res://Scenes/Interactable/alarm_box.tscn" id="14_pr50u"] @@ -68,10 +70,18 @@ position = Vector2(258, 364) [node name="HorizontalForceField" parent="Tilemaps/Actors" instance=ExtResource("8_5cbgu")] position = Vector2(15, 304) +[node name="BulletEmitter" parent="Tilemaps/Actors" instance=ExtResource("9_tniww")] +position = Vector2(-17, 411) +BulletResource = ExtResource("10_gkpxd") + [node name="ActorEnemyTest" parent="Tilemaps" node_paths=PackedStringArray("DefeatScript") instance=ExtResource("8_vi7eu")] position = Vector2(8, 410) DefeatScript = NodePath("../Actors/HorizontalForceField") +[node name="ControlPad" parent="Tilemaps" node_paths=PackedStringArray("Target") instance=ExtResource("16_ijcqi")] +position = Vector2(55, 368) +Target = NodePath("../Actors/BulletEmitter") + [node name="CameraController" type="Camera2D" parent="."] script = ExtResource("7_4a7df") pixel_snap = false diff --git a/Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn b/Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn index b800eea7..da0d3017 100644 --- a/Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn +++ b/Scenes/Weapons/Bullets/enemyBullet_mid_red.tscn @@ -7,11 +7,10 @@ radius = 2.23607 [node name="Bullet" type="Area2D" groups=["bullets"]] -collision_layer = 128 -collision_mask = 71 +collision_layer = 136 +collision_mask = 87 script = ExtResource("1_jnw2a") Speed = 200.0 -Owner = 2 metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 32c78788..f8baa351 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=88 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=89 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"] @@ -72,6 +72,7 @@ [ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="55_chha6"] [ext_resource type="PackedScene" uid="uid://b0gpbkxdfbnjh" path="res://Scenes/Actors/ForceField_Horizontal.tscn" id="66_nxn3h"] [ext_resource type="PackedScene" uid="uid://drfkerulftqxc" path="res://Scenes/Actors/Fairy.tscn" id="72_eg6qk"] +[ext_resource type="Resource" uid="uid://bj331rcsq65es" path="res://Resources/Bullets/EmitterTestBullet.tres" id="72_uit7r"] [ext_resource type="PackedScene" uid="uid://clxx2ytg3qkcr" path="res://Scenes/Actors/FairyGuard.tscn" id="73_2st3s"] [sub_resource type="Resource" id="Resource_6sau4"] @@ -142,7 +143,7 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_7hesl"] +[sub_resource type="Resource" id="Resource_6q0m8"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") @@ -678,7 +679,7 @@ Events = Array[Object]([SubResource("Resource_068l7"), SubResource("Resource_l3n [node name="BossBattleStartScript" parent="." instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_7hesl")]) +Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_6q0m8")]) [node name="Enemy8" parent="." instance=ExtResource("47_u1ve6")] position = Vector2(-1117, 184) @@ -701,6 +702,7 @@ Target = NodePath("../BulletEmitter") [node name="BulletEmitter" parent="." instance=ExtResource("49_64oga")] position = Vector2(-728, 57) +BulletResource = ExtResource("72_uit7r") [node name="StartPosition" type="Marker2D" parent="."] position = Vector2(-808, -167) diff --git a/Scripts/Activables/BulletEmitter.cs b/Scripts/Activables/BulletEmitter.cs index 52be9d22..e30e5213 100644 --- a/Scripts/Activables/BulletEmitter.cs +++ b/Scripts/Activables/BulletEmitter.cs @@ -7,44 +7,74 @@ namespace Cirno.Scripts.Activables; public partial class BulletEmitter : Node2D, IActivable { - [Export] public BulletResource BulletResource { get; set; } [Export] - private bool _isEmitting { get; set; } = false; + public bool EmitOnStart { get; set; } = false; + + [Export] + public float EmitCoolDown { get; private set; } = 1f; [Export] public float Spread { get; set; } = 0f; + + [Export] public int Count { get; set; } = 1; [Export] public float EmissionRotation { get; set; } = 0f; private BulletSpawner _bulletSpawner; + + private bool _isEmitting = false; + + private double _emitTimer = 0f; public override void _Ready() { _bulletSpawner = GetNode("BulletSpawner"); + if (EmitOnStart) + { + _isEmitting = true; + } } + public override void _Process(double delta) + { + if (!_isEmitting) return; + _emitTimer += delta; + + if (_emitTimer >= EmitCoolDown) + { + Shoot(); + _emitTimer = 0f; + } + } + + public void Shoot() + { + _bulletSpawner.SpawnBullet(BulletResource.MakeBullet(this.GlobalPosition, Count, Spread, EmissionRotation)); + } + public void Activate(ActivationType activationType = ActivationType.Toggle) { switch (activationType) { - case ActivationType.Toggle: - break; + case ActivationType.Open: case ActivationType.Enable: - _bulletSpawner.SpawnBullet(BulletResource.MakeBullet(this.GlobalPosition, 1, Spread, EmissionRotation)); + _isEmitting = true; + _emitTimer = 0; break; + case ActivationType.Close: case ActivationType.Disable: + _isEmitting = false; + _emitTimer = 0; break; case ActivationType.Use: - _bulletSpawner.SpawnBullet(BulletResource.MakeBullet(this.GlobalPosition, 1, Spread, EmissionRotation)); + case ActivationType.Toggle: + _isEmitting = !_isEmitting; + _emitTimer = 0; break; case ActivationType.Destroy: break; - default: - throw new ArgumentOutOfRangeException(nameof(activationType), activationType, null); } - - } } \ No newline at end of file diff --git a/Scripts/Components/Actors/Actor.cs b/Scripts/Components/Actors/Actor.cs index dacd3aa0..9a641e21 100644 --- a/Scripts/Components/Actors/Actor.cs +++ b/Scripts/Components/Actors/Actor.cs @@ -5,7 +5,6 @@ using Godot; public partial class Actor : CharacterBody2D { - [Export] public float MovementSpeed { get; private set; }