Fix tiles rotation that was no longer applied in tile maps (#4315)

This commit is contained in:
D8H
2022-09-22 10:25:38 +02:00
committed by GitHub
parent 50465badd7
commit 52201e2a36
9 changed files with 294 additions and 246 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"TileMapPixiHelper.d.ts","sourceRoot":"","sources":["../../src/render/TileMapPixiHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAEL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAGpC,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GACnE,gBAAgB,GAAG,IAAI;IA6F1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,iBAAiB,CACtB,kBAAkB,EAAE,GAAG,EACvB,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,EACxC,UAAU,EAAE,MAAM,GACjB,IAAI;IAiFP;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAC5B,YAAY,EAAE,IAAI,CAAC,QAAQ,EAC3B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,KAAK,EACrB,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,KAAK,GACjB,IAAI;CAiER"}
{"version":3,"file":"TileMapPixiHelper.d.ts","sourceRoot":"","sources":["../../src/render/TileMapPixiHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAEL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAGpC,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GACnE,gBAAgB,GAAG,IAAI;IA6F1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,iBAAiB,CACtB,kBAAkB,EAAE,GAAG,EACvB,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,EACxC,UAAU,EAAE,MAAM,GACjB,IAAI;IAgFP;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAC5B,YAAY,EAAE,IAAI,CAAC,QAAQ,EAC3B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,KAAK,EACrB,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,KAAK,GACjB,IAAI;CAiER"}

View File

@@ -19,23 +19,29 @@ export declare class TileTextureCache {
flippedDiagonally: boolean,
texture: PIXI.Texture
): void;
/**
* Return the texture to use for the tile with the specified id.
*
* @param tileId The tile identifier
* @returns The texture for the given tile identifier.
*/
findTileTexture(tileId: integer): PIXI.Texture | undefined;
/**
* Return the texture to use for the tile with the specified uid, which can contains
* information about rotation in bits 32, 31 and 30
* (see https://doc.mapeditor.org/en/stable/reference/tmx-map-format/).
*
* @param tileId The tile identifier
* @param flippedHorizontally true if the tile is flipped horizontally.
* @param flippedVertically true if the tile is flipped vertically.
* @param flippedDiagonally true if the tile is flipped diagonally.
* @returns The texture for the given tile identifier and orientation.
* @returns the rotation "D8" number used by Pixi.
* @see https://pixijs.io/examples/#/textures/texture-rotate.js
*/
findTileTexture(
tileId: integer,
getPixiRotate(
flippedHorizontally: boolean,
flippedVertically: boolean,
flippedDiagonally: boolean
): PIXI.Texture | undefined;
): number;
/**
* @return the Tiled tile global uniq identifier.
*/

View File

@@ -1 +1 @@
{"version":3,"file":"TileTextureCache.d.ts","sourceRoot":"","sources":["../../src/render/TileTextureCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAc;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAc;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAc;IAE3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;;IAMvD,UAAU,CACR,MAAM,EAAE,OAAO,EACf,mBAAmB,EAAE,OAAO,EAC5B,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,EAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,GACpB,IAAI;IAUP;;;;;;;;;;OAUG;IACH,eAAe,CACb,MAAM,EAAE,OAAO,EACf,mBAAmB,EAAE,OAAO,EAC5B,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,GACzB,IAAI,CAAC,OAAO,GAAG,SAAS;IA8D3B;;OAEG;IACH,OAAO,CAAC,YAAY;CAkBrB"}
{"version":3,"file":"TileTextureCache.d.ts","sourceRoot":"","sources":["../../src/render/TileTextureCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAc;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAc;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAc;IAE3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;;IAMvD,UAAU,CACR,MAAM,EAAE,OAAO,EACf,mBAAmB,EAAE,OAAO,EAC5B,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,EAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,GACpB,IAAI;IAUP;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS;IAI1D;;;;;;;;;;OAUG;IACH,aAAa,CACX,mBAAmB,EAAE,OAAO,EAC5B,iBAAiB,EAAE,OAAO,EAC1B,iBAAiB,EAAE,OAAO,GACzB,MAAM;IAwBT;;OAEG;IACH,OAAO,CAAC,YAAY;CAkBrB"}

View File

@@ -137,7 +137,7 @@ export class PixiTileMapHelper {
layerIndex: number
): void {
// The extension doesn't handle the Pixi sub-namespace very well.
const pixiTileMap = untypedPixiTileMap as PIXI.tilemap.CompositeRectTileLayer;
const pixiTileMap = untypedPixiTileMap as PIXI.tilemap.CompositeTilemap;
if (!pixiTileMap) return;
pixiTileMap.clear();
@@ -152,17 +152,18 @@ export class PixiTileMapHelper {
if (layer instanceof EditableObjectLayer) {
const objectLayer = layer as EditableObjectLayer;
for (const object of objectLayer.objects) {
const texture = textureCache.findTileTexture(
object.getTileId(),
object.isFlippedHorizontally(),
object.isFlippedVertically(),
object.isFlippedDiagonally()
);
const texture = textureCache.findTileTexture(object.getTileId());
if (texture) {
pixiTileMap.addFrame(
const rotate = textureCache.getPixiRotate(
object.isFlippedHorizontally(),
object.isFlippedVertically(),
object.isFlippedDiagonally()
);
pixiTileMap.tile(
texture,
object.x,
object.y - objectLayer.tileMap.getTileHeight()
object.y - objectLayer.tileMap.getTileHeight(),
{ rotate }
);
}
}
@@ -183,21 +184,19 @@ export class PixiTileMapHelper {
if (tileId === undefined) {
continue;
}
const tileTexture = textureCache.findTileTexture(
tileId,
tileLayer.isFlippedHorizontally(x, y),
tileLayer.isFlippedVertically(x, y),
tileLayer.isFlippedDiagonally(x, y)
);
const tileTexture = textureCache.findTileTexture(tileId);
if (!tileTexture) {
console.warn(`Unknown tile id: ${tileId} at (${x}, ${y})`);
continue;
}
const pixiTilemapFrame = pixiTileMap.addFrame(
tileTexture,
xPos,
yPos
const rotate = textureCache.getPixiRotate(
tileLayer.isFlippedHorizontally(x, y),
tileLayer.isFlippedVertically(x, y),
tileLayer.isFlippedDiagonally(x, y)
);
const pixiTilemapFrame = pixiTileMap.tile(tileTexture, xPos, yPos, {
rotate,
});
const tileDefinition = tileLayer.tileMap.getTileDefinition(tileId);

View File

@@ -35,52 +35,32 @@ export class TileTextureCache {
this._textures.set(globalTileUid, texture);
}
/**
* Return the texture to use for the tile with the specified id.
*
* @param tileId The tile identifier
* @returns The texture for the given tile identifier.
*/
findTileTexture(tileId: integer): PIXI.Texture | undefined {
return this._textures.get(tileId);
}
/**
* Return the texture to use for the tile with the specified uid, which can contains
* information about rotation in bits 32, 31 and 30
* (see https://doc.mapeditor.org/en/stable/reference/tmx-map-format/).
*
* @param tileId The tile identifier
* @param flippedHorizontally true if the tile is flipped horizontally.
* @param flippedVertically true if the tile is flipped vertically.
* @param flippedDiagonally true if the tile is flipped diagonally.
* @returns The texture for the given tile identifier and orientation.
* @returns the rotation "D8" number used by Pixi.
* @see https://pixijs.io/examples/#/textures/texture-rotate.js
*/
findTileTexture(
tileId: integer,
getPixiRotate(
flippedHorizontally: boolean,
flippedVertically: boolean,
flippedDiagonally: boolean
): PIXI.Texture | undefined {
let globalTileUid = this._getGlobalId(
tileId,
flippedHorizontally,
flippedVertically,
flippedDiagonally
);
if (this._textures.has(globalTileUid)) {
return this._textures.get(globalTileUid);
}
// If the texture is not in the cache, it's potentially because its ID
// is a flipped/rotated version of another ID.
const unflippedTexture = this._textures.get(tileId);
// If the tile still can't be found in the cache, it means the ID we got
// is invalid.
if (!unflippedTexture) return undefined;
// Clone the unflipped texture and save it in the cache
const frame = unflippedTexture.frame.clone();
const orig = unflippedTexture.orig.clone();
if (flippedDiagonally) {
const width = orig.width;
orig.width = orig.height;
orig.height = width;
}
const trim = orig.clone();
// Get the rotation "D8" number.
// See https://pixijs.io/examples/#/textures/texture-rotate.js
): number {
let rotate = 0;
if (flippedDiagonally) {
rotate = 10;
@@ -101,16 +81,7 @@ export class TileTextureCache {
rotate = 4;
}
}
const flippedTexture = new PIXI.Texture(
unflippedTexture.baseTexture,
frame,
orig,
trim,
rotate
);
this._textures.set(globalTileUid, flippedTexture);
return flippedTexture;
return rotate;
}
/**

View File

@@ -1,29 +1,23 @@
// https://github.com/pixijs/tilemap
import {
CanvasTileRenderer,
CompositeRectTileLayer,
GraphicsLayer,
IMultiTextureOptions,
MultiTextureResource,
RectTileGeom,
RectTileLayer,
RectTileShader,
TileRenderer,
ZLayer,
CanvasTileRenderer,
CompositeTilemap,
Tilemap,
TilemapGeometry,
TilemapShader,
TileRenderer,
settings,
} from './pixi-tilemap';
declare module 'pixi.js' {
export namespace tilemap {
export { CanvasTileRenderer };
export { CompositeRectTileLayer };
export { GraphicsLayer };
export { IMultiTextureOptions };
export { MultiTextureResource };
export { RectTileGeom };
export { RectTileLayer };
export { RectTileShader };
export { TileRenderer };
export { ZLayer };
export { CanvasTileRenderer };
export { CompositeTilemap };
export { Tilemap };
export { TilemapGeometry };
export { TilemapShader };
export { TileRenderer };
export { settings };
}
}

View File

@@ -1,193 +1,271 @@
import PIXI = GlobalPIXIModule.PIXI;
export declare class CanvasTileRenderer {
renderer: PIXI.Renderer;
renderer: PIXI.AbstractRenderer;
tileAnim: number[];
dontUseTransform: boolean;
constructor(renderer: PIXI.Renderer);
}
export declare class CompositeRectTileLayer extends PIXI.Container {
constructor(zIndex?: number, bitmaps?: Array<PIXI.Texture>, texPerChild?: number);
z: number;
// @ts-ignore Maybe it's a compatibility issue with the PIXI version we are using
zIndex: number;
modificationMarker: number;
shadowColor: Float32Array;
_globalMat: PIXI.Matrix;
_lastLayer: RectTileLayer;
texPerChild: number;
tileAnim: number[];
initialize(zIndex?: number, bitmaps?: Array<PIXI.Texture>, texPerChild?: number): void;
setBitmaps(bitmaps: Array<PIXI.Texture>): void;
clear(): void;
addRect(textureIndex: number, u: number, v: number, x: number, y: number, tileWidth: number, tileHeight: number, animX?: number, animY?: number, rotate?: number, animWidth?: number, animHeight?: number): this;
constructor(renderer: PIXI.AbstractRenderer);
}
declare abstract class CanvasRenderer extends PIXI.AbstractRenderer {}
declare class CompositeTilemap extends PIXI.Container {
readonly texturesPerTilemap: number;
tileAnim: [number, number];
protected lastModifiedTilemap: Tilemap;
private modificationMarker;
private shadowColor;
private _globalMat;
constructor(tileset?: Array<PIXI.BaseTexture>);
tileset(tileTextures: Array<PIXI.BaseTexture>): this;
clear(): this;
tileRotate(rotate: number): this;
tileAnimX(offset: number, count: number): this;
tileAnimY(offset: number, count: number): this;
addFrame(texture_: PIXI.Texture | String | number, x: number, y: number, animX?: number, animY?: number, animWidth?: number, animHeight?: number): this;
renderCanvas(renderer: any): void;
tile(
tileTexture: PIXI.Texture | string | number,
x: number,
y: number,
options?: {
u?: number;
v?: number;
tileWidth?: number;
tileHeight?: number;
animX?: number;
animY?: number;
rotate?: number;
animCountX?: number;
animCountY?: number;
alpha?: number;
}
): this;
renderCanvas(renderer: CanvasRenderer): void;
render(renderer: PIXI.Renderer): void;
isModified(anim: boolean): boolean;
clearModify(): void;
}
export declare const Constant: {
maxTextures: number;
bufferSize: number;
boundSize: number;
boundCountPerBuffer: number;
addFrame(
texture: PIXI.Texture | string | number,
x: number,
y: number,
animX?: number,
animY?: number,
animWidth?: number,
animHeight?: number,
alpha?: number
): this;
addRect(
textureIndex: number,
u: number,
v: number,
x: number,
y: number,
tileWidth: number,
tileHeight: number,
animX?: number,
animY?: number,
rotate?: number,
animWidth?: number,
animHeight?: number
): this;
setBitmaps: (tileTextures: Array<PIXI.BaseTexture>) => this;
get texPerChild(): number;
}
export { CompositeTilemap as CompositeRectTileLayer };
export { CompositeTilemap };
export declare const Constant: {
TEXTURES_PER_TILEMAP: number;
TEXTILE_DIMEN: number;
TEXTILE_UNITS: number;
TEXTILE_SCALE_MODE: PIXI.SCALE_MODES;
use32bitIndex: boolean;
SCALE_MODE: PIXI.SCALE_MODES;
DO_CLEAR: boolean;
};
export declare function fillSamplers(shader: TilemapShader, maxTextures: number): void;
export declare function generateFragmentSrc(maxTextures: number, fragmentSrc: string): string;
export declare function generateSampleSrc(maxTextures: number): string;
export declare class GraphicsLayer extends PIXI.Graphics {
constructor(zIndex: number);
renderCanvas(renderer: any): void;
isModified(anim: boolean): boolean;
clearModify(): void;
}
export declare interface IMultiTextureOptions {
maxTextures: number;
boundSize: number;
boundCountPerBuffer: number;
boundSize: number;
bufferSize: number;
DO_CLEAR?: boolean;
}
export declare class MultiTextureResource extends PIXI.Resource {
constructor(options: IMultiTextureOptions);
DO_CLEAR: boolean;
boundSize: number;
_clearBuffer: Uint8Array;
bind(baseTexture: PIXI.BaseTexture): void;
baseTex: PIXI.BaseTexture;
boundSprites: Array<PIXI.Sprite>;
dirties: Array<number>;
setTexture(ind: number, texture: PIXI.Texture): void;
upload(renderer: PIXI.Renderer, texture: PIXI.BaseTexture, glTexture: PIXI.GLTexture): boolean;
}
export declare const pixi_tilemap: {
};
export declare function fillSamplers(
shader: TilemapShader,
maxTextures: number
): void;
export declare function generateFragmentSrc(
maxTextures: number,
fragmentSrc: string
): string;
export declare const pixi_tilemap: {
CanvasTileRenderer: typeof CanvasTileRenderer;
CompositeRectTileLayer: typeof CompositeRectTileLayer;
CompositeRectTileLayer: typeof CompositeTilemap;
CompositeTilemap: typeof CompositeTilemap;
Constant: {
maxTextures: number;
bufferSize: number;
boundSize: number;
boundCountPerBuffer: number;
use32bitIndex: boolean;
SCALE_MODE: PIXI.SCALE_MODES;
DO_CLEAR: boolean;
TEXTURES_PER_TILEMAP: number;
TEXTILE_DIMEN: number;
TEXTILE_UNITS: number;
TEXTILE_SCALE_MODE: PIXI.SCALE_MODES;
use32bitIndex: boolean;
DO_CLEAR: boolean;
maxTextures: number;
boundSize: number;
boundCountPerBuffer: number;
};
GraphicsLayer: typeof GraphicsLayer;
MultiTextureResource: typeof MultiTextureResource;
RectTileLayer: typeof RectTileLayer;
TextileResource: typeof TextileResource;
MultiTextureResource: typeof TextileResource;
RectTileLayer: typeof Tilemap;
Tilemap: typeof Tilemap;
TilemapShader: typeof TilemapShader;
RectTileShader: typeof RectTileShader;
RectTileGeom: typeof RectTileGeom;
TilemapGeometry: typeof TilemapGeometry;
RectTileShader: typeof TilemapShader;
RectTileGeom: typeof TilemapGeometry;
TileRenderer: typeof TileRenderer;
ZLayer: typeof ZLayer;
};
export declare const POINT_STRUCT_SIZE = 12;
export declare class RectTileGeom extends PIXI.Geometry {
vertSize: number;
vertPerQuad: number;
stride: number;
lastTimeAccess: number;
constructor();
buf: PIXI.Buffer;
}
export declare class RectTileLayer extends PIXI.Container {
constructor(zIndex: number, texture: PIXI.Texture | Array<PIXI.Texture>);
// @ts-ignore Maybe it's a compatibility issue with the PIXI version we are using
zIndex: number;
modificationMarker: number;
_$_localBounds: PIXI.Bounds;
};
export declare const POINT_STRUCT_SIZE: number;
export declare const settings: {
TEXTURES_PER_TILEMAP: number;
TEXTILE_DIMEN: number;
TEXTILE_UNITS: number;
TEXTILE_SCALE_MODE: PIXI.SCALE_MODES;
use32bitIndex: boolean;
DO_CLEAR: boolean;
maxTextures: number;
boundSize: number;
boundCountPerBuffer: number;
};
export declare interface TextileOptions {
TEXTILE_DIMEN: number;
TEXTILE_UNITS: number;
DO_CLEAR?: boolean;
}
export declare class TextileResource extends PIXI.Resource {
baseTexture: PIXI.BaseTexture;
private readonly doClear;
private readonly tileDimen;
private readonly tiles;
private _clearBuffer;
constructor(options?: TextileOptions);
tile(index: number, texture: PIXI.BaseTexture): void;
bind(baseTexture: PIXI.BaseTexture): void;
upload(
renderer: PIXI.Renderer,
texture: PIXI.BaseTexture,
glTexture: PIXI.GLTexture
): boolean;
}
declare class Tilemap extends PIXI.Container {
shadowColor: Float32Array;
_globalMat: PIXI.Matrix;
pointsBuf: Array<number>;
hasAnim: boolean;
textures: Array<PIXI.Texture>;
tileAnim: [number, number];
modificationMarker: number;
offsetX: number;
offsetY: number;
compositeParent: boolean;
initialize(zIndex: number, textures: PIXI.Texture | Array<PIXI.Texture>): void;
clear(): void;
addFrame(texture_: PIXI.Texture | String | number, x: number, y: number, animX: number, animY: number): boolean;
addRect(textureIndex: number, u: number, v: number, x: number, y: number, tileWidth: number, tileHeight: number, animX?: number, animY?: number, rotate?: number, animCountX?: number, animCountY?: number): this;
protected tileset: Array<PIXI.BaseTexture>;
protected readonly tilemapBounds: PIXI.Bounds;
protected hasAnimatedTile: boolean;
private pointsBuf;
constructor(tileset: PIXI.BaseTexture | Array<PIXI.BaseTexture>);
getTileset(): Array<PIXI.BaseTexture>;
setTileset(tileset?: PIXI.BaseTexture | Array<PIXI.BaseTexture>): this;
clear(): this;
tile(
tileTexture: number | string | PIXI.Texture | PIXI.BaseTexture,
x: number,
y: number,
options?: {
u?: number;
v?: number;
tileWidth?: number;
tileHeight?: number;
animX?: number;
animY?: number;
rotate?: number;
animCountX?: number;
animCountY?: number;
alpha?: number;
}
): this;
tileRotate(rotate: number): void;
tileAnimX(offset: number, count: number): void;
tileAnimY(offset: number, count: number): void;
renderCanvas(renderer: any): void;
renderCanvasCore(renderer: any): void;
vbId: number;
vb: RectTileGeom;
vbBuffer: ArrayBuffer;
vbArray: Float32Array;
vbInts: Uint32Array;
destroyVb(): void;
tileAlpha(alpha: number): void;
renderCanvas(renderer: CanvasRenderer): void;
renderCanvasCore(renderer: CanvasRenderer): void;
private vbId;
private vb;
private vbBuffer;
private vbArray;
private vbInts;
private destroyVb;
render(renderer: PIXI.Renderer): void;
renderWebGLCore(renderer: PIXI.Renderer, plugin: TileRenderer): void;
isModified(anim: boolean): boolean;
clearModify(): void;
protected _calculateBounds(): void;
getLocalBounds(rect?: PIXI.Rectangle): PIXI.Rectangle;
destroy(options?: any): void;
}
export declare class RectTileShader extends TilemapShader {
constructor(maxTextures: number);
}
export declare abstract class TilemapShader extends PIXI.Shader {
destroy(options?: PIXI.IDestroyOptions): void;
addFrame(
texture: PIXI.Texture | string | number,
x: number,
y: number,
animX: number,
animY: number
): boolean;
addRect(
textureIndex: number,
u: number,
v: number,
x: number,
y: number,
tileWidth: number,
tileHeight: number,
animX?: number,
animY?: number,
rotate?: number,
animCountX?: number,
animCountY?: number,
alpha?: number
): this;
}
export { Tilemap as RectTileLayer };
export { Tilemap };
export declare class TilemapGeometry extends PIXI.Geometry {
vertSize: number;
vertPerQuad: number;
stride: number;
lastTimeAccess: number;
constructor();
buf: any;
}
export declare class TilemapShader extends PIXI.Shader {
maxTextures: number;
constructor(maxTextures: number, shaderVert: string, shaderFrag: string);
}
export declare class TileRenderer extends PIXI.ObjectRenderer {
renderer: PIXI.Renderer;
gl: WebGLRenderingContext;
sn: number;
indexBuffer: PIXI.Buffer;
ibLen: number;
constructor(maxTextures: number);
}
export declare class TileRenderer extends PIXI.ObjectRenderer {
readonly renderer: PIXI.Renderer;
tileAnim: number[];
texLoc: Array<number>;
rectShader: RectTileShader;
texResources: Array<MultiTextureResource>;
private ibLen;
private indexBuffer;
private shader;
private textiles;
constructor(renderer: PIXI.Renderer);
initBounds(): void;
bindTexturesWithoutRT(renderer: PIXI.Renderer, shader: TilemapShader, textures: Array<PIXI.Texture>): void;
bindTextures(renderer: PIXI.Renderer, shader: TilemapShader, textures: Array<PIXI.Texture>): void;
bindTileTextures(
renderer: PIXI.Renderer,
textures: Array<PIXI.BaseTexture>
): void;
start(): void;
createVb(): RectTileGeom;
checkIndexBuffer(size: number, vb?: RectTileGeom): void;
createVb(): TilemapGeometry;
getShader(): TilemapShader;
destroy(): void;
}
export declare class ZLayer extends PIXI.Container {
constructor(tilemap: PIXI.Container, zIndex: number);
tilemap: any;
z: number;
// @ts-ignore Maybe it's a compatibility issue with the PIXI version we are using
zIndex: number;
_previousLayers: number;
canvasBuffer: HTMLCanvasElement;
_tempRender: any;
_lastAnimationFrame: number;
layerTransform: PIXI.Matrix;
clear(): void;
cacheIfDirty(): void;
renderCanvas(renderer: any): void;
}
checkIndexBuffer(size: number, _vb?: TilemapGeometry): void;
private makeTextiles;
}