UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

55 lines (40 loc) 1.46 kB
import { MarkerNodeEntityProcessor } from "./MarkerNodeEntityProcessor.js"; import { SurfacePoint3 } from "../../../../core/geom/3d/SurfacePoint3.js"; import { alignToVector } from "../../../../engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js"; import { obtainTerrain } from "../../../../engine/ecs/terrain/util/obtainTerrain.js"; const p = new SurfacePoint3(); export class MarkerNodeEntityProcessorClingToTerrain extends MarkerNodeEntityProcessor { /** * @private * @type {Terrain} */ terrain = null; /** * * @type {boolean} */ normalAlign = false; /** * * @param {boolean} [normalAlign=false] * @return {MarkerNodeEntityProcessorClingToTerrain} */ static from({ normalAlign = false } = {}) { const r = new MarkerNodeEntityProcessorClingToTerrain(); r.normalAlign = normalAlign; return r; } initialize(data, ecd) { this.terrain = obtainTerrain(ecd); } execute(entity, node, data, ecd) { const transform = node.transform; const contact_found = this.terrain.raycastVerticalFirstSync(p, transform.position.x, transform.position.z); if (contact_found) { transform.position.setY(p.position.y); if (this.normalAlign) { alignToVector(transform.rotation, p.normal, 1000); } } } }