var latest_output_area ="NONE";
function handle_output(out, block){
var output = out.content.data["text/html"];
latest_output_area.html(output);
}
function handle_click(canvas,coord) {
console.log(canvas,coord);
latest_output_area = $(canvas).parents('.output_subarea');
$(canvas).parents('.output_subarea')
var world_object_name = canvas.dataset.world_name;
var command = world_object_name + ".handle_click(" + JSON.stringify(coord) + ")";
console.log("Executing Command: " + command);
var kernel = IPython.notebook.kernel;
var callbacks = { 'iopub' : {'output' : handle_output}};
kernel.execute(command,callbacks);
};
function generateGridWorld(state,size,elements)
{
var $imgArray = new Object(), hasImg=false;
$.each(elements, function(i, val) {
if(val["type"]=="img") {
hasImg = true;
$imgArray[i] = $('<img />').attr({height:size,width:size,src:val["source"]}).data({name:i,loaded:false}).load(function(){
var execute=true;
$(this).data("loaded",true);
$.each($imgArray, function(i, val) {
if(!$(this).data("loaded")) {
execute=false;
return false;
}
});
if (execute) {
$.each($imgArray, function(i, val) {
$imgArray[i] = $('<canvas />').attr({width:size,height:size}).get(0);
$imgArray[i].getContext('2d').drawImage(val.get(0),0,0,size,size);
});
initializeWorld();
}
});
}
});
if(!hasImg) {
initializeWorld();
}
function initializeWorld(){
var $parentDiv = $('div.map-grid-world');
$('div.map-grid-world').removeClass('map-grid-world');
var row = state.length;
var column = state[0].length;
var canvas = $parentDiv.find('canvas').get(0);
var ctx = canvas.getContext('2d');
canvas.width = size * column;
canvas.height = size * row;
for(var i=0;i<row;++i) {
for (var j = 0; j < column;++j) {
if(elements[state[i][j]["val"]]["type"]=="color") {
if( state[i][j]["val"] == "default") {
blockCreate('black',elements[state[i][j]["val"]]["source"], i, j);
}
else {
blockCreate('transparent',elements[state[i][j]["val"]]["source"], i, j);
}
}
else if(elements[state[i][j]["val"]]["type"]==="img") {
pattern = ctx.createPattern($imgArray[state[i][j]["val"]], "repeat");
blockCreate('transparent',pattern, i, j);
}
}
}
function blockCreate(borderColor,fillColor,x,y) {
ctx.fillStyle = fillColor;
ctx.fillRect(y * size, x * size, size, size);
ctx.lineWidth=2;
ctx.strokeStyle = borderColor;
ctx.strokeRect((y * size)+1, (x * size)+1, size-2, size-2);
}
$(canvas).click(function(e) {
var gy = ~~ (e.offsetX / size);
var gx = ~~ (e.offsetY/ size);
var coord = new Array();
coord.push(gx,gy)
handle_click(canvas,coord)
});
var nameElement = $parentDiv.find('span');
$(canvas).mousemove(function(e) {
var gy = ~~ (e.offsetX / size);
var gx = ~~ (e.offsetY/ size);
if( gx>=0 && gx<row && gy>=0 && gy<column ) {
nameElement.html(state[gx][gy]["tooltip"]);
}
}).mouseout(function(){
nameElement.html("");
});
};
};
generateGridWorld(gridArray,size,elements);