really hacky radar shim

This commit is contained in:
Chris Forbes
2010-01-09 00:45:45 +13:00
parent eec36179da
commit 69b3de0a2e
4 changed files with 64 additions and 14 deletions

View File

@@ -68,7 +68,7 @@ namespace OpenRa.Game
// Positioning of chrome elements // Positioning of chrome elements
// Build palette // Build palette
paletteColumns = 4; 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; this.renderer = r;
specialBin = new Sheet(renderer, "specialbin.png"); specialBin = new Sheet(renderer, "specialbin.png");
@@ -198,9 +198,10 @@ namespace OpenRa.Game
if (hasRadar != hadRadar) if (hasRadar != hadRadar)
Sound.Play((hasRadar) ? "radaron2.aud" : "radardn1.aud"); Sound.Play((hasRadar) ? "radaron2.aud" : "radardn1.aud");
hadRadar = hasRadar; hadRadar = hasRadar;
var isJammed = false; // todo: MRJ can do this
if (hasRadar) Game.minimap.Draw(new float2(Game.viewport.Width - 247, 10), hasRadar, isJammed);
Game.minimap.Draw(new float2(Game.viewport.Width - 256, 8));
} }
void AddButton(Rectangle r, Action<bool> b) { buttons.Add(Pair.New(r, b)); } void AddButton(Rectangle r, Action<bool> b) { buttons.Add(Pair.New(r, b)); }
@@ -278,7 +279,7 @@ namespace OpenRa.Game
void DrawPower() void DrawPower()
{ {
//draw background //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(powerLevelTopSprite, powerOrigin, PaletteType.Chrome);
buildPaletteRenderer.DrawSprite(powerLevelBottomSprite, powerOrigin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome); buildPaletteRenderer.DrawSprite(powerLevelBottomSprite, powerOrigin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome);

View File

@@ -84,11 +84,12 @@ namespace OpenRa.Game
Rules.Map.InitOreDensity(); Rules.Map.InitOreDensity();
worldRenderer = new WorldRenderer(renderer); worldRenderer = new WorldRenderer(renderer);
minimap = new Minimap(renderer);
SequenceProvider.Initialize(usingAftermath); SequenceProvider.Initialize(usingAftermath);
viewport = new Viewport(clientSize, Rules.Map.Offset, Rules.Map.Offset + Rules.Map.Size, renderer); viewport = new Viewport(clientSize, Rules.Map.Offset, Rules.Map.Offset + Rules.Map.Size, renderer);
minimap = new Minimap(renderer);
BuildingInfluence = new BuildingInfluenceMap(); BuildingInfluence = new BuildingInfluenceMap();
UnitInfluence = new UnitInfluenceMap(); UnitInfluence = new UnitInfluenceMap();

View File

@@ -9,25 +9,36 @@ namespace OpenRa.Game.Graphics
{ {
Sheet sheet; Sheet sheet;
SpriteRenderer spriteRenderer; SpriteRenderer spriteRenderer;
SpriteRenderer shpRenderer;
Sprite sprite; Sprite sprite;
Bitmap terrain, oreLayer; Bitmap terrain, oreLayer;
Animation radarAnim, alliesAnim, sovietAnim;
public void Tick() { } public void Tick() { }
public Minimap(Renderer r) public Minimap(Renderer r)
{ {
sheet = new Sheet(r, new Size(128, 128)); sheet = new Sheet(r, new Size(128, 128));
shpRenderer = new SpriteRenderer(r, true);
spriteRenderer = new SpriteRenderer(r, true, r.RgbaSpriteShader); spriteRenderer = new SpriteRenderer(r, true, r.RgbaSpriteShader);
sprite = new Sprite(sheet, new Rectangle(0, 0, 128, 128), TextureChannel.Alpha); 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; Color[] terrainTypeColors;
public void InvalidateOre() { oreLayer = null; } public void InvalidateOre() { oreLayer = null; }
public void Update() public void Update()
{ {
radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim;
radarAnim.Tick();
if (terrainTypeColors == null) if (terrainTypeColors == null)
{ {
var pal = new Palette(FileSystem.Open(Rules.Map.Theater + ".pal")); var pal = new Palette(FileSystem.Open(Rules.Map.Theater + ".pal"));
@@ -87,10 +98,27 @@ namespace OpenRa.Game.Graphics
sheet.Texture.SetData(bitmap); 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)); if (hasRadar && radarAnim.CurrentSequence.Name == "idle")
spriteRenderer.Flush(); 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();
}
} }
} }
} }

View File

@@ -94,7 +94,7 @@
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="atekmake" /> <sequence name="make" start="0" length="*" src="atekmake" />
<sequence name="active" start="0" length="*" src="sputdoor" /> <sequence name="active" start="0" length="*" src="sputdoor" />
</unit> </unit>
<!-- soviet tech center --> <!-- soviet tech center -->
<unit name="stek"> <unit name="stek">
@@ -202,9 +202,9 @@
</unit> </unit>
<!-- iron curtain --> <!-- iron curtain -->
<unit name="iron"> <unit name="iron">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="active" start="0" length="11" /> <sequence name="active" start="0" length="11" />
<sequence name="damaged-idle" start="11" length="1" /> <sequence name="damaged-idle" start="11" length="1" />
<sequence name="damaged-active" start="11" length="11" /> <sequence name="damaged-active" start="11" length="11" />
<sequence name="make" start="0" length="*" src="ironmake" /> <sequence name="make" start="0" length="*" src="ironmake" />
</unit> </unit>
@@ -1031,10 +1031,30 @@
<sequence name="left-normal" start="0" length="1" /> <sequence name="left-normal" start="0" length="1" />
<sequence name="left-pressed" start="1" length="1" /> <sequence name="left-pressed" start="1" length="1" />
</unit> </unit>
<unit name="sputnik"> <sequence name="idle" start="0" length="4" /> </unit> <unit name="dd-crnr"> <sequence name="idle" start="0" length="4" /> <unit name="sputnik">
<sequence name="idle" start="0" length="4" />
</unit>
<unit name="dd-crnr">
<sequence name="idle" start="0" length="4" />
<sequence name="top-left" start="0" length="1" /> <sequence name="top-left" start="0" length="1" />
<sequence name="top-right" start="1" length="1" /> <sequence name="top-right" start="1" length="1" />
<sequence name="bottom-left" start="2" length="1" /> <sequence name="bottom-left" start="2" length="1" />
<sequence name="bottom-right" start="3" length="1" /> <sequence name="bottom-right" start="3" length="1" />
</unit> </unit>
<unit name="ussrradr">
<sequence name="idle" start="0" length="1" />
<sequence name="open" start="1" length="20" />
<sequence name="jammed" start="21" length="4" />
<sequence name="close" start="25" length="16" />
<sequence name="no-power" start="41" length="1" />
<sequence name="active" start="42" length="1" />
</unit>
<unit name="natoradr">
<sequence name="idle" start="0" length="1" />
<sequence name="open" start="1" length="20" />
<sequence name="active" start="42" length="1" />
<sequence name="jammed" start="21" length="4" />
<sequence name="close" start="25" length="16" />
<sequence name="no-power" start="41" length="1" />
</unit>
</sequences> </sequences>