UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

92 lines (62 loc) 2.57 kB
import { MetricCollection } from "../../development/performance/MetricCollection.js"; import { MetricCollectionConsoleMonitor } from "../../development/performance/monitor/MetricCollectionConsoleMonitor.js"; import Entity from "../../ecs/Entity.js"; import GUIElement from "../../ecs/gui/GUIElement.js"; import GUIElementSystem from "../../ecs/gui/GUIElementSystem.js"; import { EngineHarness } from "../../EngineHarness.js"; import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js"; import { BehaviorSystem } from "../../intelligence/behavior/ecs/BehaviorSystem.js"; import { FluidField } from "./FluidField.js"; import { FluidSimulator } from "./FluidSimulator.js"; import { SliceVisualiser } from "./SliceVisualiser.js"; const harness = new EngineHarness(); const metrics = new MetricCollection(); metrics.create({ name: 'sim' }) /** * * @param {Engine} engine */ function main(engine) { const ecd = engine.entityManager.dataset; const field = new FluidField(); field.addAttribute('x'); field.addAttribute('y'); field.addAttribute('z'); field.resolution = [32, 32, 64]; field.build(); field.setAttributeAt(0, 15, 16, 0, -100); field.setAttributeAt(0, 17, 16, 0, 100); field.setAttributeAt(1, 16, 15, 0, -100); field.setAttributeAt(1, 16, 17, 0, 100); field.setAttributeAt(2, 15, 16, 0, 100); field.setAttributeAt(2, 17, 16, 0, 100); field.setAttributeAt(2, 16, 15, 0, 100); field.setAttributeAt(2, 16, 17, 0, 100); const sim = new FluidSimulator(); const slice_view = new SliceVisualiser(); slice_view.size.set(432, 1000); slice_view.scale.setScalar(2); slice_view.transformOrigin.set(0, 0); slice_view.setData(field.buffer, field.resolution); new Entity() .add(BehaviorComponent.loop(time_delta => { const t0 = performance.now(); sim.step(field, 0.015); metrics.get('sim').record(performance.now() - t0); slice_view.setData(field.buffer, field.resolution); slice_view.draw(); })) .build(ecd); MetricCollectionConsoleMonitor.from(metrics).start() new Entity() .add(GUIElement.fromView(slice_view)) .build(ecd); } harness.initialize({ configuration(config, engine) { config.addSystem(new GUIElementSystem(engine.gameView, engine)) config.addSystem(new BehaviorSystem(engine)) } }).then(main)