Bullet emitter

This commit is contained in:
Marco 2025-02-23 20:00:01 +01:00
commit 54c8199e8a
7 changed files with 75 additions and 32 deletions

View file

@ -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]([])

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -5,7 +5,6 @@ using Godot;
public partial class Actor : CharacterBody2D
{
[Export]
public float MovementSpeed { get; private set; }