Fix most of the player color regressions

This commit is contained in:
Paul Chote
2010-02-04 23:54:16 +13:00
parent 6c99b33364
commit 2a7f52edc7
7 changed files with 69 additions and 47 deletions

View File

@@ -58,13 +58,16 @@ namespace OpenRA.Server
throw new InvalidOperationException("Already got 8 players"); throw new InvalidOperationException("Already got 8 players");
} }
static string ChooseFreePalette() static int ChooseFreePalette()
{ {
// TODO: FIX // TODO: Query the list of palettes from somewhere, and pick one
return 0;
/*
for (var i = 0; i < 8; i++) for (var i = 0; i < 8; i++)
//if (lobbyInfo.Clients.All(c => c.Palette != i)) if (lobbyInfo.Clients.All(c => c.Palette != i))
return "player"+i; return "player"+i;
*/
throw new InvalidOperationException("No free palettes"); throw new InvalidOperationException("No free palettes");
} }
@@ -86,7 +89,7 @@ namespace OpenRA.Server
new Session.Client() new Session.Client()
{ {
Index = newConn.PlayerIndex, Index = newConn.PlayerIndex,
Palette = ChooseFreePalette(), PaletteIndex = ChooseFreePalette(),
Name = "Player {0}".F(1 + newConn.PlayerIndex), Name = "Player {0}".F(1 + newConn.PlayerIndex),
Race = 1, Race = 1,
State = Session.ClientState.NotReady State = Session.ClientState.NotReady
@@ -255,15 +258,14 @@ namespace OpenRA.Server
Console.WriteLine("Invalid palette: {0}", s); Console.WriteLine("Invalid palette: {0}", s);
return false; return false;
} }
string pal = "player"+pali;
if (lobbyInfo.Clients.Where( c => c != GetClient(conn) ).Any( c => c.PaletteIndex == pali ))
if (lobbyInfo.Clients.Where( c => c != GetClient(conn) ).Any( c => c.Palette == pal ))
{ {
SendChatTo( conn, "You can't be the same color as another player" ); SendChatTo( conn, "You can't be the same color as another player" );
return true; return true;
} }
GetClient(conn).Palette = pal; GetClient(conn).PaletteIndex = pali;
SyncLobbyInfo(); SyncLobbyInfo();
return true; return true;
}}, }},

View File

@@ -20,7 +20,7 @@ namespace OpenRa.FileFormats
public class Client public class Client
{ {
public int Index; public int Index;
public string Palette; public int PaletteIndex;
public int Race; public int Race;
// public int SpawnPoint; // public int SpawnPoint;
public string Name; public string Name;

View File

@@ -350,18 +350,17 @@ namespace OpenRa
AddButton(r, _ => { }); AddButton(r, _ => { });
} }
bool PaletteAvailable(string palette) { return Game.LobbyInfo.Clients.All(c => c.Palette != palette); } bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index); }
void CyclePalette(bool left) void CyclePalette(bool left)
{ {
var d = left ? 1 : 7; var d = left ? +1 : Player.PlayerColors.Count() - 1;
// TODO: FIX
var newpalette = 1;//((int)Game.world.LocalPlayer.Palette + d) % 8; var newIndex = ((int)Game.world.LocalPlayer.PaletteIndex + d) % Player.PlayerColors.Count();
//while (!PaletteAvailable(newpalette) && newpalette != (int)Game.world.LocalPlayer.Palette) while (!PaletteAvailable(newIndex) && newIndex != (int)Game.world.LocalPlayer.PaletteIndex)
// newpalette = (newpalette + d) % 8; newIndex = (newIndex + d) % Player.PlayerColors.Count();
Game.IssueOrder( Game.IssueOrder(
Order.Chat("/pal " + newpalette)); Order.Chat("/pal " + newIndex));
} }
void CycleRace(bool left) void CycleRace(bool left)
@@ -446,8 +445,9 @@ namespace OpenRa
DrawDialogBackground(paletteRect, panelSprites, false); DrawDialogBackground(paletteRect, panelSprites, false);
AddButton(paletteRect, CyclePalette); AddButton(paletteRect, CyclePalette);
// TODO: Render using the System.Drawing.Color (Player.PlayerColors[client.PaletteIndex].c)
shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4), shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4),
client.Palette); Player.PlayerColors[client.PaletteIndex].a);
var raceRect = new Rectangle(r.Left + 290, y - 2, 65, 22); var raceRect = new Rectangle(r.Left + 290, y - 2, 65, 22);
DrawDialogBackground(raceRect, panelSprites, false); DrawDialogBackground(raceRect, panelSprites, false);
@@ -462,9 +462,9 @@ namespace OpenRa
renderer.DrawText(client.Name, new int2(r.Left + 40, y), Color.White); renderer.DrawText(client.Name, new int2(r.Left + 40, y), Color.White);
// TODO: Render using Player.PlayerColors[client.PaletteIndex].c
shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4), shpRenderer.DrawSprite(colorBlock, new float2(paletteRect.Left + 4, paletteRect.Top + 4),
client.Palette); Player.PlayerColors[client.PaletteIndex].a);
renderer.DrawText(((Race)client.Race).ToString(), new int2(r.Left + 300, y), Color.White); renderer.DrawText(((Race)client.Race).ToString(), new int2(r.Left + 300, y), Color.White);
renderer.DrawText(client.State.ToString(), new int2(r.Left + 370, y), Color.White); renderer.DrawText(client.State.ToString(), new int2(r.Left + 370, y), Color.White);

