mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-14 22:13:47 +00:00
Moved weapons to their own scene
This commit is contained in:
parent
7ebbc207e6
commit
34e0603170
6 changed files with 159 additions and 62 deletions
84
Scripts/Weapon.cs
Normal file
84
Scripts/Weapon.cs
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
using Godot;
|
||||
using System;
|
||||
using Cirno.Scripts;
|
||||
|
||||
public partial class Weapon : Node2D
|
||||
{
|
||||
|
||||
[Export]
|
||||
public PackedScene BulletScene { get; set; }
|
||||
|
||||
[Export]
|
||||
public Marker2D Muzzle { get; set; }
|
||||
|
||||
[Export] public double RateOfFire = 0.4f;
|
||||
|
||||
[Export] public int BulletCapacity = 20;
|
||||
|
||||
[Export] public double ReloadTime = 1.0f;
|
||||
|
||||
[Export] public float BulletSpeed = 100f;
|
||||
|
||||
[Export] public bool AutoReload = true;
|
||||
|
||||
[Export] public bool InfiniteAmmo = true;
|
||||
public int Ammo { get; set; } = 0;
|
||||
|
||||
public int LoadedAmmo { get; private set; }
|
||||
|
||||
public Vector2 ShootDirection { get; set; } = Vector2.Zero;
|
||||
|
||||
private Timer _cooldownTimer;
|
||||
|
||||
private Marker2D _muzzle;
|
||||
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
_muzzle = GetNode<Marker2D>("./Muzzle");
|
||||
_cooldownTimer = GetNode<Timer>("./ShootTimer");
|
||||
}
|
||||
|
||||
public void Reload()
|
||||
{
|
||||
_cooldownTimer.Start(ReloadTime);
|
||||
|
||||
if (InfiniteAmmo)
|
||||
{
|
||||
LoadedAmmo = BulletCapacity;
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: Calculate subtraction, etc
|
||||
LoadedAmmo = BulletCapacity;
|
||||
}
|
||||
}
|
||||
|
||||
public void Shoot()
|
||||
{
|
||||
// Waiting on reload or Rate of Fire cooldown?
|
||||
if (!_cooldownTimer.IsStopped())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Out of ammo?
|
||||
if (LoadedAmmo <= 0)
|
||||
{
|
||||
if (AutoReload)
|
||||
{
|
||||
Reload();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Shoot at muzzle position, need to provide a way to turn it, on a radius?
|
||||
var bullet = this.CreateChild<Bullet>(BulletScene);
|
||||
bullet.SetDirection(ShootDirection);
|
||||
bullet.Speed = BulletSpeed;
|
||||
|
||||
LoadedAmmo -= 1;
|
||||
|
||||
_cooldownTimer.Start(RateOfFire);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue