Files
esengine/source/src/ECS/Components/Renderables/IRenderable.ts

80 lines
3.0 KiB
TypeScript
Raw Normal View History

module es {
/**
* Component时
* layerDepth/renderLayer/material这样的东西需要更新Scene RenderableComponentList
*/
export interface IRenderable {
/** 包裹此对象的AABB。用来进行相机筛选 */
bounds: Rectangle;
/** 这个IRenderable是否应该被渲染 */
enabled: boolean;
/**
* Batcher图层深度01
*
*/
layerDepth: number;
/**
* renderLayers在前面layerDepth一样0-1
* renderLayers首先被发送到Batcher使
*/
renderLayer: number;
/**
* 使
*
*/
material;
/**
* Renderable的可见性
* onBecameVisible/onBecameInvisible方法
*/
isVisible: boolean;
/**
* Material子类的帮助程序
*/
getMaterial<T extends IMaterial>(): T;
/**
* Renderables的边界与Camera.bounds相交true
* isVisible标志的状态切换
* 使
* @param camera
*/
isVisibleFromCamera(camera: ICamera): boolean;
/**
* 使Batcher实例进行绘制
* @param batcher
* @param camera
*/
render(batcher: IBatcher, camera: ICamera);
/**
*
*
* @param batcher
*/
debugRender(batcher: IBatcher);
}
/**
* IRenderables进行排序的比较器
* RenderLayer LayerDepth
* 使
*/
export class RenderableComparer implements IComparer<IRenderable> {
public compare(self: IRenderable, other: IRenderable): number {
let res = other.renderLayer - self.renderLayer;
if (res == 0) {
res = other.layerDepth - self.layerDepth;
if (res == 0) {
if (self.material == other.material)
return 0;
if (other.material == null)
return -1;
return 1;
}
}
return res;
}
}
}