space-game/src/radar.ts

84 lines
3.0 KiB
TypeScript

import {DefaultScene} from "./defaultScene";
import {
AbstractMesh,
Color3,
HavokPlugin, InstancedMesh, Mesh,
MeshBuilder, Ray, SceneLoader,
StandardMaterial,
TransformNode,
Vector3
} from "@babylonjs/core";
const DETECTED: Color3 = Color3.Blue();
const WARN: Color3 = Color3.Yellow();
const DANGER: Color3 = Color3.Red();
const DETECTED_DISTANCE = 100;
const WARN_DISTANCE = 50;
const DANGER_DISTANCE = 30;
export class Radar {
private _shipTransform: TransformNode;
private _radarTransform: TransformNode;
private _arrowMesh: AbstractMesh;
constructor(ship: TransformNode) {
this._shipTransform = ship;
this._radarTransform = new TransformNode('radar', DefaultScene.MainScene);
this._radarTransform.parent = ship;
const sphere = MeshBuilder.CreateSphere('radarSphere', {diameter: 1}, DefaultScene.MainScene);
sphere.parent = this._radarTransform;
const material = new StandardMaterial('radarMaterial', DefaultScene.MainScene);
material.diffuseColor = Color3.Yellow();
material.alpha = .5;
sphere.material = material;
// dmaterial.alpha = .1;
this._radarTransform.position.z = 4;
//this._radarTransform.scaling = new Vector3(.01, .01 ,.01);
this.initialize();
}
private async initialize() {
const scene = DefaultScene.MainScene;
const arrow = await SceneLoader.ImportMeshAsync(null, './', 'arrow.stl', scene);
//arrow.meshes[0].parent = this._radarTransform;
arrow.meshes[0].scaling = new Vector3(.05,.05,.05);
this._arrowMesh = arrow.meshes[0];
const material = new StandardMaterial('arrowMaterial', scene);
material.emissiveColor = Color3.White();
this._arrowMesh.material = material;
window.setInterval(() => {
const point = scene.getMeshById('endBase');
if (point) {
point.computeWorldMatrix(true)
this._arrowMesh.position = this._radarTransform.absolutePosition;
this._arrowMesh.lookAt(point.absolutePosition);
}
}, 100);
// arrow[0].parent = this._radarTransform;
/*window.setInterval(() => {
scene.meshes.forEach((mesh) => {
if (mesh.physicsBody) {
if (!this._radarMeshes.has(mesh.id)) {
const radarmesh = new InstancedMesh('radar-' + mesh.id, mesh as Mesh);
radarmesh.metadata = {source: mesh};
radarmesh.parent = this._radarTransform;
this._radarMeshes.set(mesh.id, radarmesh);
}
this.update();
}
});
}, 2000);
*/
}
private async update() {
/*this._radarMeshes.forEach((radarMesh, id) => {
const mesh = radarMesh.metadata.source as AbstractMesh;
radarMesh.position = mesh.absolutePosition.subtract(this._shipTransform.absolutePosition).scaleInPlace(1.1);
});
*/
}
}