Radar animation can be interrupted without fail
This commit is contained in:
@@ -58,21 +58,18 @@ namespace OpenRa.Game
|
|||||||
static float2 radarOpenOrigin = new float2(Game.viewport.Width - 215, 29);
|
static float2 radarOpenOrigin = new float2(Game.viewport.Width - 215, 29);
|
||||||
static float2 radarClosedOrigin = new float2(Game.viewport.Width - 215, -166);
|
static float2 radarClosedOrigin = new float2(Game.viewport.Width - 215, -166);
|
||||||
float2 radarOrigin;
|
float2 radarOrigin;
|
||||||
float radarActivateHeight;
|
float radarMinimapHeight;
|
||||||
const int radarSlideAnimationLength = 15;
|
const int radarSlideAnimationLength = 15;
|
||||||
int radarSlideAnimationFrame = 0;
|
|
||||||
bool radarSlideAnimating = false;
|
|
||||||
|
|
||||||
const int radarActivateAnimationLength = 5;
|
const int radarActivateAnimationLength = 5;
|
||||||
int radarActivateAnimationFrame = 0;
|
int radarAnimationFrame = 0;
|
||||||
bool radarActivateAnimating = false;
|
bool radarAnimating = false;
|
||||||
|
|
||||||
// Power bar positioning (relative to Radar)
|
// Power bar positioning (relative to Radar)
|
||||||
static float2 powerOrigin = new float2(42, 205);
|
static float2 powerOrigin = new float2(42, 205);
|
||||||
static Size powerSize = new Size(138,5);
|
static Size powerSize = new Size(138,5);
|
||||||
|
|
||||||
|
|
||||||
bool hadRadar = false;
|
bool hasRadar = false;
|
||||||
bool optionsPressed = false;
|
bool optionsPressed = false;
|
||||||
|
|
||||||
|
|
||||||
@@ -169,43 +166,37 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
public void Tick()
|
public void Tick()
|
||||||
{
|
{
|
||||||
if (radarSlideAnimating)
|
Log.Write("({0},{1})",radarOrigin, radarMinimapHeight);
|
||||||
|
if (!radarAnimating)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Increment frame
|
||||||
|
if (hasRadar)
|
||||||
|
radarAnimationFrame++;
|
||||||
|
else
|
||||||
|
radarAnimationFrame--;
|
||||||
|
|
||||||
|
// Calculate radar bin position
|
||||||
|
if (radarAnimationFrame <= radarSlideAnimationLength)
|
||||||
|
radarOrigin = float2.Lerp(radarClosedOrigin, radarOpenOrigin, radarAnimationFrame * 1.0f / radarSlideAnimationLength);
|
||||||
|
|
||||||
|
// Play radar-on sound at the start of the activate anim (open)
|
||||||
|
if (radarAnimationFrame == radarSlideAnimationLength && hasRadar)
|
||||||
|
Sound.Play("radaron2.aud");
|
||||||
|
|
||||||
|
// Play radar-on sound at the start of the activate anim (close)
|
||||||
|
if (radarAnimationFrame == radarSlideAnimationLength + radarActivateAnimationLength && !hasRadar)
|
||||||
|
Sound.Play("radardn1.aud");
|
||||||
|
|
||||||
|
// Minimap height
|
||||||
|
if (radarAnimationFrame >= radarSlideAnimationLength)
|
||||||
|
radarMinimapHeight = float2.Lerp(0, 192, (radarAnimationFrame - radarSlideAnimationLength) * 1.0f / radarActivateAnimationLength);
|
||||||
|
|
||||||
|
// Animation is complete
|
||||||
|
if ((radarAnimationFrame == 0 && !hasRadar)
|
||||||
|
|| (radarAnimationFrame == radarSlideAnimationLength + radarActivateAnimationLength && hasRadar))
|
||||||
{
|
{
|
||||||
var oldOrigin = (hadRadar) ? radarClosedOrigin : radarOpenOrigin;
|
radarAnimating = false;
|
||||||
var newOrigin = (hadRadar) ? radarOpenOrigin : radarClosedOrigin;
|
|
||||||
|
|
||||||
radarOrigin = float2.Lerp(oldOrigin, newOrigin, radarSlideAnimationFrame*1.0f/radarSlideAnimationLength);
|
|
||||||
|
|
||||||
if (radarSlideAnimationFrame == radarSlideAnimationLength)
|
|
||||||
{
|
|
||||||
radarSlideAnimationFrame = 0;
|
|
||||||
radarSlideAnimating = false;
|
|
||||||
if (hadRadar)
|
|
||||||
{
|
|
||||||
radarActivateAnimating = true;
|
|
||||||
Sound.Play("radaron2.aud");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
radarSlideAnimationFrame++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (radarActivateAnimating)
|
|
||||||
{
|
|
||||||
float oldHeight = (hadRadar) ? 0 : 192;
|
|
||||||
float newHeight = (hadRadar) ? 192 : 0;
|
|
||||||
|
|
||||||
radarActivateHeight = float2.Lerp(oldHeight, newHeight, radarActivateAnimationFrame * 1.0f / radarActivateAnimationLength);
|
|
||||||
|
|
||||||
if (radarActivateAnimationFrame == radarActivateAnimationLength)
|
|
||||||
{
|
|
||||||
radarActivateAnimationFrame = 0;
|
|
||||||
radarActivateAnimating = false;
|
|
||||||
if (!hadRadar)
|
|
||||||
radarSlideAnimating = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
radarActivateAnimationFrame++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,34 +231,29 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
void DrawRadar()
|
void DrawRadar()
|
||||||
{
|
{
|
||||||
var hasRadar = Game.world.Actors.Any(a => a.Owner == Game.LocalPlayer
|
var hasNewRadar = Game.world.Actors.Any(a => a.Owner == Game.LocalPlayer
|
||||||
&& a.traits.Contains<ProvidesRadar>()
|
&& a.traits.Contains<ProvidesRadar>()
|
||||||
&& a.traits.Get<ProvidesRadar>().IsActive());
|
&& a.traits.Get<ProvidesRadar>().IsActive());
|
||||||
|
|
||||||
if (hasRadar != hadRadar)
|
if (hasNewRadar != hasRadar)
|
||||||
{
|
{
|
||||||
if (hadRadar)
|
radarAnimating = true;
|
||||||
{
|
|
||||||
radarActivateAnimating = true;
|
|
||||||
Sound.Play("radardn1.aud");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
radarSlideAnimating = true;
|
|
||||||
}
|
}
|
||||||
hadRadar = hasRadar;
|
|
||||||
|
hasRadar = hasNewRadar;
|
||||||
|
|
||||||
var isJammed = false; // todo: MRJ can do this
|
var isJammed = false; // todo: MRJ can do this
|
||||||
|
|
||||||
var bgSprite = SequenceProvider.GetImageFromCollection(renderer, "radar", "nobg");
|
var bgSprite = SequenceProvider.GetImageFromCollection(renderer, "radar", "nobg");
|
||||||
if (radarSlideAnimating || radarActivateAnimating)
|
if (radarAnimating)
|
||||||
bgSprite = (Game.LocalPlayer.Race == Race.Allies) ? SequenceProvider.GetImageFromCollection(renderer, "radar", "allied") : SequenceProvider.GetImageFromCollection(renderer, "radar", "soviet");
|
bgSprite = (Game.LocalPlayer.Race == Race.Allies) ? SequenceProvider.GetImageFromCollection(renderer, "radar", "allied") : SequenceProvider.GetImageFromCollection(renderer, "radar", "soviet");
|
||||||
|
|
||||||
rgbaRenderer.DrawSprite(bgSprite, radarOrigin, PaletteType.Chrome);
|
rgbaRenderer.DrawSprite(bgSprite, radarOrigin, PaletteType.Chrome);
|
||||||
rgbaRenderer.Flush();
|
rgbaRenderer.Flush();
|
||||||
|
|
||||||
if ((hasRadar && !radarSlideAnimating) || radarActivateAnimating)
|
if (radarAnimationFrame >= radarSlideAnimationLength)
|
||||||
{
|
{
|
||||||
RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y+(192-radarActivateHeight)/2, 192, radarActivateHeight);
|
RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y+(192-radarMinimapHeight)/2, 192, radarMinimapHeight);
|
||||||
Game.minimap.Draw(mapRect, hasRadar, isJammed);
|
Game.minimap.Draw(mapRect, hasRadar, isJammed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user