3D Boss scripts implementation

This commit is contained in:
Marco 2025-06-30 17:28:19 +02:00
commit dbf7f1a963
29 changed files with 1805 additions and 1188 deletions

View file

@ -3,6 +3,7 @@ using System.Linq;
using Cirno.Scripts.Components;
using Cirno.Scripts.Controllers;
using Cirno.Scripts.Resources;
using Cirno.Scripts.Utils;
using Godot;
namespace Cirno.Scripts.Weapons;
@ -31,6 +32,8 @@ public partial class Bullet3D : Area3D, IBullet
public bool IsFrozen { get; private set; } = false;
public bool Enabled { get; private set; } = false;
public float SpriteRotation { get; private set; } = 0f;
[Signal]
public delegate void OnDestroyEventHandler();
@ -120,26 +123,26 @@ public partial class Bullet3D : Area3D, IBullet
private void ApplyTimeModifiers(double delta)
{
return;
// foreach (var modifier in _modifiers)
// {
// if (_elapsedTime >= modifier.TimeModifier.TimeInSeconds)
// {
// if (!modifier.Applied)
// {
// modifier.Applied = true;
// modifier.TimeModifier.Start(this);
// modifier.Elapsed = 0;
// }
// else
// {
// modifier.Elapsed += delta;
// }
//
// modifier.TimeModifier.Update(this, delta, modifier.Elapsed);
//
// }
// }
foreach (var modifier in _modifiers)
{
if (_elapsedTime >= modifier.TimeModifier.TimeInSeconds)
{
if (!modifier.Applied)
{
modifier.Applied = true;
modifier.TimeModifier.Start(this);
modifier.Elapsed = 0;
}
else
{
modifier.Elapsed += delta;
}
modifier.TimeModifier.Update(this, delta, modifier.Elapsed);
}
}
}
public virtual void RotateBullet(float degrees)
@ -148,29 +151,43 @@ public partial class Bullet3D : Area3D, IBullet
_direction = _direction.Rotated(radians).Normalized(); // Rotate direction
if (!BulletInfo.Attributes.HasFlag(BulletFlags.Rotateable)) return;
RotateSprite(SpriteRotation + radians);
//SetRotation(Rotation + radians);
}
public virtual void RotateSpriteDegrees(float degrees)
{
if (!BulletInfo.Attributes.HasFlag(BulletFlags.Rotateable)) return;
SpriteRotation = Mathf.DegToRad(Mathf.RadToDeg(SpriteRotation) + degrees);
//SetRotationDegrees(RotationDegrees + degrees);
}
public virtual void RotateSprite(float radians)
{
if (!BulletInfo.Attributes.HasFlag(BulletFlags.Rotateable)) return;
SpriteRotation += radians;
Vector3 axis = Basis.FromEuler(new Vector3(
Mathf.DegToRad(-45f),
Mathf.DegToRad(45f),
0f
)).Z;
Rotate(axis, radians);
//SetRotation(Rotation + radians);
}
public void FacePlayer()
{
// if (_gameManager.Player != null)
// {
// //_direction = (_gameManager.PlayerPosition.Value - this.GlobalPosition).Normalized();
// RotateBullet(0); // quick hack to rotate lasers
// //LookAt(player.GlobalPosition);
// }
if (GameController.Instance.PlayerPosition.HasValue)
{
_direction = (GameController.Instance.PlayerPosition.Value.ToVector2() - this.GlobalPosition.ToVector2()).Normalized();
RotateBullet(0); // quick hack to rotate lasers
//LookAt(player.GlobalPosition);
}
}