public void DrawUnitMap(CustomSpriteBatch g, Color PlayerColor, UnitMapComponent ActiveSquad, bool IsGreyed) { //If it's dead, don't draw it. if (!ActiveSquad.IsActive) { return; } float PosZ = ActiveSquad.Z; if (Map.MovementAnimation.Contains(ActiveSquad)) { int IndexOfUnit = Map.MovementAnimation.IndexOf(ActiveSquad); float PosX = (Map.MovementAnimation.ListPosX[IndexOfUnit] - CameraPosition.X) * TileSize.X; float PosY = (Map.MovementAnimation.ListPosY[IndexOfUnit] - CameraPosition.Y) * TileSize.Y; if (ActiveSquad.IsFlying) { g.Draw(Map.sprUnitHover, new Vector2(PosX, PosY), Color.White); PosY -= 7; } ActiveSquad.Draw2DOnMap(g, new Vector3(PosX, PosY, PosZ), Color.White); g.End(); g.Begin(SpriteSortMode.Immediate, BlendState.Additive); ActiveSquad.Draw2DOnMap(g, new Vector3(PosX, PosY, PosZ), Color.White); g.End(); g.Begin(); } else { Color UnitColor; if (Constants.UnitRepresentationState == Constants.UnitRepresentationStates.Colored) { UnitColor = PlayerColor; } else { UnitColor = Color.White; } float PosX = (ActiveSquad.X - CameraPosition.X) * TileSize.X; float PosY = (ActiveSquad.Y - CameraPosition.Y) * TileSize.Y; if (ActiveSquad.IsFlying) { g.Draw(Map.sprUnitHover, new Vector2(PosX, PosY), Color.White); PosY -= 7; } if (Constants.UnitRepresentationState == Constants.UnitRepresentationStates.NonColoredWithBorder) { Vector2 TextureRealSize = new Vector2(ActiveSquad.Width, ActiveSquad.Height); Vector2 TextureOuputSize = new Vector2(TextureRealSize.X + 2, TextureRealSize.Y + 2); Vector2 PixelSize = new Vector2(1 / TextureOuputSize.X, 1 / TextureOuputSize.Y); Vector2 TextureScale = TextureOuputSize / TextureRealSize; Map.fxOutline.Parameters["TextureScale"].SetValue(TextureScale); Map.fxOutline.Parameters["OffsetScale"].SetValue(PixelSize * TextureScale); g.End(); g.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullNone, Map.fxOutline); ActiveSquad.Draw2DOnMap(g, new Vector3(PosX - 1, PosY - 1, PosZ), (int)TextureOuputSize.X, (int)TextureOuputSize.Y, PlayerColor); g.End(); g.Begin(); } //Unit can't move, grayed. if (IsGreyed) { g.End(); g.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullNone, Map.fxGrayscale); ActiveSquad.Draw2DOnMap(g, new Vector3(PosX, PosY, PosZ), Color.White); g.End(); g.Begin(); if (Constants.UnitRepresentationState == Constants.UnitRepresentationStates.Colored) { ActiveSquad.Draw2DOnMap(g, new Vector3(PosX, PosY, PosZ), Color.FromNonPremultiplied(UnitColor.R, UnitColor.G, UnitColor.B, 140)); } } else { ActiveSquad.Draw2DOnMap(g, new Vector3(PosX, PosY, PosZ), UnitColor); } ActiveSquad.DrawExtraOnMap(g, new Vector3(PosX, PosY, PosZ), Color.White); } }