Files
esengine/source/src/ECS/Components/Physics/Colliders/Collider.ts

56 lines
1.6 KiB
TypeScript
Raw Normal View History

2020-06-12 08:47:13 +08:00
abstract class Collider extends Component{
public shape: Shape;
public physicsLayer = 1 << 0;
public isTrigger: boolean;
2020-06-15 10:42:06 +08:00
public registeredPhysicsBounds: Rectangle;
protected _isParentEntityAddedToScene;
protected _isPositionDirty = true;
protected _isRotationDirty = true;
2020-06-15 10:42:06 +08:00
protected _colliderRequiresAutoSizing;
protected _localOffset: Vector2;
protected _isColliderRegisterd;
2020-06-12 08:47:13 +08:00
public get bounds(): Rectangle {
if (this._isPositionDirty || this._isRotationDirty){
this.shape.recalculateBounds(this);
this._isPositionDirty = this._isRotationDirty = false;
}
2020-06-12 08:47:13 +08:00
return this.shape.bounds;
}
2020-06-15 10:42:06 +08:00
public get localOffset(){
return this._localOffset;
}
public set localOffset(value: Vector2){
this.setLocalOffset(value);
}
public setLocalOffset(offset: Vector2){
if (this._localOffset != offset){
this.unregisterColliderWithPhysicsSystem();
this._localOffset = offset;
this._isPositionDirty = true;
this.registerColliderWithPhysicsSystem();
}
}
public registerColliderWithPhysicsSystem(){
if (this._isParentEntityAddedToScene && !this._isColliderRegisterd){
Physics.addCollider(this);
this._isColliderRegisterd = true;
}
}
public unregisterColliderWithPhysicsSystem(){
if (this._isParentEntityAddedToScene && this._isColliderRegisterd){
Physics.removeCollider(this);
}
this._isColliderRegisterd = false;
}
2020-06-15 10:42:06 +08:00
public initialize() {
}
2020-06-12 08:47:13 +08:00
}