feat: Factory Railway Tracks become more visible in Alternate View (#2626)

## Description:

Adds network bright green highlighting to Railway tracks connecting
_your_ factories and buildings together when in the alternate view
(spacebar view). It is sometimes hard to see your own tracks on certain
areas of the map (mountain terrains for example), so this change will
highlight the tracks the same color as your border outline in the
alternate view (#00FF00). Also suggested by [this
comment](https://discord.com/channels/1284581928254701718/1445984695752855562/1445984695752855562)
in the Discord.

### Normal Railway Connection
<img width="1009" height="872" alt="image"
src="https://github.com/user-attachments/assets/31c028a8-13d8-4d82-ba4a-385b8372c9ac"
/>

### Alternative View (spacebar)
<img width="1124" height="956" alt="image"
src="https://github.com/user-attachments/assets/f4f3bb38-7233-4f2c-9bbf-a407196b0124"
/>

### Other nation colors remain unchanged
<img width="1566" height="1447" alt="image"
src="https://github.com/user-attachments/assets/c4dde970-20f1-480b-959d-876d4eb0f32b"
/>


## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

bijx
This commit is contained in:
bijx
2025-12-17 22:46:32 -05:00
committed by GitHub
parent bec9af6d1e
commit c9f00a5eb8
2 changed files with 17 additions and 2 deletions
+1 -1
View File
@@ -240,7 +240,7 @@ export function createRenderer(
const layers: Layer[] = [ const layers: Layer[] = [
new TerrainLayer(game, transformHandler), new TerrainLayer(game, transformHandler),
new TerritoryLayer(game, eventBus, transformHandler, userSettings), new TerritoryLayer(game, eventBus, transformHandler, userSettings),
new RailroadLayer(game, transformHandler), new RailroadLayer(game, eventBus, transformHandler),
structureLayer, structureLayer,
samRadiusLayer, samRadiusLayer,
new UnitLayer(game, eventBus, transformHandler), new UnitLayer(game, eventBus, transformHandler),
+16 -1
View File
@@ -1,5 +1,6 @@
import { colord } from "colord"; import { colord } from "colord";
import { Theme } from "../../../core/configuration/Config"; import { Theme } from "../../../core/configuration/Config";
import { EventBus } from "../../../core/EventBus";
import { PlayerID } from "../../../core/game/Game"; import { PlayerID } from "../../../core/game/Game";
import { TileRef } from "../../../core/game/GameMap"; import { TileRef } from "../../../core/game/GameMap";
import { import {
@@ -9,6 +10,7 @@ import {
RailType, RailType,
} from "../../../core/game/GameUpdates"; } from "../../../core/game/GameUpdates";
import { GameView } from "../../../core/game/GameView"; import { GameView } from "../../../core/game/GameView";
import { AlternateViewEvent } from "../../InputHandler";
import { TransformHandler } from "../TransformHandler"; import { TransformHandler } from "../TransformHandler";
import { Layer } from "./Layer"; import { Layer } from "./Layer";
import { getBridgeRects, getRailroadRects } from "./RailroadSprites"; import { getBridgeRects, getRailroadRects } from "./RailroadSprites";
@@ -23,6 +25,7 @@ export class RailroadLayer implements Layer {
private canvas: HTMLCanvasElement; private canvas: HTMLCanvasElement;
private context: CanvasRenderingContext2D; private context: CanvasRenderingContext2D;
private theme: Theme; private theme: Theme;
private alternativeView = false;
// Save the number of railroads per tiles. Delete when it reaches 0 // Save the number of railroads per tiles. Delete when it reaches 0
private existingRailroads = new Map<TileRef, RailRef>(); private existingRailroads = new Map<TileRef, RailRef>();
private nextRailIndexToCheck = 0; private nextRailIndexToCheck = 0;
@@ -33,6 +36,7 @@ export class RailroadLayer implements Layer {
constructor( constructor(
private game: GameView, private game: GameView,
private eventBus: EventBus,
private transformHandler: TransformHandler, private transformHandler: TransformHandler,
) { ) {
this.theme = game.config().theme(); this.theme = game.config().theme();
@@ -88,6 +92,12 @@ export class RailroadLayer implements Layer {
} }
init() { init() {
this.eventBus.on(AlternateViewEvent, (e) => {
this.alternativeView = e.alternateView;
for (const { tile } of this.existingRailroads.values()) {
this.paintRail(tile);
}
});
this.redraw(); this.redraw();
} }
@@ -244,9 +254,14 @@ export class RailroadLayer implements Layer {
} }
const owner = this.game.owner(tile); const owner = this.game.owner(tile);
const recipient = owner.isPlayer() ? owner : null; const recipient = owner.isPlayer() ? owner : null;
const color = recipient let color = recipient
? recipient.borderColor() ? recipient.borderColor()
: colord("rgba(255,255,255,1)"); : colord("rgba(255,255,255,1)");
if (this.alternativeView && recipient?.isMe()) {
color = colord("#00ff00");
}
this.context.fillStyle = color.toRgbString(); this.context.fillStyle = color.toRgbString();
this.paintRailRects(this.context, x, y, railType); this.paintRailRects(this.context, x, y, railType);
} }