First implementation of 3d radar
This commit is contained in:
+54
-3
@@ -16,15 +16,20 @@ namespace EvilSatellites
|
||||
public IGameObject Owner;
|
||||
public IGameObject Target;
|
||||
public IScreen Screen;
|
||||
public ISoundEffect RadarNoise;
|
||||
public ISoundEffect3D RadarNoise;
|
||||
public ObjectType Filter;
|
||||
public Vector3 RadarDirection;
|
||||
public Vector3 RadarPosition;
|
||||
public bool IsPlaying;
|
||||
public Vector3 RadarTarget;
|
||||
public Radar(IGameObject owner, IScreen screen)
|
||||
{
|
||||
Owner = owner;
|
||||
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;
|
||||
Filter = ObjectType.Satellite;
|
||||
|
||||
Active = false;
|
||||
}
|
||||
|
||||
@@ -46,7 +51,7 @@ namespace EvilSatellites
|
||||
Active = false;
|
||||
}
|
||||
|
||||
public void Update(List<IGameObject> objects)
|
||||
public void UpdateX(List<IGameObject> objects)
|
||||
{
|
||||
if (objects.Count < 1) return;
|
||||
float minDistance = 50000000;
|
||||
@@ -70,5 +75,51 @@ namespace EvilSatellites
|
||||
radarTarget.Normalize();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user