Compare commits

..

No commits in common. "8eadffffeafdd60c1adcc09873e2b6411bf8ac71" and "5c44d140a8b5d92bb966f1a5e6619603f49766f6" have entirely different histories.

3 changed files with 13 additions and 153 deletions

View File

@ -298,11 +298,16 @@ export class MapHeroRenderer implements IMapHeroRenderer {
this.entities.forEach(v => this.endEntityMoving(v)); this.entities.forEach(v => this.endEntityMoving(v));
} }
stopMove(): void { stopMove(stopFollower: boolean): void {
if (stopFollower) {
this.entities.forEach(v => { this.entities.forEach(v => {
v.block.endMoving(); v.block.endMoving();
this.endEntityMoving(v); this.endEntityMoving(v);
}); });
} else {
this.heroEntity.block.endMoving();
this.endEntityMoving(this.heroEntity);
}
} }
async move(direction: FaceDirection, time: number): Promise<void> { async move(direction: FaceDirection, time: number): Promise<void> {

View File

@ -1,63 +0,0 @@
import { IMapRenderer } from '../types';
import { IMapTextArea, IMapTextRenderable, IOnMapTextRenderer } from './types';
export class OnMapTextRenderer implements IOnMapTextRenderer {
/** 画布元素 */
readonly canvas: HTMLCanvasElement;
/** 画布 Canvas2D 上下文 */
readonly ctx: CanvasRenderingContext2D;
/** 图块索引到图块文本对象的映射 */
readonly areaMap: Map<number, MapTextArea> = new Map();
private dirty: boolean = false;
constructor(readonly renderer: IMapRenderer) {
this.canvas = document.createElement('canvas');
this.ctx = this.canvas.getContext('2d')!;
}
render(): HTMLCanvasElement {
return this.canvas;
}
requireBlockArea(x: number, y: number): Readonly<IMapTextArea> {
const index = y * this.renderer.mapWidth + x;
const exist = this.areaMap.get(index);
if (exist) return exist;
const area = new MapTextArea(this, x, y);
this.areaMap.set(index, area);
return area;
}
needUpdate(): boolean {
return this.dirty;
}
clear(): void {}
destroy(): void {}
}
class MapTextArea implements IMapTextArea {
index: number;
constructor(
readonly renderer: OnMapTextRenderer,
public mapX: number,
public mapY: number
) {
this.index = mapY * renderer.renderer.mapWidth + mapX;
}
addTextRenderable(renderable: IMapTextRenderable): void {
throw new Error('Method not implemented.');
}
removeTextRenderable(renderable: IMapTextRenderable): void {
throw new Error('Method not implemented.');
}
clear(): void {
throw new Error('Method not implemented.');
}
}

View File

@ -5,7 +5,6 @@ import {
IHeroState, IHeroState,
IMapLayer IMapLayer
} from '@user/data-state'; } from '@user/data-state';
import { Font } from '@motajs/render-style';
export interface IMapExtensionManager { export interface IMapExtensionManager {
/** /**
@ -80,9 +79,10 @@ export interface IMapHeroRenderer {
waitMoveEnd(waitFollower: boolean): Promise<void>; waitMoveEnd(waitFollower: boolean): Promise<void>;
/** /**
* *
* @param stopFollower
*/ */
stopMove(): void; stopMove(stopFollower: boolean): void;
/** /**
* *
@ -162,85 +162,3 @@ export interface IMapDoorRenderer {
*/ */
destroy(): void; destroy(): void;
} }
export interface IMapTextRenderable {
/** 文本内容 */
readonly text: string;
/** 文本字体 */
readonly font: Font;
/** 文本填充样式 */
readonly fillStyle: CanvasStyle;
/** 文本描边样式 */
readonly strokeStyle: CanvasStyle;
/** 文本横坐标,注意 {@link IMapTextArea.addTextRenderable} 的相对关系 */
readonly px: number;
/** 文本纵坐标,注意 {@link IMapTextArea.addTextRenderable} 的相对关系 */
readonly py: number;
/** 文本横向对齐方式 */
readonly textAlign: CanvasTextAlign;
/** 文本纵向对齐方式 */
readonly textBaseline: CanvasTextBaseline;
}
export interface IMapTextRequested {
/**
*
* @param blocks
*/
requestBlocks(blocks: IMapTextArea[]): void;
}
export interface IMapTextArea {
/** 图块在地图上的索引 */
index: number;
/** 图块横坐标 */
mapX: number;
/** 图块纵坐标 */
mapY: number;
/**
*
* @param renderable
*/
addTextRenderable(renderable: IMapTextRenderable): void;
/**
*
* @param renderable
*/
removeTextRenderable(renderable: IMapTextRenderable): void;
/**
*
*/
clear(): void;
}
export interface IOnMapTextRenderer {
/**
*
*/
render(): HTMLCanvasElement;
/**
*
* @param x
* @param y
*/
requireBlockArea(x: number, y: number): Readonly<IMapTextArea>;
/**
*
*/
needUpdate(): boolean;
/**
*
*/
clear(): void;
/**
*
*/
destroy(): void;
}