3D Cameras with sweep and animation

This commit is contained in:
Marco 2025-06-27 15:06:33 +02:00
commit 7e76edc153
48 changed files with 3211 additions and 1511 deletions

View file

@ -0,0 +1,27 @@
using Godot;
namespace Cirno.Scripts.Actors._3D;
public partial class AlarmSoundPlayer3D : AudioStreamPlayer3D
{
public override void _Ready()
{
if (AlarmManager.Instance is not null)
{
this.Stream = AlarmManager.Instance.AlarmSound;
AlarmManager.Instance.AlarmEnabled3D += InstanceOnAlarmEnabled3D;
AlarmManager.Instance.AlarmDisabled += InstanceOnAlarmDisabled;
}
}
private void InstanceOnAlarmDisabled()
{
this.Stop();
}
private void InstanceOnAlarmEnabled3D(Vector3 location)
{
this.Play();
}
}

View file

@ -0,0 +1 @@
uid://0g2sdu48c2x8

View file

@ -0,0 +1,24 @@
using Godot;
namespace Cirno.Scripts.Actors._3D;
public partial class SecurityCamera3D : Destructible3D
{
[Export] public StringName SweepAnimation { get; private set; } = "SweepLoop";
[Signal]
public delegate void AnimationStartEventHandler(string animationName);
public override void _Ready()
{
if (Engine.IsEditorHint()) return;
EmitSignalAnimationStart(SweepAnimation);
}
public void OnBodySighted(Node3D body)
{
if (Engine.IsEditorHint()) return;
GD.Print($"{body.Name} Sighted!");
AlarmManager.Instance?.SoundAlarm(this.GlobalPosition);
}
}

View file

@ -0,0 +1 @@
uid://dg3aho2ulfngs

View file

@ -74,42 +74,6 @@ public partial class Destructible3D : StaticBody3D, IDestructible
explosion.Initialize(ExplosionData.MakeBullet(new Vector2(this.GlobalPosition.X, this.GlobalPosition.Y)));
}
// private void ApplyExplosionDamage()
// {
// var spaceState = GetWorld2D().DirectSpaceState;
// var query = new PhysicsShapeQueryParameters2D();
// var shape = new CircleShape2D { Radius = ExplosionRadius };
//
// query.SetShape(shape);
// query.Transform = new Transform2D(0, GlobalPosition);
// query.CollideWithBodies = false;
// query.CollideWithAreas = true;
// //query.CollisionMask = ;
//
// var results = spaceState.IntersectShape(query);
//
// GD.Print($"Shapes in range: {results.Count}");
//
// foreach (var result in results)
// {
// if (result.TryGetValue("collider", out var colliderObj))
// {
//
// var collider = colliderObj.As<Node2D>();
//
//
// if (collider.GetParent<Area2D>() is IDestructible destructible)
// {
// GD.Print($"HITTING {collider.Name}");
// destructible.Hit(ExplosionDamage);
// }
// else {
// GD.Print($"Collider {collider.Name} was not idestructible");
// }
// }
// }
// }
private void CreateDebris()
{
if (DebrisScene == null) return;