mirror of
https://github.com/boxgaming/qbjs.git
synced 2024-09-18 19:44:45 +00:00
GX updates - animated tile and map resize support
This commit is contained in:
parent
37aa78a7c9
commit
655a4b4f3d
1 changed files with 51 additions and 51 deletions
102
gx/gx.js
102
gx/gx.js
|
@ -1023,8 +1023,10 @@ var GX = new function() {
|
||||||
.then((responseJson)=>{return responseJson});
|
.then((responseJson)=>{return responseJson});
|
||||||
}
|
}
|
||||||
|
|
||||||
function _mapLayerInit() {
|
function _mapLayerInit(cols, rows) {
|
||||||
var layerSize = _map.rows * _map.columns;
|
if (cols == undefined) { cols = _map.columns; }
|
||||||
|
if (rows == undefined) { rows = _map.rows; }
|
||||||
|
var layerSize = rows * cols;
|
||||||
var layerData = [];
|
var layerData = [];
|
||||||
for (var i=0; i < layerSize; i++) {
|
for (var i=0; i < layerSize; i++) {
|
||||||
layerData.push({ tile: 0});
|
layerData.push({ tile: 0});
|
||||||
|
@ -1085,50 +1087,44 @@ var GX = new function() {
|
||||||
_map.layers = GX.mapLayers() - 1;
|
_map.layers = GX.mapLayers() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Sub GXMapResize (columns As Integer, rows As Integer)
|
|
||||||
Dim tempMap(GXMapRows * GXMapColumns, GXMapLayers) As GXMapTile
|
|
||||||
Dim m1 As _MEM: m1 = _Mem(__gx_map_layers())
|
|
||||||
Dim m2 As _MEM: m2 = _Mem(tempMap())
|
|
||||||
_MemCopy m1, m1.OFFSET, m1.SIZE To m2, m2.OFFSET
|
|
||||||
_MemFree m1
|
|
||||||
_MemFree m2
|
|
||||||
|
|
||||||
ReDim __gx_map_layers(rows * columns, GXMapLayers) As GXMapTile
|
function _mapResize (columns, rows) {
|
||||||
|
var tempMap = structuredClone(_map_layers);
|
||||||
|
_map_layers = new Array(GX.mapLayers());
|
||||||
|
|
||||||
Dim layer As Integer
|
var maxColumns = 0;
|
||||||
Dim row As Integer
|
var maxRows = 0;
|
||||||
Dim column As Integer
|
if (columns > GX.mapColumns()) {
|
||||||
Dim maxColumns As Integer
|
maxColumns = GX.mapColumns();
|
||||||
Dim maxRows As Integer
|
}
|
||||||
If columns > GXMapColumns Then
|
else {
|
||||||
maxColumns = GXMapColumns
|
maxColumns = columns;
|
||||||
Else
|
}
|
||||||
maxColumns = columns
|
if (rows > GX.mapRows) {
|
||||||
End If
|
maxRows = GX.mapRows();
|
||||||
If rows > GXMapRows Then
|
}
|
||||||
maxRows = GXMapRows
|
else {
|
||||||
Else
|
maxRows = rows;
|
||||||
maxRows = rows
|
}
|
||||||
End If
|
|
||||||
|
|
||||||
Dim blankTile As GXMapTile
|
for (var layer = 1; layer <= GX.mapLayers(); layer++) {
|
||||||
For layer = 1 To GXMapLayers
|
_map_layers[layer-1] = _mapLayerInit(columns, rows);
|
||||||
For row = 0 To maxRows - 1
|
for (var row = 0; row < maxRows; row++) {
|
||||||
For column = 0 To maxColumns - 1
|
for (var column = 0; column < maxColumns; column++) {
|
||||||
If column >= GXMapColumns Or row >= GXMapRows Then
|
if (column >= GX.mapColumns() || row >= GX.mapRows()) {
|
||||||
__gx_map_layers(row * columns + column, layer) = blankTile
|
_map_layers[layer-1][row * columns + column].tile = 0;
|
||||||
Else
|
}
|
||||||
__gx_map_layers(row * columns + column, layer) = tempMap(row * GXMapColumns + column, layer)
|
else { //if (GX.mapColumns() > column && GX.mapRows() > rows) {
|
||||||
End If
|
_map_layers[layer-1][row * columns + column].tile = tempMap[layer-1][row * GX.mapColumns() + column].tile;
|
||||||
Next column
|
}
|
||||||
Next row
|
}
|
||||||
Next layer
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_map.columns = columns;
|
||||||
|
_map.rows = rows;
|
||||||
|
}
|
||||||
|
|
||||||
__gx_map.columns = columns
|
|
||||||
__gx_map.rows = rows
|
|
||||||
End Sub
|
|
||||||
*/
|
|
||||||
function _mapDraw() {
|
function _mapDraw() {
|
||||||
if (_mapRows() < 1) { return; }
|
if (_mapRows() < 1) { return; }
|
||||||
|
|
||||||
|
@ -1462,28 +1458,26 @@ var GX = new function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _tilesetAnimationFrames (tileId, tileFrames /* QB Array */) {
|
function _tilesetAnimationFrames (tileId, tileFrames /* QB Array */) {
|
||||||
// TODO: create an overriden version of this method that returns a standard javascript array
|
|
||||||
if (tileId < 0 || tileId > GX.tilesetRows() * GX.tilesetColumns()) { return 0; }
|
if (tileId < 0 || tileId > GX.tilesetRows() * GX.tilesetColumns()) { return 0; }
|
||||||
|
|
||||||
var tileFrames = GX.initArray([0], { tileId: 0, firstFrame: 0, nextFrame: 0 });
|
GX.resizeArray(tileFrames, [{l:0,u:0}], 0);
|
||||||
var frameCount = 0;
|
var frameCount = 0;
|
||||||
var frame = _tileset_tiles[tileId-1].animationId;
|
var frame = _tileset_tiles[tileId-1].animationId;
|
||||||
while (frame > 0) {
|
while (frame > 0) {
|
||||||
frameCount = frameCount + 1
|
frameCount = frameCount + 1
|
||||||
GX.resizeArray(tileFrames, [frameCount], { tileId: 0, firstFrame: 0, nextFrame: 0 }, true);
|
GX.resizeArray(tileFrames, [{l:0,u:frameCount}], 0, true);
|
||||||
GX.arrayValue(tileFrames, [frameCount]).value = _tileset_animations[frame-1].tileId;
|
GX.arrayValue(tileFrames, [frameCount]).value = _tileset_animations[frame-1].tileId;
|
||||||
frame = _tileset_animations[frame-1].nextFrame;
|
frame = _tileset_animations[frame-1].nextFrame;
|
||||||
}
|
}
|
||||||
return frameCount;
|
return frameCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _tilesetAnimationSpeed (tileId) {
|
|
||||||
if (tileId > GX.tilesetRows() * GX.tilesetColumns()) { return; }
|
|
||||||
return _tileset_tiles[tileId-1].animationSpeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _tilesetAnimationSpeed (tileId, speed) {
|
function _tilesetAnimationSpeed (tileId, speed) {
|
||||||
_tileset_tiles[tileId-1].animationSpeed = speed;
|
if (tileId > GX.tilesetRows() * GX.tilesetColumns()) { return; }
|
||||||
|
if (speed != undefined) {
|
||||||
|
_tileset_tiles[tileId-1].animationSpeed = speed;
|
||||||
|
}
|
||||||
|
return _tileset_tiles[tileId-1].animationSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _tileFrame (tileId) {
|
function _tileFrame (tileId) {
|
||||||
|
@ -2581,6 +2575,7 @@ var GX = new function() {
|
||||||
this.mapLayerInit = _mapLayerInit;
|
this.mapLayerInit = _mapLayerInit;
|
||||||
this.mapLayerVisible = _mapLayerVisible;
|
this.mapLayerVisible = _mapLayerVisible;
|
||||||
this.mapLayers = _mapLayers;
|
this.mapLayers = _mapLayers;
|
||||||
|
this.mapResize = _mapResize;
|
||||||
this.mapRows = _mapRows;
|
this.mapRows = _mapRows;
|
||||||
this.mapTile = _mapTile;
|
this.mapTile = _mapTile;
|
||||||
|
|
||||||
|
@ -2593,6 +2588,11 @@ var GX = new function() {
|
||||||
this.tilesetRows = _tilesetRows;
|
this.tilesetRows = _tilesetRows;
|
||||||
this.tilesetWidth = _tilesetWidth;
|
this.tilesetWidth = _tilesetWidth;
|
||||||
this.tilesetReplaceImage = _tilesetReplaceImage;
|
this.tilesetReplaceImage = _tilesetReplaceImage;
|
||||||
|
this.tilesetAnimationCreate = _tilesetAnimationCreate;
|
||||||
|
this.tilesetAnimationAdd = _tilesetAnimationAdd;
|
||||||
|
this.tilesetAnimationRemove = _tilesetAnimationRemove;
|
||||||
|
this.tilesetAnimationFrames = _tilesetAnimationFrames;
|
||||||
|
this.tilesetAnimationSpeed = _tilesetAnimationSpeed;
|
||||||
|
|
||||||
this.fontCharSpacing = _fontCharSpacing;
|
this.fontCharSpacing = _fontCharSpacing;
|
||||||
this.fontCreate = _fontCreate;
|
this.fontCreate = _fontCreate;
|
||||||
|
|
Loading…
Reference in a new issue