diff --git a/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 b/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 index 58e9600..81c69e1 100644 Binary files a/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 and b/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/EvilSatellites/v16/.suo b/.vs/EvilSatellites/v16/.suo index 0dcd09a..a18b445 100644 Binary files a/.vs/EvilSatellites/v16/.suo and b/.vs/EvilSatellites/v16/.suo differ diff --git a/EvilSatellites/Radar.cs b/EvilSatellites/Radar.cs index 77edaef..8f87568 100644 --- a/EvilSatellites/Radar.cs +++ b/EvilSatellites/Radar.cs @@ -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 objects) + public void UpdateX(List 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 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); + } + } + } }