Add audio and particle services, update GamePresenter for game state management
This commit is contained in:
16
Code/Services/GodotAudioService.cs
Normal file
16
Code/Services/GodotAudioService.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using GameCore.Math;
|
||||
using GameCore.Services;
|
||||
|
||||
namespace CryptonymThunder.Code.Services;
|
||||
|
||||
public class GodotAudioService : IAudioService
|
||||
{
|
||||
public void Play(string soundId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void PlayAtPoint(string soundId, Vector3 position)
|
||||
{
|
||||
}
|
||||
}
|
||||
15
Code/Services/GodotParticleService.cs
Normal file
15
Code/Services/GodotParticleService.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using GameCore.Math;
|
||||
using GameCore.Services;
|
||||
|
||||
namespace CryptonymThunder.Code.Services;
|
||||
|
||||
public class GodotParticleService : IParticleService
|
||||
{
|
||||
public void Trigger(string particleId, Vector3 position)
|
||||
{
|
||||
}
|
||||
|
||||
public void Trigger(string particleId, Vector3 position, Vector3 normal)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using CryptonymThunder.Code.Autoloads;
|
||||
using CryptonymThunder.Code.Extensions;
|
||||
using CryptonymThunder.Code.Presenters;
|
||||
@@ -58,4 +59,46 @@ public class GodotWorldQuery(GamePresenter ownerNode) : IWorldQuery
|
||||
var rotatedZ = -vector.X * (float)Math.Sin(yawRadians) + vector.Z * (float)Math.Cos(yawRadians);
|
||||
return new Vector3(rotatedX, vector.Y, rotatedZ);
|
||||
}
|
||||
|
||||
public IEnumerable<Entity> OverlapSphere(Vector3 position, float radius, Entity? ownerToExclude = null)
|
||||
{
|
||||
var spaceState = _godotWorld.DirectSpaceState;
|
||||
var query = new PhysicsShapeQueryParameters3D();
|
||||
|
||||
var sphere = new SphereShape3D();
|
||||
sphere.Radius = radius;
|
||||
query.Shape = sphere;
|
||||
|
||||
query.Transform = new Transform3D(Basis.Identity, position.ToGodot());
|
||||
|
||||
query.CollisionMask = 1;
|
||||
query.CollideWithBodies = true;
|
||||
query.CollideWithAreas = false;
|
||||
|
||||
if (ownerToExclude.HasValue)
|
||||
{
|
||||
var ownerPresenter = ownerNode.GetPresenterNode(ownerToExclude.Value);
|
||||
if (ownerPresenter != null)
|
||||
{
|
||||
query.Exclude = [((PhysicsBody3D)ownerPresenter).GetRid()];
|
||||
}
|
||||
}
|
||||
|
||||
var results = spaceState.IntersectShape(query);
|
||||
if (results.Count == 0)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
foreach (var result in results)
|
||||
{
|
||||
if (result["collider"].Obj is Node3D collider)
|
||||
{
|
||||
if (_presenterRegistry.TryGetEntity(collider.GetInstanceId(), out var hitEntity))
|
||||
{
|
||||
yield return hitEntity;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user