From ec0d635a9b69f6af674c1e352d347214f350e3d6 Mon Sep 17 00:00:00 2001 From: Evan Date: Fri, 28 Mar 2025 13:42:53 -0700 Subject: [PATCH] single color for read and blue, put bots in their own team --- src/core/configuration/Colors.ts | 149 +--------------------- src/core/configuration/PastelTheme.ts | 9 +- src/core/configuration/PastelThemeDark.ts | 9 +- src/core/game/Game.ts | 1 + src/core/game/GameImpl.ts | 20 ++- 5 files changed, 31 insertions(+), 157 deletions(-) diff --git a/src/core/configuration/Colors.ts b/src/core/configuration/Colors.ts index 6354359f0..496f63235 100644 --- a/src/core/configuration/Colors.ts +++ b/src/core/configuration/Colors.ts @@ -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 }), -]; diff --git a/src/core/configuration/PastelTheme.ts b/src/core/configuration/PastelTheme.ts index 062a6ff4c..c3f5951b2 100644 --- a/src/core/configuration/PastelTheme.ts +++ b/src/core/configuration/PastelTheme.ts @@ -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]; diff --git a/src/core/configuration/PastelThemeDark.ts b/src/core/configuration/PastelThemeDark.ts index 2c145829a..e22c74e09 100644 --- a/src/core/configuration/PastelThemeDark.ts +++ b/src/core/configuration/PastelThemeDark.ts @@ -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]; diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index 4a920164d..583583a83 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -41,6 +41,7 @@ export enum Difficulty { export enum TeamName { Red = "Red", Blue = "Blue", + Bot = "Bot", } export enum GameMapType { diff --git a/src/core/game/GameImpl.ts b/src/core/game/GameImpl.ts index 6725bcd2e..7d9e4b9be 100644 --- a/src/core/game/GameImpl.ts +++ b/src/core/game/GameImpl.ts @@ -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(