mirror of
https://github.com/motajs/template.git
synced 2026-09-20 14:30:17 +08:00
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { ITileLocator } from '@motajs/common';
|
|
import {
|
|
FaceDirection,
|
|
IDataCommon,
|
|
IDataCommonExtended,
|
|
ISaveableContent,
|
|
ITileRawData
|
|
} from '@user/data-common';
|
|
import { LayerEventView } from './eventView';
|
|
import {
|
|
ILayerEventView,
|
|
IMapBlockSaveBase,
|
|
IMapLayer,
|
|
ITileBase
|
|
} from './types';
|
|
|
|
export abstract class MapTileBase<TSave extends IMapBlockSaveBase>
|
|
implements ITileBase, IDataCommonExtended, ISaveableContent<Readonly<TSave>>
|
|
{
|
|
readonly state: IDataCommon;
|
|
readonly layer: IMapLayer;
|
|
locator: ITileLocator;
|
|
/** 该图块实例绑定的图块事件 */
|
|
private readonly tileEvents: ILayerEventView;
|
|
|
|
constructor(x: number, y: number, layer: IMapLayer) {
|
|
this.layer = layer;
|
|
this.state = layer.state;
|
|
this.locator = { x, y };
|
|
this.tileEvents = new LayerEventView();
|
|
this.tileEvents.markPure();
|
|
}
|
|
|
|
abstract num(): number;
|
|
|
|
abstract raw(): ITileRawData | null;
|
|
|
|
abstract set(num: number): void;
|
|
|
|
/**
|
|
* 根据当前图块原始数据恢复默认事件并建立干净基准
|
|
*/
|
|
protected restoreDefaultEvents(): void {
|
|
const eventView = this.tileEvent();
|
|
eventView.clear();
|
|
const data = this.raw();
|
|
if (data) {
|
|
for (const [priority, id] of Object.entries(data.events)) {
|
|
eventView.set(Number(priority), id);
|
|
}
|
|
}
|
|
eventView.markPure();
|
|
}
|
|
|
|
setFaceDirection(direction: FaceDirection): number {
|
|
const cur = this.num();
|
|
const next = this.layer.faceBinder.getFaceOf(cur, direction);
|
|
if (next) {
|
|
this.set(next.identifier);
|
|
return next.identifier;
|
|
} else {
|
|
return cur;
|
|
}
|
|
}
|
|
|
|
tileEvent(): ILayerEventView {
|
|
return this.tileEvents;
|
|
}
|
|
|
|
pointEvent(): ILayerEventView | null {
|
|
return this.layer.event(this.locator.x, this.locator.y);
|
|
}
|
|
|
|
abstract saveState(): Readonly<TSave>;
|
|
|
|
abstract loadState(save: Readonly<TSave>): void;
|
|
}
|