View File

@@ -32,7 +32,6 @@ namespace OpenRa.Graphics
Log.Write("Created worldrenderer"); Log.Write("Created worldrenderer");
} }
// TODO: Implement
public int GetPaletteIndex(string name) public int GetPaletteIndex(string name)
{ {
return palette.GetPaletteIndex(name); return palette.GetPaletteIndex(name);
@@ -43,7 +42,6 @@ namespace OpenRa.Graphics
return palette.GetPalette(name); return palette.GetPalette(name);
} }
public void AddPalette(string name, Palette pal) public void AddPalette(string name, Palette pal)
{ {
palette.AddPalette(name, pal); palette.AddPalette(name, pal);

View File

@@ -222,6 +222,7 @@
<Compile Include="Traits\PaletteFromRGBA.cs" /> <Compile Include="Traits\PaletteFromRGBA.cs" />
<Compile Include="Traits\Passenger.cs" /> <Compile Include="Traits\Passenger.cs" />
<Compile Include="Traits\PlaceBuilding.cs" /> <Compile Include="Traits\PlaceBuilding.cs" />
<Compile Include="Traits\PlayerColorPalette.cs" />
<Compile Include="Traits\ShroudPalette.cs" /> <Compile Include="Traits\ShroudPalette.cs" />
<Compile Include="Traits\SupportPower.cs" /> <Compile Include="Traits\SupportPower.cs" />
<Compile Include="Traits\ProvidesRadar.cs" /> <Compile Include="Traits\ProvidesRadar.cs" />

View File

@@ -14,7 +14,7 @@ namespace OpenRa
public class Player public class Player
{ {
public Actor PlayerActor; public Actor PlayerActor;
public string Palette; public int PaletteIndex;
public int Kills; public int Kills;
public string PlayerName; public string PlayerName;
public string InternalName; public string InternalName;
@@ -28,18 +28,23 @@ namespace OpenRa
public int PowerDrained = 0; public int PowerDrained = 0;
public World World { get { return PlayerActor.World; } } public World World { get { return PlayerActor.World; } }
public static List<Tuple<string, string, Color>> PlayerColors = new List<Tuple<string, string, Color>>();
public static void RegisterPlayerColor(string palette, string name, Color c)
{
PlayerColors.Add(new Tuple<string, string, Color>(palette, name, c));
}
public Color Color
{
get { return PlayerColors[PaletteIndex].c; }
}
public Color Color; public string Palette
/* {
Color.FromArgb(228, 200, 112), get { return PlayerColors[PaletteIndex].a; }
Color.FromArgb(56, 72, 125), }
Color.FromArgb(238, 0, 0),
Color.FromArgb(198,97,0),
Color.FromArgb(28,109,97),
Color.FromArgb(153,76,53),
Color.FromArgb(76,101,60),
Color.FromArgb(133,113,101),
*/
public Shroud Shroud; public Shroud Shroud;
public Player( World world, int index, Session.Client client ) public Player( World world, int index, Session.Client client )
@@ -49,7 +54,7 @@ namespace OpenRa
this.Index = index; this.Index = index;
this.InternalName = "Multi{0}".F(index); this.InternalName = "Multi{0}".F(index);
this.Palette = client != null ? "player"+client.Palette : "player"+index; this.PaletteIndex = client != null ? client.PaletteIndex : index;
this.PlayerName = client != null ? client.Name : "Player {0}".F(index+1); this.PlayerName = client != null ? client.Name : "Player {0}".F(index+1);
this.Race = client != null ? (Race)client.Race : Race.Allies; this.Race = client != null ? (Race)client.Race : Race.Allies;
} }
@@ -172,10 +177,10 @@ namespace OpenRa
Race = (Race)client.Race; Race = (Race)client.Race;
} }
if (Palette != client.Palette) if (PaletteIndex != client.PaletteIndex)
{ {
Game.chat.AddLine(this, "has changed color to {0}".F(client.Palette)); PaletteIndex = client.PaletteIndex;
Palette = client.Palette; Game.chat.AddLine(this, "has changed color to {0}".F(PlayerColors[client.PaletteIndex].b));
} }
} }
} }

