Initial commit
This commit is contained in:
35
C#/TSEngine/Core/Components/baseComponent.ts
Normal file
35
C#/TSEngine/Core/Components/baseComponent.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace TSE {
|
||||
|
||||
export abstract class BaseComponent {
|
||||
|
||||
public name: string;
|
||||
protected _owner: SimObject;
|
||||
protected _data: IComponentData;
|
||||
|
||||
public constructor(data: IComponentData) {
|
||||
this._data = data;
|
||||
this.name = data.name;
|
||||
}
|
||||
|
||||
public get owner(): SimObject { return this._owner; }
|
||||
public set owner(value: SimObject) { this._owner = value; }
|
||||
|
||||
public load(): void { }
|
||||
public update(time: number): void { }
|
||||
public render(shader: Shader): void { }
|
||||
|
||||
}
|
||||
|
||||
export interface IComponentData {
|
||||
name: string;
|
||||
|
||||
setFromJson(json: any): void;
|
||||
}
|
||||
|
||||
export interface IComponentBuilder {
|
||||
get type(): string;
|
||||
|
||||
buildFromJson(json: any): BaseComponent;
|
||||
}
|
||||
|
||||
}
|
||||
18
C#/TSEngine/Core/Components/componentManager.ts
Normal file
18
C#/TSEngine/Core/Components/componentManager.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace TSE {
|
||||
|
||||
export class ComponentManager {
|
||||
|
||||
private static _registeredBuilders: {[type: string]: IComponentBuilder} = {};
|
||||
|
||||
public static registerBuilder(builder: IComponentBuilder): void {
|
||||
ComponentManager._registeredBuilders[builder.type] = builder;
|
||||
}
|
||||
|
||||
public static extractComponent(json: any): BaseComponent {
|
||||
if (ComponentManager._registeredBuilders[json?.type] === undefined) return undefined;
|
||||
return ComponentManager._registeredBuilders[json.type].buildFromJson(json);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
94
C#/TSEngine/Core/Components/spriteComponent.ts
Normal file
94
C#/TSEngine/Core/Components/spriteComponent.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
///<reference path="componentManager.ts"/>
|
||||
|
||||
namespace TSE {
|
||||
|
||||
export class SpriteComponentData implements IComponentData {
|
||||
public name: string;
|
||||
public materialName: string;
|
||||
|
||||
public setFromJson(json: any): void {
|
||||
this.name = json.name !== undefined ? String(json.name) : undefined;
|
||||
this.materialName = json.materialName !== undefined ? String(json.materialName) : undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export class SpriteComponentBuilder implements IComponentBuilder {
|
||||
public get type(): string { return "sprite"; }
|
||||
|
||||
public buildFromJson(json: any): BaseComponent {
|
||||
let data = new SpriteComponentData();
|
||||
data.setFromJson(json);
|
||||
return new SpriteComponent(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class SpriteComponent extends BaseComponent {
|
||||
|
||||
protected _sprite: Sprite;
|
||||
|
||||
public constructor(data: SpriteComponentData) {
|
||||
super(data);
|
||||
|
||||
this._sprite = new Sprite(data.name, data.materialName);
|
||||
}
|
||||
|
||||
public load(): void {
|
||||
this._sprite.load();
|
||||
}
|
||||
|
||||
public render(shader: Shader): void {
|
||||
this._sprite.draw(shader, this.owner.worldMatrix);
|
||||
|
||||
super.render(shader);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
export class AnimatedSpriteComponentData extends SpriteComponentData {
|
||||
public frameWidth: number;
|
||||
public frameHeight: number;
|
||||
public frameCount: number;
|
||||
public frameSequence: number[];
|
||||
|
||||
public setFromJson(json: any): void {
|
||||
super.setFromJson(json);
|
||||
|
||||
this.frameWidth = Number(json.frameWidth);
|
||||
this.frameHeight = Number(json.frameHeight);
|
||||
this.frameCount = Number(json.frameCount);
|
||||
this.frameSequence = json.frameSequence;
|
||||
}
|
||||
}
|
||||
|
||||
export class AnimatedSpriteComponentBuilder extends SpriteComponentBuilder {
|
||||
public get type(): string { return "animated_sprite"; }
|
||||
|
||||
public buildFromJson(json: any): BaseComponent {
|
||||
let data = new AnimatedSpriteComponentData();
|
||||
data.setFromJson(json);
|
||||
return new AnimatedSpriteComponent(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class AnimatedSpriteComponent extends SpriteComponent {
|
||||
|
||||
public constructor(data: AnimatedSpriteComponentData) {
|
||||
super(data);
|
||||
this._sprite = new AnimatedSprite(this.name, data.materialName, data.frameWidth, data.frameHeight, data.frameCount, data.frameSequence);
|
||||
}
|
||||
|
||||
public update(time: number) {
|
||||
this._sprite.update(time);
|
||||
super.update(time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComponentManager.registerBuilder(new SpriteComponentBuilder());
|
||||
ComponentManager.registerBuilder(new AnimatedSpriteComponentBuilder());
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user