control/entityEditor/MoveAxisEntity.tstypescript
import { Entity, type IEntityParams } from "../../entity/Entity";
import { Vec3 } from "../../math/Vec3";
import { SEL_X_COLOR, SEL_Y_COLOR, SEL_Z_COLOR, X_COLOR, Y_COLOR, Z_COLOR } from "./colors";
import { ArrowEntity } from "./ArrowEntity";
import { RADIANS } from "../../math";
export interface IAxisEntityParams extends IEntityParams {
size?: number;
}
export class MoveAxisEntity extends Entity {
protected _size: number;
public override childEntities: ArrowEntity[];
constructor(params: IAxisEntityParams = {}) {
super(params);
this._size = params.size != undefined ? params.size : 1.0;
this.childEntities = [];
this._init();
}
private _init() {
let arrowX = new ArrowEntity({
color: X_COLOR,
yaw: 0,
pitch: 0,
roll: 90 * RADIANS,
properties: {
opName: "move_x",
noEdit: true,
style: {
color: X_COLOR,
selectColor: SEL_X_COLOR
}
}
});
let arrowY = new ArrowEntity({
color: Y_COLOR,
yaw: 0,
pitch: 0,
roll: 0,
properties: {
opName: "move_y",
noEdit: true,
style: {
color: Y_COLOR,
selectColor: SEL_Y_COLOR
}
}
});
let arrowZ = new ArrowEntity({
color: Z_COLOR,
yaw: 0,
pitch: 90 * RADIANS,
roll: 0,
properties: {
opName: "move_z",
noEdit: true,
style: {
color: Z_COLOR,
selectColor: SEL_Z_COLOR
}
}
});
this.appendChild(arrowX);
this.appendChild(arrowY);
this.appendChild(arrowZ);
this.setSize(this._size);
}
public setSize(size: number) {
this.childEntities[0].setSize(size);
this.childEntities[1].setSize(size);
this.childEntities[2].setSize(size);
}
public override setPitch(a: number) {
let line = this.childEntities[0];
let tip = line.childEntities[0];
line.setPitch(a);
tip.setPitch(a);
line = this.childEntities[1];
tip = line.childEntities[0];
line.setPitch(a);
tip.setPitch(a);
line = this.childEntities[2];
tip = line.childEntities[0];
line.setPitch(a + 90);
tip.setPitch(a + 90);
}
public override setYaw(a: number) {
let line = this.childEntities[0];
let tip = line.childEntities[0];
line.setYaw(a);
tip.setYaw(a);
line = this.childEntities[1];
tip = line.childEntities[0];
line.setYaw(a);
tip.setYaw(a);
line = this.childEntities[2];
tip = line.childEntities[0];
line.setYaw(a);
tip.setYaw(a);
}
public override setRoll(a: number) {
let line = this.childEntities[0];
let tip = line.childEntities[0];
line.setRoll(a + 90);
tip.setRoll(a + 90);
line = this.childEntities[1];
tip = line.childEntities[0];
line.setRoll(a);
tip.setRoll(a);
}
public getY(): Vec3 {
return this.childEntities[1].getAbsoluteRotation().mulVec3(Vec3.UP).normalize();
}
}