Fix pre-existing typecheck errors

This commit is contained in:
Jared Miller 2026-03-09 10:39:35 -04:00
parent 03679622a3
commit 221606b527
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C
4 changed files with 298 additions and 289 deletions

View file

@ -1,12 +1,12 @@
import AntsComputeScene from "./scenes/AntsComputeScene";
import ScreenScene from "./scenes/ScreenScene";
import Renderer from "./Renderer";
import WorldComputeScene from "./scenes/WorldComputeScene";
import AntsDiscretizeScene from "./scenes/AntsDiscretizeScene";
import WorldBlurScene from "./scenes/WorldBlurScene";
import Config from "./Config";
import GUI from "./GUI";
import Renderer from "./Renderer";
import AntsComputeScene from "./scenes/AntsComputeScene";
import AntsDiscretizeScene from "./scenes/AntsDiscretizeScene";
import DrawScene from "./scenes/DrawScene";
import ScreenScene from "./scenes/ScreenScene";
import WorldBlurScene from "./scenes/WorldBlurScene";
import WorldComputeScene from "./scenes/WorldComputeScene";
export interface SceneCollection {
ants: AntsComputeScene;
@ -17,9 +17,11 @@ export interface SceneCollection {
draw: DrawScene;
}
export default new class App {
private renderer: Renderer = new Renderer(<HTMLCanvasElement>document.getElementById('canvas'));
private scenes: SceneCollection;
export default new (class App {
private renderer: Renderer = new Renderer(
<HTMLCanvasElement>document.getElementById("canvas"),
);
private scenes!: SceneCollection;
private gui: GUI = new GUI();
private renderLoop = (time: number): void => this.render(time);
private lastTime: number = 0;
@ -28,13 +30,13 @@ export default new class App {
constructor() {
this.initScenes();
window.addEventListener('resize', () => this.resize());
window.addEventListener("resize", () => this.resize());
this.resize();
this.renderLoop(0);
this.gui.on('reset', () => {
this.gui.on("reset", () => {
this.resetRenderer();
});
}
@ -50,7 +52,7 @@ export default new class App {
worldBlur: new WorldBlurScene(this.renderer),
discretize: new AntsDiscretizeScene(this.renderer),
screen: new ScreenScene(this.renderer),
draw: new DrawScene(this.renderer)
draw: new DrawScene(this.renderer),
};
}
@ -77,7 +79,8 @@ export default new class App {
requestAnimationFrame(this.renderLoop);
const deltaTime = time - this.lastTime;
const simStepsToDo = deltaTime / 1000 * Config.simulationStepsPerSecond;
const simStepsToDo =
(deltaTime / 1000) * Config.simulationStepsPerSecond;
this.queuedSimSteps += simStepsToDo;
this.queuedSimSteps = Math.min(this.queuedSimSteps, 10);
@ -95,4 +98,4 @@ export default new class App {
this.lastTime = time;
}
}
})();

View file

@ -1,9 +1,9 @@
import * as THREE from 'three';
import Renderer from "../Renderer";
import * as THREE from "three";
import type Renderer from "../Renderer";
export default abstract class AbstractScene extends THREE.Scene {
protected readonly renderer: Renderer;
public readonly camera: THREE.Camera;
public readonly camera!: THREE.Camera;
protected constructor(renderer: Renderer) {
super();

View file

@ -1,26 +1,27 @@
import * as THREE from 'three';
import Renderer from "../Renderer";
import * as THREE from "three";
import type Renderer from "../Renderer";
import fragmentShader from "../shaders/antsDiscretize.frag";
import vertexShader from "../shaders/antsDiscretize.vert";
import AbstractScene from "./AbstractScene";
import fragmentShader from '../shaders/antsDiscretize.frag';
import vertexShader from '../shaders/antsDiscretize.vert';
export default class AntsDiscretizeScene extends AbstractScene {
public readonly camera: THREE.OrthographicCamera = new THREE.OrthographicCamera();
public readonly camera: THREE.OrthographicCamera =
new THREE.OrthographicCamera();
public readonly material: THREE.RawShaderMaterial;
public mesh: THREE.InstancedMesh;
public mesh!: THREE.InstancedMesh;
constructor(renderer: Renderer) {
super(renderer);
this.material = new THREE.RawShaderMaterial({
uniforms: {
tDataCurrent: {value: null},
tDataLast: {value: null},
tDataCurrent: { value: null },
tDataLast: { value: null },
},
vertexShader,
fragmentShader,
defines: this.renderer.getCommonMaterialDefines(),
glslVersion: THREE.GLSL3
glslVersion: THREE.GLSL3,
});
this.createMesh();
@ -35,7 +36,8 @@ export default class AntsDiscretizeScene extends AbstractScene {
this.mesh = new THREE.InstancedMesh(
new THREE.BoxGeometry(1, 1, 1),
this.material,
this.renderer.resources.antsDataRenderTarget0.width * this.renderer.resources.antsDataRenderTarget0.height
this.renderer.resources.antsDataRenderTarget0.width *
this.renderer.resources.antsDataRenderTarget0.height,
);
this.add(this.mesh);
}
@ -46,11 +48,7 @@ export default class AntsDiscretizeScene extends AbstractScene {
this.createMesh();
}
public resize(width: number, height: number) {
public resize(width: number, height: number) {}
}
public update() {
}
public update() {}
}

View file

@ -1,24 +1,24 @@
import * as THREE from 'three';
import Renderer from "../Renderer";
import AbstractScene from "./AbstractScene";
import vertexShaderAnts from "../shaders/ants.vert";
import fragmentShaderAnts from "../shaders/ants.frag";
import vertexShaderGround from "../shaders/screenWorld.vert";
import fragmentShaderGround from "../shaders/screenWorld.frag";
import * as THREE from "three";
import Config from "../Config";
import type Renderer from "../Renderer";
import fragmentShaderAnts from "../shaders/ants.frag";
import vertexShaderAnts from "../shaders/ants.vert";
import fragmentShaderGround from "../shaders/screenWorld.frag";
import vertexShaderGround from "../shaders/screenWorld.vert";
import AbstractScene from "./AbstractScene";
enum PointerState {
None,
Food,
Home,
Obstacle,
Erase
Erase,
}
export default class ScreenScene extends AbstractScene {
public readonly camera: THREE.OrthographicCamera;
public readonly material: THREE.ShaderMaterial;
public ants: THREE.InstancedMesh;
public ants!: THREE.InstancedMesh;
public readonly groundMaterial: THREE.ShaderMaterial;
public readonly pointerPosition: THREE.Vector2 = new THREE.Vector2();
public drawMode: PointerState = PointerState.None;
@ -34,34 +34,41 @@ export default class ScreenScene extends AbstractScene {
new THREE.PlaneGeometry(1, 1),
new THREE.ShaderMaterial({
uniforms: {
map: {value: this.renderer.resources.worldRenderTarget.texture}
map: {
value: this.renderer.resources.worldRenderTarget
.texture,
},
},
vertexShader: vertexShaderGround,
fragmentShader: fragmentShaderGround,
defines: this.renderer.getCommonMaterialDefines(),
glslVersion: THREE.GLSL3
})
glslVersion: THREE.GLSL3,
}),
);
this.groundMaterial = ground.material;
this.add(ground);
const antTexture = new THREE.TextureLoader().load('textures/ant.png');
const foodTexture = new THREE.TextureLoader().load('textures/food.png');
const antTexture = new THREE.TextureLoader().load("textures/ant.png");
const foodTexture = new THREE.TextureLoader().load("textures/food.png");
antTexture.magFilter = foodTexture.magFilter = THREE.NearestFilter;
antTexture.minFilter = foodTexture.minFilter = THREE.LinearMipMapLinearFilter;
antTexture.minFilter = foodTexture.minFilter =
THREE.LinearMipMapLinearFilter;
this.material = new THREE.ShaderMaterial({
uniforms: {
tData: {value: this.renderer.resources.antsDataRenderTarget0.texture},
tAnt: {value: antTexture},
tFood: {value: foodTexture}
tData: {
value: this.renderer.resources.antsDataRenderTarget0
.texture,
},
tAnt: { value: antTexture },
tFood: { value: foodTexture },
},
vertexShader: vertexShaderAnts,
fragmentShader: fragmentShaderAnts,
transparent: true
transparent: true,
});
this.createInstancedAntsMesh();
@ -75,11 +82,11 @@ export default class ScreenScene extends AbstractScene {
const raycastVector = new THREE.Vector2(0, 0);
const raycaster = new THREE.Raycaster();
this.renderer.canvas.addEventListener('contextmenu', e => {
this.renderer.canvas.addEventListener("contextmenu", (e) => {
e.preventDefault();
});
this.renderer.canvas.addEventListener('pointerdown', e => {
this.renderer.canvas.addEventListener("pointerdown", (e) => {
this.isPointerDown = true;
raycastVector.x = (e.clientX / window.innerWidth) * 2 - 1;
@ -91,17 +98,19 @@ export default class ScreenScene extends AbstractScene {
if (intersects.length > 0) {
const uv = intersects[0].uv;
this.pointerPosition.copy(uv);
if (uv) this.pointerPosition.copy(uv);
}
});
this.renderer.canvas.addEventListener('pointermove', e => {
this.renderer.canvas.addEventListener("pointermove", (e) => {
if (this.isPointerDown) {
const dx = e.movementX;
const dy = e.movementY;
this.camera.position.x -= dx / window.innerHeight / this.camera.zoom;
this.camera.position.y += dy / window.innerHeight / this.camera.zoom;
this.camera.position.x -=
dx / window.innerHeight / this.camera.zoom;
this.camera.position.y +=
dy / window.innerHeight / this.camera.zoom;
}
raycastVector.x = (e.clientX / window.innerWidth) * 2 - 1;
@ -113,46 +122,46 @@ export default class ScreenScene extends AbstractScene {
if (intersects.length > 0) {
const uv = intersects[0].uv;
this.pointerPosition.copy(uv);
if (uv) this.pointerPosition.copy(uv);
}
});
this.renderer.canvas.addEventListener('pointerup', e => {
this.renderer.canvas.addEventListener("pointerup", (e) => {
this.isPointerDown = false;
});
this.renderer.canvas.addEventListener('pointerleave', e => {
this.renderer.canvas.addEventListener("pointerleave", (e) => {
this.isPointerDown = false;
});
this.renderer.canvas.addEventListener('wheel', e => {
this.renderer.canvas.addEventListener("wheel", (e) => {
this.cameraZoomLinear -= e.deltaY * 0.001;
this.updateCameraZoom();
});
window.addEventListener('keydown', e => {
window.addEventListener("keydown", (e) => {
switch (e.code) {
case 'KeyQ': {
case "KeyQ": {
this.drawMode = PointerState.Home;
break;
}
case 'KeyW': {
case "KeyW": {
this.drawMode = PointerState.Food;
break;
}
case 'KeyE': {
case "KeyE": {
this.drawMode = PointerState.Obstacle;
break;
}
case 'KeyR': {
case "KeyR": {
this.drawMode = PointerState.Erase;
break;
}
}
});
window.addEventListener('keyup', e => {
window.addEventListener("keyup", (e) => {
this.drawMode = PointerState.None;
});
}
@ -173,8 +182,9 @@ export default class ScreenScene extends AbstractScene {
const ants = new THREE.InstancedMesh(
new THREE.PlaneGeometry(scale, scale),
this.material,
this.renderer.resources.antsDataRenderTarget0.width * this.renderer.resources.antsDataRenderTarget0.height
)
this.renderer.resources.antsDataRenderTarget0.width *
this.renderer.resources.antsDataRenderTarget0.height,
);
ants.position.x = ants.position.y = -0.5;
@ -203,7 +213,5 @@ export default class ScreenScene extends AbstractScene {
this.renderHeight = height;
}
public update() {
}
public update() {}
}