single color for read and blue, put bots in their own team

This commit is contained in:
Evan
2025-03-28 13:42:53 -07:00
parent 9e76f4b049
commit ec0d635a9b
5 changed files with 31 additions and 157 deletions
+4 -145
View File
@@ -1,5 +1,9 @@
import { colord, Colord } from "colord";
export const red: Colord = colord({ r: 235, g: 53, b: 53 }); // Bright Red
export const blue: Colord = colord({ r: 41, g: 98, b: 255 }); // Royal Blue
export const botColor: Colord = colord({ r: 210, g: 206, b: 200 }); // Muted Beige Gray
export const territoryColors: Colord[] = [
colord({ r: 230, g: 100, b: 100 }), // Bright Red
colord({ r: 100, g: 180, b: 230 }), // Sky Blue
@@ -205,148 +209,3 @@ export const humanColors: Colord[] = [
colord({ r: 56, g: 189, b: 248 }), // Electric Blue
colord({ r: 234, g: 179, b: 8 }), // Daffodil
];
export const redShades = [
colord({ r: 210, g: 0, b: 0 }), // Most distinct colors sorted by brightness
colord({ r: 225, g: 0, b: 0 }),
colord({ r: 240, g: 0, b: 0 }),
colord({ r: 255, g: 0, b: 0 }),
colord({ r: 210, g: 21, b: 21 }),
colord({ r: 225, g: 23, b: 23 }),
colord({ r: 240, g: 25, b: 25 }),
colord({ r: 255, g: 26, b: 26 }),
colord({ r: 210, g: 42, b: 42 }),
colord({ r: 225, g: 45, b: 45 }),
colord({ r: 240, g: 48, b: 48 }),
colord({ r: 255, g: 51, b: 51 }),
colord({ r: 195, g: 59, b: 59 }),
colord({ r: 210, g: 63, b: 63 }),
colord({ r: 225, g: 68, b: 68 }),
colord({ r: 240, g: 72, b: 72 }),
colord({ r: 255, g: 77, b: 77 }),
colord({ r: 180, g: 72, b: 72 }),
colord({ r: 195, g: 78, b: 78 }),
colord({ r: 210, g: 84, b: 84 }),
colord({ r: 225, g: 90, b: 90 }),
colord({ r: 240, g: 96, b: 96 }),
colord({ r: 255, g: 102, b: 102 }),
colord({ r: 165, g: 83, b: 83 }),
colord({ r: 180, g: 90, b: 90 }),
colord({ r: 195, g: 98, b: 98 }),
colord({ r: 210, g: 105, b: 105 }),
colord({ r: 225, g: 113, b: 113 }),
colord({ r: 240, g: 120, b: 120 }),
colord({ r: 255, g: 128, b: 128 }),
colord({ r: 150, g: 90, b: 90 }),
colord({ r: 165, g: 99, b: 99 }),
colord({ r: 180, g: 108, b: 108 }),
colord({ r: 195, g: 117, b: 117 }),
colord({ r: 210, g: 126, b: 126 }),
colord({ r: 225, g: 135, b: 135 }),
colord({ r: 240, g: 144, b: 144 }),
colord({ r: 255, g: 153, b: 153 }),
colord({ r: 135, g: 95, b: 95 }),
colord({ r: 150, g: 105, b: 105 }),
colord({ r: 165, g: 116, b: 116 }),
colord({ r: 180, g: 126, b: 126 }),
colord({ r: 195, g: 137, b: 137 }),
colord({ r: 210, g: 147, b: 147 }),
colord({ r: 225, g: 158, b: 158 }),
colord({ r: 240, g: 168, b: 168 }),
colord({ r: 255, g: 179, b: 179 }),
colord({ r: 120, g: 108, b: 108 }),
colord({ r: 135, g: 122, b: 122 }),
colord({ r: 150, g: 135, b: 135 }),
colord({ r: 165, g: 149, b: 149 }),
colord({ r: 180, g: 162, b: 162 }),
colord({ r: 195, g: 176, b: 176 }),
colord({ r: 210, g: 189, b: 189 }),
colord({ r: 225, g: 203, b: 203 }),
colord({ r: 240, g: 216, b: 216 }),
colord({ r: 255, g: 230, b: 230 }),
colord({ r: 195, g: 0, b: 0 }),
colord({ r: 195, g: 20, b: 20 }),
colord({ r: 195, g: 39, b: 39 }),
colord({ r: 180, g: 54, b: 54 }),
colord({ r: 165, g: 66, b: 66 }),
colord({ r: 150, g: 75, b: 75 }),
colord({ r: 135, g: 81, b: 81 }),
colord({ r: 120, g: 84, b: 84 }),
colord({ r: 135, g: 108, b: 108 }),
colord({ r: 150, g: 120, b: 120 }),
colord({ r: 165, g: 132, b: 132 }),
colord({ r: 180, g: 144, b: 144 }),
];
export const blueShades = [
colord({ r: 0, g: 0, b: 120 }), // Most distinct colors sorted by brightness
colord({ r: 0, g: 0, b: 135 }),
colord({ r: 0, g: 0, b: 150 }),
colord({ r: 0, g: 0, b: 165 }),
colord({ r: 0, g: 0, b: 180 }),
colord({ r: 0, g: 0, b: 195 }),
colord({ r: 0, g: 0, b: 210 }),
colord({ r: 0, g: 0, b: 225 }),
colord({ r: 0, g: 0, b: 240 }),
colord({ r: 0, g: 0, b: 255 }),
colord({ r: 12, g: 12, b: 120 }),
colord({ r: 14, g: 14, b: 135 }),
colord({ r: 15, g: 15, b: 150 }),
colord({ r: 17, g: 17, b: 165 }),
colord({ r: 18, g: 18, b: 180 }),
colord({ r: 20, g: 20, b: 195 }),
colord({ r: 21, g: 21, b: 210 }),
colord({ r: 23, g: 23, b: 225 }),
colord({ r: 25, g: 25, b: 240 }),
colord({ r: 26, g: 26, b: 255 }),
colord({ r: 24, g: 24, b: 120 }),
colord({ r: 27, g: 27, b: 135 }),
colord({ r: 30, g: 30, b: 150 }),
colord({ r: 33, g: 33, b: 165 }),
colord({ r: 36, g: 36, b: 180 }),
colord({ r: 39, g: 39, b: 195 }),
colord({ r: 42, g: 42, b: 210 }),
colord({ r: 45, g: 45, b: 225 }),
colord({ r: 48, g: 48, b: 240 }),
colord({ r: 51, g: 51, b: 255 }),
colord({ r: 36, g: 36, b: 120 }),
colord({ r: 41, g: 41, b: 135 }),
colord({ r: 45, g: 45, b: 150 }),
colord({ r: 50, g: 50, b: 165 }),
colord({ r: 54, g: 54, b: 180 }),
colord({ r: 59, g: 59, b: 195 }),
colord({ r: 63, g: 63, b: 210 }),
colord({ r: 68, g: 68, b: 225 }),
colord({ r: 72, g: 72, b: 240 }),
colord({ r: 77, g: 77, b: 255 }),
colord({ r: 48, g: 48, b: 120 }),
colord({ r: 54, g: 54, b: 135 }),
colord({ r: 60, g: 60, b: 150 }),
colord({ r: 66, g: 66, b: 165 }),
colord({ r: 72, g: 72, b: 180 }),
colord({ r: 78, g: 78, b: 195 }),
colord({ r: 84, g: 84, b: 210 }),
colord({ r: 90, g: 90, b: 225 }),
colord({ r: 96, g: 96, b: 240 }),
colord({ r: 102, g: 102, b: 255 }),
colord({ r: 60, g: 60, b: 120 }),
colord({ r: 68, g: 68, b: 135 }),
colord({ r: 75, g: 75, b: 150 }),
colord({ r: 83, g: 83, b: 165 }),
colord({ r: 90, g: 90, b: 180 }),
colord({ r: 98, g: 98, b: 195 }),
colord({ r: 105, g: 105, b: 210 }),
colord({ r: 113, g: 113, b: 225 }),
colord({ r: 120, g: 120, b: 240 }),
colord({ r: 128, g: 128, b: 255 }),
colord({ r: 72, g: 72, b: 120 }),
colord({ r: 81, g: 81, b: 135 }),
colord({ r: 90, g: 90, b: 150 }),
colord({ r: 99, g: 99, b: 165 }),
colord({ r: 108, g: 108, b: 180 }),
colord({ r: 117, g: 117, b: 195 }),
colord({ r: 126, g: 126, b: 210 }),
colord({ r: 135, g: 135, b: 225 }),
colord({ r: 144, g: 144, b: 240 }),
colord({ r: 153, g: 153, b: 255 }),
];
+6 -3
View File
@@ -5,7 +5,7 @@ import { PseudoRandom } from "../PseudoRandom";
import { simpleHash } from "../Util";
import { GameMap, TileRef } from "../game/GameMap";
import { PlayerView } from "../game/GameView";
import { blueShades, humanColors, redShades, territoryColors } from "./Colors";
import { blue, botColor, humanColors, red, territoryColors } from "./Colors";
export const pastelTheme = new (class implements Theme {
private rand = new PseudoRandom(123);
@@ -30,11 +30,14 @@ export const pastelTheme = new (class implements Theme {
private _spawnHighlightColor = colord({ r: 255, g: 213, b: 79 });
territoryColor(player: PlayerView): Colord {
if (player.teamName() == TeamName.Bot) {
return botColor;
}
if (player.teamName() == TeamName.Red) {
return redShades[simpleHash(player.id()) % redShades.length];
return red;
}
if (player.teamName() == TeamName.Blue) {
return blueShades[simpleHash(player.id()) % blueShades.length];
return blue;
}
if (player.info().playerType == PlayerType.Human) {
return humanColors[simpleHash(player.id()) % humanColors.length];
+6 -3
View File
@@ -5,7 +5,7 @@ import { PseudoRandom } from "../PseudoRandom";
import { simpleHash } from "../Util";
import { GameMap, TileRef } from "../game/GameMap";
import { PlayerView } from "../game/GameView";
import { blueShades, humanColors, redShades, territoryColors } from "./Colors";
import { blue, botColor, humanColors, red, territoryColors } from "./Colors";
export const pastelThemeDark = new (class implements Theme {
private rand = new PseudoRandom(123);
@@ -30,11 +30,14 @@ export const pastelThemeDark = new (class implements Theme {
private _spawnHighlightColor = colord({ r: 255, g: 213, b: 79 });
territoryColor(player: PlayerView): Colord {
if (player.teamName() == TeamName.Bot) {
return botColor;
}
if (player.teamName() == TeamName.Red) {
return redShades[simpleHash(player.id()) % redShades.length];
return red;
}
if (player.teamName() == TeamName.Blue) {
return blueShades[simpleHash(player.id()) % blueShades.length];
return blue;
}
if (player.info().playerType == PlayerType.Human) {
return humanColors[simpleHash(player.id()) % humanColors.length];
+1
View File
@@ -41,6 +41,7 @@ export enum Difficulty {
export enum TeamName {
Red = "Red",
Blue = "Blue",
Bot = "Bot",
}
export enum GameMapType {
+14 -6
View File
@@ -19,6 +19,7 @@ import {
Team,
GameMode,
TeamName,
PlayerType,
} from "./Game";
import { GameUpdate } from "./GameUpdates";
import { GameUpdateType } from "./GameUpdates";
@@ -74,7 +75,11 @@ export class GameImpl implements Game {
private _stats: StatsImpl = new StatsImpl();
private teams_: Team[] = [];
private playerTeams: Team[] = [
{ name: TeamName.Red },
{ name: TeamName.Blue },
];
private botTeam: Team = { name: TeamName.Bot };
constructor(
private _map: GameMap,
@@ -95,9 +100,6 @@ export class GameImpl implements Game {
),
);
this.unitGrid = new UnitGrid(this._map);
if (this._config.gameConfig().gameMode == GameMode.Team) {
this.teams_ = [{ name: TeamName.Red }, { name: TeamName.Blue }];
}
}
isOnEdgeOfMap(ref: TileRef): boolean {
return this._map.isOnEdgeOfMap(ref);
@@ -343,8 +345,11 @@ export class GameImpl implements Game {
if (this._config.gameConfig().gameMode != GameMode.Team) {
return null;
}
if (player.playerType == PlayerType.Bot) {
return this.botTeam;
}
const rand = simpleHash(player.id);
return this.teams_[rand % this.teams_.length];
return this.playerTeams[rand % this.playerTeams.length];
}
player(id: PlayerID | null): Player {
@@ -541,7 +546,10 @@ export class GameImpl implements Game {
}
teams(): Team[] {
return this.teams_;
if (this._config.gameConfig().gameMode != GameMode.Team) {
return [];
}
return [this.botTeam, ...this.playerTeams];
}
displayMessage(