First implementation of 3d radar

This commit is contained in:
2021-04-20 15:57:44 +02:00
parent 85707b2619
commit 246b4d1f46
3 changed files with 54 additions and 3 deletions
Binary file not shown.
Binary file not shown.
+54 -3
View File
@@ -16,15 +16,20 @@ namespace EvilSatellites
public IGameObject Owner; public IGameObject Owner;
public IGameObject Target; public IGameObject Target;
public IScreen Screen; public IScreen Screen;
public ISoundEffect RadarNoise; public ISoundEffect3D RadarNoise;
public ObjectType Filter; public ObjectType Filter;
public Vector3 RadarDirection;
public Vector3 RadarPosition;
public bool IsPlaying;
public Vector3 RadarTarget;
public Radar(IGameObject owner, IScreen screen) public Radar(IGameObject owner, IScreen screen)
{ {
Owner = owner; Owner = owner;
Screen = screen; Screen = screen;
RadarNoise = Screen.Manager.Sound.Load(@"sfx/ui/radar/pingEnemy.wav", false); RadarNoise = Screen.Manager.Sound.Load3D(@"sfx/ui/radar/pingEnemy.wav");
RadarNoise.Loop = true; RadarNoise.Loop = true;
Filter = ObjectType.Satellite; Filter = ObjectType.Satellite;
Active = false; Active = false;
} }
@@ -46,7 +51,7 @@ namespace EvilSatellites
Active = false; Active = false;
} }
public void Update(List<IGameObject> objects) public void UpdateX(List<IGameObject> objects)
{ {
if (objects.Count < 1) return; if (objects.Count < 1) return;
float minDistance = 50000000; float minDistance = 50000000;
@@ -70,5 +75,51 @@ namespace EvilSatellites
radarTarget.Normalize(); radarTarget.Normalize();
RadarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(Owner.Rotation.Forward, radarTarget) * 3f, 0, 1); RadarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(Owner.Rotation.Forward, radarTarget) * 3f, 0, 1);
} }
public void Update(List<IGameObject> objects)
{
if (IsPlaying)
{
RadarPosition += RadarDirection;
RadarNoise.Position = new System.Numerics.Vector3(RadarPosition.X, RadarPosition.Y, RadarPosition.Z);
RadarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(Owner.Rotation.Forward, RadarTarget) * 3f, 0, 2);
if (Vector3.Distance(RadarPosition, Owner.Position) > 20)
{
IsPlaying = false;
}
} else
{
if (objects.Count < 1) return;
float minDistance = 50000000;
Target = null;
foreach (var obj in objects)
{
if (obj.Type != Filter) continue;
float distance = Vector3.Distance(obj.Position, Owner.Position);
if (distance < minDistance)
{
minDistance = distance;
Target = obj;
}
}
if (Target == null)
{
// RadarNoise.Pitch = 0.1;
return;
}
Vector3 radarTarget = (Target.Position - Owner.Position);
radarTarget.Normalize();
RadarTarget = radarTarget;
RadarPosition = new Vector3(Owner.Position.X+Owner.Dimensions.X/2, Owner.Position.Y+Owner.Dimensions.Y/2, Owner.Position.Z+Owner.Dimensions.Z/2);
RadarDirection = new Vector3(radarTarget.X*0.5f, radarTarget.Y*0.5f, radarTarget.Z*0.5f);
RadarNoise.Reset();
// RadarNoise.Play();
IsPlaying = true;
// RadarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(Owner.Rotation.Forward, radarTarget) * 3f, 0, 1);
}
}
} }
} }