From b8f49afcc48c53940e1ad69bdd9218d1157e08cf Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Wed, 11 Mar 2026 20:55:48 -0400 Subject: [PATCH] Add ant brush element with keybinding and GUI entry --- src/GUI.ts | 1 + src/scenes/ScreenScene.ts | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/GUI.ts b/src/GUI.ts index e23d068..28651a2 100644 --- a/src/GUI.ts +++ b/src/GUI.ts @@ -73,6 +73,7 @@ class GUIController { "rock (E)": MAT_ROCK, "food (W)": MAT_FOOD, "home (Q)": MAT_HOME, + "ants (A)": 999, }; // proxy object for lil-gui string dropdown — initialize from saved config diff --git a/src/scenes/ScreenScene.ts b/src/scenes/ScreenScene.ts index 6965a04..74e7a8f 100644 --- a/src/scenes/ScreenScene.ts +++ b/src/scenes/ScreenScene.ts @@ -15,6 +15,8 @@ import fragmentShaderGround from "../shaders/screenWorld.frag"; import vertexShaderGround from "../shaders/screenWorld.vert"; import AbstractScene from "./AbstractScene"; +export const BRUSH_ANTS = 999; + export default class ScreenScene extends AbstractScene { public readonly camera: THREE.OrthographicCamera; public readonly material: THREE.ShaderMaterial; @@ -33,11 +35,21 @@ export default class ScreenScene extends AbstractScene { // resolves active draw mode: key-held takes priority, then GUI brush selection public get effectiveDrawMode(): number { + if (this.drawMode === BRUSH_ANTS) return -1; if (this.drawMode >= 0) return this.drawMode; - if (this.isPointerDown && Config.brushMaterial >= 0) + if (this.isPointerDown && Config.brushMaterial >= 0) { + if (Config.brushMaterial === BRUSH_ANTS) return -1; return Config.brushMaterial; + } return -1; } + + public get isAntBrushActive(): boolean { + if (this.drawMode === BRUSH_ANTS) return true; + if (this.isPointerDown && Config.brushMaterial === BRUSH_ANTS) + return true; + return false; + } public renderWidth: number = 1; public renderHeight: number = 1; @@ -188,6 +200,10 @@ export default class ScreenScene extends AbstractScene { this.drawMode = MAT_DIRT; break; } + case "KeyA": { + this.drawMode = BRUSH_ANTS; + break; + } case "KeyV": { Config.viewMode = Config.viewMode === "side" ? "top" : "side"; @@ -276,7 +292,16 @@ export default class ScreenScene extends AbstractScene { this.renderHeight = height; } - public update() {} + public update() { + if (this.isAntBrushActive && this.isPointerDown) { + this.antSpawnRequest.set( + this.pointerPosition.x, + this.pointerPosition.y, + Config.brushRadius, + 1, // flag: spawn requested + ); + } + } public applyCameraZoom() { this.updateCameraZoom();