Skip to content

Commit

Permalink
import csv maps via dnd
Browse files Browse the repository at this point in the history
Make some refactoring too
  • Loading branch information
ufdada committed Mar 28, 2015
1 parent ef206b7 commit 6984ae4
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 141 deletions.
150 changes: 148 additions & 2 deletions js/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -792,8 +792,12 @@ function Map(sizex, sizey) {
reader.onload = function(evt) {
try {
map.importData(atob(this.result));
} catch(exception) {
alert("Could not load map.\n\n" + exception.message);
} catch(e) {
try {
map.importCsvData(this.result);
} catch(exception) {
alert("Could not load map.\n\n" + exception.message);
}
}
};
}
Expand Down Expand Up @@ -947,4 +951,146 @@ function Map(sizex, sizey) {
undo.disabled = map.undoHistory.length > 0 ? "" : "disabled";
redo.disabled = map.redoHistory.length > 0 ? "" : "disabled";
};

this.importCsvData = function(csvdata) {
var bordersize = parseInt(document.getElementById("csvborder").value) || 3;
var calcRooms = [];
var usedCores = [];
var mapData = {
version: "1.4",
author: "",
border: 1,
tiles: [],
tileIds: [],
map: []
};

var rows = csvdata.split("\n");
if (rows.length > bordersize * bordersize) {
for (var i = bordersize; i < rows.length - bordersize; i++) {
var rowData = [];
var cells = rows[i].split(",");

for (var j = bordersize; j < cells.length - bordersize; j++) {
var tileName = "";
var cell = {};
switch(cells[j].substring(0,2)) {
case 'go':
tileName = "gold";
break;
case 'di':
tileName = "dirt";
break;
case 'ch':
tileName = "chasm";
break;
case 'wa':
tileName = "water";
break;
case 'ga':
tileName = "gateway";
break;
case 'la':
tileName = "lava";
break;
case 'co':
tileName = "core_p1";
break;
case 'im':
tileName = "impenetrable";
break;
case 'br':
tileName = "brimstone";
break;
case 'se':
tileName = "sacred_earth";
break;
case 'nb':
tileName = "stone_bridge";
break;
case 'pf':
tileName = "permafrost";
break;
case 'sa':
tileName = "sand";
break;
case 'sh':
tileName = "archiveshrine";
break;
case 'sg':
tileName = "goldshrine";
break;
case 'ss':
tileName = "siegeshrine";
break;
case 'sd':
tileName = "defencepartshrine";
break;
case 'sm':
tileName = "manashrine";
break;
case 'sp':
tileName = "perceptionshrine";
break;
case '':
tileName = "earth";
break;
default:
console.error("Tile " + cells[j] + " could not be converted!");
tileName = "earth";
}

var tileConfig = tiles[tileName];
if (tileConfig && tileConfig.sizex * tileConfig.sizey > 1) {
calcRooms.push([i - bordersize, j - bordersize]);
}

var tileTypeId = terrain.getMapTileId(mapData, tileName);
cell["tile"] = tileTypeId;
rowData.push(cell);
}
mapData.map.push(rowData);
}

for (var k = 0; k < calcRooms.length; k++) {
var y = calcRooms[k][0];
var x = calcRooms[k][1];
var tileId = mapData.map[y][x]['tile'];
var tile = mapData.tiles[tileId];
// There is no tile left or above it, so lets create a new room
if (isNaN(parseInt(mapData.map[y][x]['data-id'])))
{
// new room
var id = new Date().getTime() - parseInt(Math.random() * 3000000).toString();
mapData.tileIds.push(id);
var roomTile = tiles[tile];
var coreTile = '';

var match = tile.match(/core_p([1-8])/);
if (match) {
var player = parseInt(match[1]);
if (usedCores.indexOf(player) != -1 && player < 5) {
player = usedCores.length + 1;
tile = tile.replace(/_p([1-8])/, "_p" + player);
mapData.tiles.push(tile);
tileId = mapData.tiles.length - 1;
}
usedCores.push(player);
}

for (var posy = 0; posy < roomTile.sizey; posy++) {
for (var posx = 0; posx < roomTile.sizex; posx++) {
mapData.map[y + posy][x + posx]['tile'] = tileId;
mapData.map[y + posy][x + posx]['data-id'] = mapData.tileIds.length - 1;
}
}
}
}
terrain.resetRedoHistory();
terrain.importData(JSON.stringify(mapData));
} else {
alert("Please select a valid map file");
return;
}
};
}
140 changes: 1 addition & 139 deletions js/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,6 @@ function toggleOptions(show) {

function importCsv() {
var files = document.getElementById("csv").files;
var bordersize = parseInt(document.getElementById("csvborder").value) || 3;

if (files.length === 1) {

Expand All @@ -411,144 +410,7 @@ function importCsv() {
mapNameInput.value = mapName;

reader.onload = function(e) {
var calcRooms = [];
var usedCores = [];
var mapData = {
version: "1.4",
author: "",
border: 1,
tiles: [],
tileIds: [],
map: []
};

var rows = this.result.split("\n");
if (rows.length > bordersize * bordersize) {
for (var i = bordersize; i < rows.length - bordersize; i++) {
var rowData = [];
var cells = rows[i].split(",");

for (var j = bordersize; j < cells.length - bordersize; j++) {
var tileName = "";
var cell = {};
switch(cells[j].substring(0,2)) {
case 'go':
tileName = "gold";
break;
case 'di':
tileName = "dirt";
break;
case 'ch':
tileName = "chasm";
break;
case 'wa':
tileName = "water";
break;
case 'ga':
tileName = "gateway";
break;
case 'la':
tileName = "lava";
break;
case 'co':
tileName = "core_p1";
break;
case 'im':
tileName = "impenetrable";
break;
case 'br':
tileName = "brimstone";
break;
case 'se':
tileName = "sacred_earth";
break;
case 'nb':
tileName = "stone_bridge";
break;
case 'pf':
tileName = "permafrost";
break;
case 'sa':
tileName = "sand";
break;
case 'sh':
tileName = "archiveshrine";
break;
case 'sg':
tileName = "goldshrine";
break;
case 'ss':
tileName = "siegeshrine";
break;
case 'sd':
tileName = "defencepartshrine";
break;
case 'sm':
tileName = "manashrine";
break;
case 'sp':
tileName = "perceptionshrine";
break;
case '':
tileName = "earth";
break;
default:
console.error("Tile " + cells[j] + " could not be converted!");
tileName = "earth";
}

var tileConfig = tiles[tileName];
if (tileConfig && tileConfig.sizex * tileConfig.sizey > 1) {
calcRooms.push([i - bordersize, j - bordersize]);
}

var tileTypeId = terrain.getMapTileId(mapData, tileName);
cell["tile"] = tileTypeId;
rowData.push(cell);
}
mapData.map.push(rowData);
}

for (var k = 0; k < calcRooms.length; k++) {
var y = calcRooms[k][0];
var x = calcRooms[k][1];
var tileId = mapData.map[y][x]['tile'];
var tile = mapData.tiles[tileId];
// There is no tile left or above it, so lets create a new room
if (isNaN(parseInt(mapData.map[y][x]['data-id'])))
{
// new room
var id = new Date().getTime() - parseInt(Math.random() * 3000000).toString();
mapData.tileIds.push(id);
var roomTile = tiles[tile];
var coreTile = '';

var match = tile.match(/core_p([1-8])/);
if (match) {
var player = parseInt(match[1]);
if (usedCores.indexOf(player) != -1 && player < 5) {
player = usedCores.length + 1;
tile = tile.replace(/_p([1-8])/, "_p" + player);
mapData.tiles.push(tile);
tileId = mapData.tiles.length - 1;
}
usedCores.push(player);
}

for (var posy = 0; posy < roomTile.sizey; posy++) {
for (var posx = 0; posx < roomTile.sizex; posx++) {
mapData.map[y + posy][x + posx]['tile'] = tileId;
mapData.map[y + posy][x + posx]['data-id'] = mapData.tileIds.length - 1;
}
}
}
}
terrain.resetRedoHistory();
terrain.importData(JSON.stringify(mapData));
} else {
alert("Please select a valid map file");
return;
}
terrain.importCsvData(this.result);
};
} else {
alert("Please select a valid map file");
Expand Down

0 comments on commit 6984ae4

Please sign in to comment.