Newer
Older
rpg / packages / engine / src / render / IsoDepthLayer.ts
import { Container } from 'pixi.js';

/**
 * Контейнер с сортировкой глубины для изометрической сцены.
 * Глубина = tx + ty (классика изометрии 2:1): чем юго-восточнее объект,
 * тем «ближе к камере» он рисуется. Герой, NPC, деревья и прочие сущности
 * добавляются сюда, а не прямо в слой карты.
 *
 * Если объект движется, каждый кадр (или при смене тайла) вызывайте setDepth.
 */
export class IsoDepthLayer extends Container {
    constructor() {
        super();
        this.sortableChildren = true;
    }

    /** Добавить объект и выставить глубину по тайловым координатам. */
    add(view: Container, tx: number, ty: number): Container {
        this.setDepth(view, tx, ty);
        this.addChild(view);
        return view;
    }

    /** Обновить глубину объекта по тайловым координатам. */
    setDepth(view: Container, tx: number, ty: number): void {
        view.zIndex = tx + ty;
    }
}