Skip to content

Instantly share code, notes, and snippets.

@pgainullin
Created March 9, 2021 07:55
Show Gist options
  • Save pgainullin/bdf8ac141e9501958c993bb4467685fb to your computer and use it in GitHub Desktop.
Save pgainullin/bdf8ac141e9501958c993bb4467685fb to your computer and use it in GitHub Desktop.
Illustration of flip flags for Tiled working incorrectly
import "dart:typed_data";
import 'dart:convert';
void main() {
const int FLIPPED_HORIZONTALLY_FLAG = 0x80000000;
const int FLIPPED_VERTICALLY_FLAG = 0x40000000;
const int FLIPPED_DIAGONALLY_FLAG = 0x20000000;
String data = "PAAAAAAAAAAAAAAAAAAAADsAAAA7AAAAOgAAADEAAAA8AAAALgAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAA7A" +
"AAAAAAAAAAAAAAAAAAAOwAAADMAAAA0AAAANwAAAAAAAAA2AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAANQAAAD0AAAA0AAAAAAAAAAAAAA" +
"AyAAAAAAAAAAAAAAAAAAAAOAAAADkAAAAAAAAAAAAAAAAAAAAAAAAAMgAAADYAAAA4AAAANwAAAAAAAAAAAAAAAAAAADUAAAAAAAAAAA" +
"AAAAAAAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAHgAAAB4AAAAAAAAAMgAAADMAAAAxAAAAAAAAAAAAAAA" +
"sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAADgKgAAICQAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAJAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAsAADgKgAAUAAAAAAAAAAAHgAAIB4AACAAAAAAAAAAAAAAAAAkAADgJQAAwCQAAAAAAAAAAAAAAAAAAAAkAAAgJAAAIAAAAAAkAAAQJAA" +
"AEAAAAAAAAAAAHgAAICAAAAAkAADgAAAAAAAAAAAmAAAgAAAAAAAAAAAkAAAgJAAAICUAACAkAAAQAAAAAAAAAAAkAAAQJQAAEAAAAAAAAA" +
"AAAAAAACQAACAkAAAgAAAAACQAABAeAAAgJAAAIAAAAAAAAAAAAAAAACQAABAkAAAQAAAAACQAAAAAAAAAHgAAAB4AAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAABAtAADgJAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAACQAACAkAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAgCAAAAAfAAAAJAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAQJQAA4CUAACAkAAAQAAAAAAAAAAAAAAAAAAAAAA==";
var bytes = _decodeBase64(data);
var tileIndex = 0;
for (var y = 0; y < 16; ++y) {
for (var x = 0; x < 16; ++x) {
var globalTileId = bytes[tileIndex] |
bytes[tileIndex + 1] << 8 |
bytes[tileIndex + 2] << 16 |
bytes[tileIndex + 3] << 24;
var unadjustedGid = globalTileId;
tileIndex += 4;
// Read out the flags
final flippedHorizontally = (globalTileId & FLIPPED_HORIZONTALLY_FLAG) ==
FLIPPED_HORIZONTALLY_FLAG;
final flippedVertically =
(globalTileId & FLIPPED_VERTICALLY_FLAG) == FLIPPED_VERTICALLY_FLAG;
final flippedDiagonally =
(globalTileId & FLIPPED_DIAGONALLY_FLAG) == FLIPPED_DIAGONALLY_FLAG;
// Save rotation flags
// tileFlips[y][x] = Flips(
// flippedHorizontally,
// flippedVertically,
// flippedDiagonally,
// );
// Clear the flags
globalTileId &= ~(FLIPPED_HORIZONTALLY_FLAG |
FLIPPED_VERTICALLY_FLAG |
FLIPPED_DIAGONALLY_FLAG);
if (globalTileId != unadjustedGid) {
print('[${tileIndex}:] gid: $globalTileId (before: $unadjustedGid)');
}
if (globalTileId > 100) {
print(
'[${tileIndex}:] *Incorrect id* after: $globalTileId (before: $unadjustedGid)');
}
if (flippedHorizontally || flippedVertically || flippedDiagonally) {
print(
'[${tileIndex}:] horizontal: $flippedHorizontally, vertical: $flippedVertically, diagonal: $flippedDiagonally');
}
}
}
}
Uint8List _decodeBase64(String input) {
final sanitized = input.trim();
return base64.decode(sanitized);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment