76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
|
|
import { Component } from '@esengine/ecs-framework';
|
||
|
|
import { Color } from 'cc';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 渲染组件
|
||
|
|
* 存储实体的渲染相关信息
|
||
|
|
*/
|
||
|
|
export class Renderer extends Component {
|
||
|
|
/** 颜色 */
|
||
|
|
public color: Color = new Color(255, 255, 255, 255);
|
||
|
|
|
||
|
|
/** 是否可见 */
|
||
|
|
public visible: boolean = true;
|
||
|
|
|
||
|
|
/** 渲染层级 */
|
||
|
|
public layer: number = 0;
|
||
|
|
|
||
|
|
/** 精灵名称或纹理路径 */
|
||
|
|
public spriteName: string = '';
|
||
|
|
|
||
|
|
/** 大小 */
|
||
|
|
public size: { width: number, height: number } = { width: 32, height: 32 };
|
||
|
|
|
||
|
|
/** 透明度 (0-1) */
|
||
|
|
public alpha: number = 1.0;
|
||
|
|
|
||
|
|
constructor(spriteName: string = '', color?: Color) {
|
||
|
|
super();
|
||
|
|
this.spriteName = spriteName;
|
||
|
|
if (color) {
|
||
|
|
this.color = color;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置颜色
|
||
|
|
*/
|
||
|
|
public setColor(r: number, g: number, b: number, a: number = 255): void {
|
||
|
|
this.color.set(r, g, b, a);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置透明度
|
||
|
|
*/
|
||
|
|
public setAlpha(alpha: number): void {
|
||
|
|
this.alpha = Math.max(0, Math.min(1, alpha));
|
||
|
|
this.color.a = Math.floor(this.alpha * 255);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置大小
|
||
|
|
*/
|
||
|
|
public setSize(width: number, height: number): void {
|
||
|
|
this.size.width = width;
|
||
|
|
this.size.height = height;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 显示/隐藏
|
||
|
|
*/
|
||
|
|
public setVisible(visible: boolean): void {
|
||
|
|
this.visible = visible;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 重置组件
|
||
|
|
*/
|
||
|
|
public reset(): void {
|
||
|
|
this.color.set(255, 255, 255, 255);
|
||
|
|
this.visible = true;
|
||
|
|
this.layer = 0;
|
||
|
|
this.spriteName = '';
|
||
|
|
this.size = { width: 32, height: 32 };
|
||
|
|
this.alpha = 1.0;
|
||
|
|
}
|
||
|
|
}
|