grid = {
const grid = d3.create('svg')
.attr('id', 'hexmap')
.attr('height', (width / gridWidth * gridHeight * .86))
.attr('width', width);
for (var i = 0; i < gridWidth+1; i++) {
for (var j = 0; j < gridHeight; j++) {
if (i == 0 || i == (gridWidth)) {
if (j % 2 == 1) {
let x = j % 2 == 0 ? i*(width / gridWidth * .9) + gridWidth*(width / gridWidth * .05) : i*(width / gridWidth * .9) - (width / gridWidth * .45) + gridWidth*(width / gridWidth * .05);
let y = j*(width / gridWidth * .8);
let g = grid.append('g')
.attr('id','.'+zeroPad(i,2)+'.'+zeroPad(j,2))
.attr('transform', 'translate(' + x + ',' + y + ')');
Object.entries(tileMapping['oob']).forEach((pathMaps) => {
let p = g.append('path');
Object.entries(pathMaps[1]).forEach((attr) => {
p.attr(attr[0], attr[1]);
});
});
continue;
} else if (i == gridWidth) continue;
}
let x = j % 2 == 0 ? i*(width / gridWidth * .9) + gridWidth*(width / gridWidth * .05) : i*(width / gridWidth * .9) - (width / gridWidth * .45) + gridWidth*(width / gridWidth * .05);
let y = j*(width / gridWidth * .8);
let g = grid.append('g')
.attr('id','.'+zeroPad(i,2)+'.'+zeroPad(j,2))
.attr('transform', 'translate(' + x + ',' + y + ')' +
'translate(' + (width / gridWidth * .5) + ',' + (width / gridWidth * .5) + ')' +
'rotate(' + gridData[i][j].rot + ')' +
'translate(' + -(width / gridWidth * .5) + ',' + -(width / gridWidth * .5) + ')');
Object.entries(tileMapping[gridData[i][j].tile]).forEach((pathMaps) => {
let p = g.append('path');
Object.entries(pathMaps[1]).forEach((attr) => {
p.attr(attr[0], attr[1]);
});
});
g.on('click',function() {
const target = d3.select(this);
let id = target.attr('id');
let idsplit = id.split('.');
let ti = parseInt(idsplit[1]);
let tj = parseInt(idsplit[2]);
if (gridData[ti][tj].tile == tileSelected) {
let rot = gridData[ti][tj].rot;
gridData[ti][tj].rot = rot + 60;
target.attr('transform', 'translate(' + x + ',' + y + ')' +
'translate(' + (width / gridWidth * .5) + ',' + (width / gridWidth * .5) + ')' +
'rotate(' + (rot + 60) + ')' +
'translate(' + -(width / gridWidth * .5) + ',' + -(width / gridWidth * .5) + ')');
} else {
gridData[ti][tj].tile = tileSelected;
target.selectAll('path').remove()
Object.entries(tileMapping[tileSelected]).forEach((value, key) => {
let p = g.append('path');
Object.entries(value[1]).forEach((value, key) => p.attr(value[0], value[1]))
});
}
});
}
}
return grid.node()
}