diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 2966536c79..3f936ee39d 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -68,7 +68,7 @@ namespace OpenRa.Game // Positioning of chrome elements // Build palette paletteColumns = 4; - paletteOrigin = new int2(Game.viewport.Width - paletteColumns * 64 - 9 - 20, 240 - 9); + paletteOrigin = new int2(Game.viewport.Width - paletteColumns * 64 - 9 - 20, 282); this.renderer = r; specialBin = new Sheet(renderer, "specialbin.png"); @@ -198,9 +198,10 @@ namespace OpenRa.Game if (hasRadar != hadRadar) Sound.Play((hasRadar) ? "radaron2.aud" : "radardn1.aud"); hadRadar = hasRadar; + + var isJammed = false; // todo: MRJ can do this - if (hasRadar) - Game.minimap.Draw(new float2(Game.viewport.Width - 256, 8)); + Game.minimap.Draw(new float2(Game.viewport.Width - 247, 10), hasRadar, isJammed); } void AddButton(Rectangle r, Action b) { buttons.Add(Pair.New(r, b)); } @@ -278,7 +279,7 @@ namespace OpenRa.Game void DrawPower() { //draw background - float2 powerOrigin = Game.viewport.Location+new float2(Game.viewport.Width - 20, 240 - 9); + float2 powerOrigin = Game.viewport.Location + new float2(Game.viewport.Width - 20, paletteOrigin.Y); buildPaletteRenderer.DrawSprite(powerLevelTopSprite, powerOrigin, PaletteType.Chrome); buildPaletteRenderer.DrawSprite(powerLevelBottomSprite, powerOrigin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome); diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index c4b1e52605..271d636519 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -84,11 +84,12 @@ namespace OpenRa.Game Rules.Map.InitOreDensity(); worldRenderer = new WorldRenderer(renderer); - minimap = new Minimap(renderer); SequenceProvider.Initialize(usingAftermath); viewport = new Viewport(clientSize, Rules.Map.Offset, Rules.Map.Offset + Rules.Map.Size, renderer); + minimap = new Minimap(renderer); + BuildingInfluence = new BuildingInfluenceMap(); UnitInfluence = new UnitInfluenceMap(); diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index c9a12c6825..7aa060aac5 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -9,25 +9,36 @@ namespace OpenRa.Game.Graphics { Sheet sheet; SpriteRenderer spriteRenderer; + SpriteRenderer shpRenderer; Sprite sprite; Bitmap terrain, oreLayer; + Animation radarAnim, alliesAnim, sovietAnim; public void Tick() { } public Minimap(Renderer r) { sheet = new Sheet(r, new Size(128, 128)); + shpRenderer = new SpriteRenderer(r, true); spriteRenderer = new SpriteRenderer(r, true, r.RgbaSpriteShader); sprite = new Sprite(sheet, new Rectangle(0, 0, 128, 128), TextureChannel.Alpha); + + sovietAnim = new Animation("ussrradr"); + sovietAnim.PlayRepeating("idle"); + alliesAnim = new Animation("natoradr"); + alliesAnim.PlayRepeating("idle"); + radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim; } - // todo: extract these from the palette Color[] terrainTypeColors; public void InvalidateOre() { oreLayer = null; } public void Update() { + radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim; + radarAnim.Tick(); + if (terrainTypeColors == null) { var pal = new Palette(FileSystem.Open(Rules.Map.Theater + ".pal")); @@ -87,10 +98,27 @@ namespace OpenRa.Game.Graphics sheet.Texture.SetData(bitmap); } - public void Draw(float2 pos) + public void Draw(float2 pos, bool hasRadar, bool isJammed) { - spriteRenderer.DrawSprite(sprite, pos, PaletteType.Chrome, new float2(256,256)); - spriteRenderer.Flush(); + if (hasRadar && radarAnim.CurrentSequence.Name == "idle") + radarAnim.PlayThen("open", () => radarAnim.PlayRepeating("active")); + if (hasRadar && radarAnim.CurrentSequence.Name == "no-power") + radarAnim.PlayBackwardsThen("close", () => radarAnim.PlayRepeating("active")); + if (!hasRadar && radarAnim.CurrentSequence.Name == "active") + radarAnim.PlayThen("close", () => radarAnim.PlayRepeating("no-power")); + if (isJammed && radarAnim.CurrentSequence.Name == "active") + radarAnim.PlayRepeating("jammed"); + if (!isJammed && radarAnim.CurrentSequence.Name == "jammed") + radarAnim.PlayRepeating("active"); + + shpRenderer.DrawSprite(radarAnim.Image, pos + Game.viewport.Location - new float2( 290-256,0), PaletteType.Chrome, new float2(290, 272)); + shpRenderer.Flush(); + + if (radarAnim.CurrentSequence.Name == "active") + { + spriteRenderer.DrawSprite(sprite, pos - new float2((290-256)/2, -5), PaletteType.Chrome, new float2(256, 256)); + spriteRenderer.Flush(); + } } } } diff --git a/sequences.xml b/sequences.xml index cd8b326b66..135736bbcc 100644 --- a/sequences.xml +++ b/sequences.xml @@ -94,7 +94,7 @@ - + @@ -202,9 +202,9 @@ - - - + + + @@ -1031,10 +1031,30 @@ - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file