View File

@@ -21,37 +21,53 @@ World:
Name: player Name: player
Theatre: temperat Theatre: temperat
Filename: temperat.pal Filename: temperat.pal
PaletteFromRemap@player0: PlayerColorPalette@player0:
Name: player0 Name: player0
DisplayName: Gold
BasePalette: player BasePalette: player
PaletteFromRemap@player1: DisplayColor: 228, 200, 112
PlayerColorPalette@player1:
Name: player1 Name: player1
DisplayName: Blue
BasePalette: player BasePalette: player
Remap: blue.rem Remap: blue.rem
PaletteFromRemap@player2: DisplayColor: 56, 72, 125
PlayerColorPalette@player2:
Name: player2 Name: player2
DisplayName: Red
BasePalette: player BasePalette: player
Remap: red.rem Remap: red.rem
PaletteFromRemap@player3: DisplayColor: 238, 0, 0
PlayerColorPalette@player3:
Name: player3 Name: player3
DisplayName: Orange
BasePalette: player BasePalette: player
Remap: orange.rem Remap: orange.rem
PaletteFromRemap@player4: DisplayColor: 198,97,0
PlayerColorPalette@player4:
Name: player4 Name: player4
DisplayName: Teal
BasePalette: player BasePalette: player
Remap: teal.rem Remap: teal.rem
PaletteFromRemap@player5: DisplayColor: 28,109,97
PlayerColorPalette@player5:
Name: player5 Name: player5
DisplayName: Salmon
BasePalette: player BasePalette: player
Remap: salmon.rem Remap: salmon.rem
# PaletteFromRemap@player6: DisplayColor: 153,76,53
# PlayerColorPalette@player6:
# Name: player6 # Name: player6
# DisplayName: Green
# BasePalette: player # BasePalette: player
# Remap: green.rem # Remap: green.rem
# PaletteFromRemap@player7: # DisplayColor: 76,101,60
# PlayerColorPalette@player7:
# Name: player7 # Name: player7
# DisplayName: Gray
# BasePalette: player # BasePalette: player
# Remap: gray.rem # Remap: gray.rem
# DisplayColor: 133,113,101
PaletteFromFile@chrome: PaletteFromFile@chrome:
Name: chrome Name: chrome
Filename: temperat.pal Filename: temperat.pal