Skip to content

Commit

Permalink
WIP Moving sprite islands
Browse files Browse the repository at this point in the history
  • Loading branch information
Jbudone committed Jun 10, 2018
1 parent 7867835 commit fd79351
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 23 deletions.
64 changes: 41 additions & 23 deletions resourceBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ const packageRoutines = {
output: 'dist/resources/' + sheet.output,
dependencies: sheet.dependencies,
newDependencies: sheet.newDependencies,
oldSprites: sheet.oldSprites,
sprites: sheet.sprites,
tilesize: sheet.tilesize,
sheetType: 'generatedTilesheet',
Expand Down Expand Up @@ -1028,7 +1029,9 @@ const processGeneratedTilesheet = (package) => {

// FIXME: Package sprites are being overwritten in toolbelt; need to save a copy of sprites: package.oldSprites
// and use those here
const oldSprites = package.sprites;
const oldSprites = package.oldSprites,
modifiedSprites = package.sprites;

debugger;

package.dependencies = [];
Expand Down Expand Up @@ -1058,8 +1061,8 @@ const processGeneratedTilesheet = (package) => {

minY = Math.min(minY, y);
minX = Math.min(minX, x);
maxY = Math.max(minY, y);
maxX = Math.max(minX, x);
maxY = Math.max(maxY, y);
maxX = Math.max(maxX, x);
});

dependency.sprites.forEach((sprite) => {
Expand All @@ -1068,7 +1071,7 @@ const processGeneratedTilesheet = (package) => {
dstX = (x - minX),
dstY = (y - minY + yOffset);

const existingSprite = oldSprites.find((s) => s.source === source && s.sprite === sprite);
const existingSprite = modifiedSprites.find((s) => s.source === source && s.sprite === sprite);

if (existingSprite) {
dstX = existingSprite.dstX / package.tilesize;
Expand Down Expand Up @@ -1172,22 +1175,30 @@ const processGeneratedTilesheet = (package) => {
tilesize = parseInt(package.tilesize, 10),
oldColumns = parseInt(package.columns, 10),
oldRows = parseInt(package.rows, 10);
oldSprites.forEach((sprite) => {
const newSpriteInfo = package.sprites.find((s) => s.sprite === sprite.sprite && s.source === sprite.source),
oldSpriteX = sprite.dstX / tilesize,
oldSpriteY = sprite.dstY / tilesize,
oldSprite = oldSpriteY * oldColumns + oldSpriteX;

if (newSpriteInfo) {
const newSpriteX = newSpriteInfo.dstX / tilesize,
newSpriteY = newSpriteInfo.dstY / tilesize,
newSprite = newSpriteY * newColumns + newSpriteX;

spriteTranslations[oldSprite] = newSprite;
} else {
spriteTranslations[oldSprite] = null; // Deleted
}
});

if (oldSprites) {
oldSprites.forEach((sprite) => {
const newSpriteInfo = package.sprites.find((s) => s.sprite === sprite.sprite && s.source === sprite.source),
oldSpriteX = sprite.dstX / tilesize,
oldSpriteY = sprite.dstY / tilesize,
oldSprite = oldSpriteY * oldColumns + oldSpriteX;

if (newSpriteInfo) {
const newSpriteX = newSpriteInfo.dstX / tilesize,
newSpriteY = newSpriteInfo.dstY / tilesize,
newSprite = newSpriteY * newColumns + newSpriteX;

spriteTranslations[oldSprite] = newSprite;
} else {
spriteTranslations[oldSprite] = null; // Deleted
}
});
}

// Need to update our spriteIslands and data sprite id's
if (oldColumns !== newColumns) {
debugger;
}

package.columns = newColumns;
package.rows = newRows;
Expand Down Expand Up @@ -1269,10 +1280,17 @@ const processGeneratedTilesheet = (package) => {
if (g >= tilesetGid && g <= tilesetLastGid) {
foundTilesetInLayer = true;

const localSprite = g - tilesetGid,
translatedSprite = spriteTranslations[localSprite];
const localSprite = g - tilesetGid;
let translatedSprite = spriteTranslations[localSprite];

let translated = true;
if (translatedSprite === undefined) {
translated = false;
translatedSprite = localSprite; // Hasn't moved? No sprite here?
}

console.log(`Found tileset in area: ${area.file} - ${g} : ${localSprite} -> ${translatedSprite}`);
console.log(`Found tileset in area: ${area.file}: ${g} - ${tilesetGid} == ${localSprite} : ${localSprite} -> ${translatedSprite} (translated: ${translatedSprite - localSprite}) ==> ${tilesetGid + translatedSprite} ${ translated ? "" : "SPRITE NOT FOUND!" }`);
layerDataSplit[i] = tilesetGid + translatedSprite;
}
}

Expand Down
4 changes: 4 additions & 0 deletions tools/toolbelt/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
// Probably best to have post-processing per-extraction group for dependency. Just copies sheet's
// postprocessing initially, and can be edited
//
// - FIXME: Translating sprite island and changing minX/minY causes issues; changing columns is an
// issue? -- If oldColumns != newColumns, probably need to also go through oldSprites for sprite
// islands/collisions/etc. and update oldSprite -> newSprite pos ( % columns)
//
// - Trigger ResourceBuilder on save? Or fuckingtaskrunner to auto run it?
// - Update maps
// - Update other things??? (eg. icons, items, etc.) -- may be better to disallow this for now,
Expand Down
3 changes: 3 additions & 0 deletions tools/toolbelt/js/modTilesheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,9 @@ const ModTilesheet = (function(containerEl){
const tilesize = parseInt(resource.tilesize, 10);

// Copy over sprites, spriteGroups
// NOTE: Need to save oldSprites for resourceBuilder to translate external assets (eg. maps) from old sprite
// positions to new positions
resource.oldSprites = resource.sprites;
resource.sprites = [];
sprites.forEach((sprite) => {
resource.sprites.push({
Expand Down

0 comments on commit fd79351

Please sign in to comment.