import * as THREE from 'three'; import { AmmoBody, PhysiAmmo } from './PhysicAmmo'; import { CollisionType } from './Types'; import { Application } from './Application'; export interface EntityConfig { name: string; position: { x: number; y: number; z: number; } | THREE.Vector3; rotation: { x: number; y: number; z: number; } | THREE.Euler; lod?: boolean; } export declare abstract class Entity { private _id; private _name; private _type; private _userData; _app: Application; group: THREE.Group; mixer: THREE.AnimationMixer; phyBody: AmmoBody | AmmoBody[]; private _PhysicEnv; private _position; private _rotation; private _nextPosition; private _nextRotation; private _poseTween; private emissiveMaterials; constructor(type: string, userData: EntityConfig); get Position(): THREE.Vector3; get Rotation(): THREE.Euler; get Quaternion(): THREE.Quaternion; get MatrixWorld(): THREE.Matrix4; protected get NextPosition(): THREE.Vector3; protected get NextQuaternion(): THREE.Quaternion; get Id(): number; get Name(): string; get Type(): string; get UserData(): any; get PhysicEnv(): PhysiAmmo; setApp(app: Application): void; setId(id: number): void; setName(name: string): void; setType(type: string): void; setPosition(p: THREE.Vector3): void; setRotation(r: THREE.Quaternion): void; protected setNextPosition(p: THREE.Vector3): void; protected setNextRotation(r: THREE.Quaternion): void; setUserData(userData: any): void; protected addModelToGroup(item: THREE.Group | THREE.Mesh): void; getObjectByName(name: string): THREE.Object3D; updatePose(position: THREE.Vector3, quaternion: THREE.Quaternion, animateTime?: number): void; flushPose(): void; abstract loadModel(): Promise; abstract addPhysicsBody(): Promise; abstract onAdded(): Promise; abstract onRemoved(): void; abstract onUpdating(deltaTime: number): void; update(deltaTime: number): void; setPhysicEnv(physic: any): void; protected setWholePhyBody(body: AmmoBody | null): void; protected addPartPhyBody(body: AmmoBody | null): void; setPhyBodyToStatic(): void; changePhyBodyCollisionType(collisionType: CollisionType): void; getSnapshot(): { _t: string; _u: any; _p: { x: number; y: number; z: number; }; _q: number[]; _o: {}; }; rebuildBody(userData: EntityConfig): Promise; setEmissive(color: string, opacity: number, objectName?: string): void; clearEmissive(): void; }