Add ant brush element with keybinding and GUI entry
This commit is contained in:
parent
c81ecaf21e
commit
b8f49afcc4
2 changed files with 28 additions and 2 deletions
|
|
@ -73,6 +73,7 @@ class GUIController {
|
||||||
"rock (E)": MAT_ROCK,
|
"rock (E)": MAT_ROCK,
|
||||||
"food (W)": MAT_FOOD,
|
"food (W)": MAT_FOOD,
|
||||||
"home (Q)": MAT_HOME,
|
"home (Q)": MAT_HOME,
|
||||||
|
"ants (A)": 999,
|
||||||
};
|
};
|
||||||
|
|
||||||
// proxy object for lil-gui string dropdown — initialize from saved config
|
// proxy object for lil-gui string dropdown — initialize from saved config
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ import fragmentShaderGround from "../shaders/screenWorld.frag";
|
||||||
import vertexShaderGround from "../shaders/screenWorld.vert";
|
import vertexShaderGround from "../shaders/screenWorld.vert";
|
||||||
import AbstractScene from "./AbstractScene";
|
import AbstractScene from "./AbstractScene";
|
||||||
|
|
||||||
|
export const BRUSH_ANTS = 999;
|
||||||
|
|
||||||
export default class ScreenScene extends AbstractScene {
|
export default class ScreenScene extends AbstractScene {
|
||||||
public readonly camera: THREE.OrthographicCamera;
|
public readonly camera: THREE.OrthographicCamera;
|
||||||
public readonly material: THREE.ShaderMaterial;
|
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
|
// resolves active draw mode: key-held takes priority, then GUI brush selection
|
||||||
public get effectiveDrawMode(): number {
|
public get effectiveDrawMode(): number {
|
||||||
|
if (this.drawMode === BRUSH_ANTS) return -1;
|
||||||
if (this.drawMode >= 0) return this.drawMode;
|
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 Config.brushMaterial;
|
||||||
|
}
|
||||||
return -1;
|
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 renderWidth: number = 1;
|
||||||
public renderHeight: number = 1;
|
public renderHeight: number = 1;
|
||||||
|
|
||||||
|
|
@ -188,6 +200,10 @@ export default class ScreenScene extends AbstractScene {
|
||||||
this.drawMode = MAT_DIRT;
|
this.drawMode = MAT_DIRT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "KeyA": {
|
||||||
|
this.drawMode = BRUSH_ANTS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "KeyV": {
|
case "KeyV": {
|
||||||
Config.viewMode =
|
Config.viewMode =
|
||||||
Config.viewMode === "side" ? "top" : "side";
|
Config.viewMode === "side" ? "top" : "side";
|
||||||
|
|
@ -276,7 +292,16 @@ export default class ScreenScene extends AbstractScene {
|
||||||
this.renderHeight = height;
|
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() {
|
public applyCameraZoom() {
|
||||||
this.updateCameraZoom();
|
this.updateCameraZoom();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue