[Greasemonkey] Editor for Canvascape - "3D Walker"
Valentin Laube
valentin.laube at gmx.net
Tue Nov 29 10:57:56 EST 2005
Hi!
I guess you have all seen "3D Walker" by now, at least those with
Firefox 1.5.
For those who haven't check it out here:
http://www.abrahamjoffe.com.au/ben/canvascape/
Here is a screenshot for anyone with a pre-1.5 browser:
http://www.cs.uni-magdeburg.de/~vlaube/3dwalkerscreenshot.png
Attached is a GreaseMonkey script that allows you to edit the level.
To use it just click in the minimap.
- Valentin Laube
-------------- next part --------------
// ==UserScript=var mapwidth = =
// @name WalkEd
// @namespace http://www.cs.uni-magdeburg.de/~vlaube/
// @description Leveleditor for "Canvascape - 3D walker"
// @include http://www.abrahamjoffe.com.au/ben/canvascape/
// ==/UserScript==
function getLeft(element) {
var left = element.offsetLeft;
var parent = element.offsetParent;
while(parent) {
left += parent.offsetLeft;
parent = parent.offsetParent;
}
return left;
}
function getTop(element) {
var top = element.offsetTop;
var parent = element.offsetParent;
while(parent) {
top += parent.offsetTop;
parent = parent.offsetParent;
}
return top;
}
////////////////////////////
function mousemove(e) {
if(!ismousedown)
return;
if(e.pageX >= mapleft && e.pageX <= mapleft+mapwidth &&
e.pageY >= maptop && e.pageY <= maptop +mapheight) {
var x = Math.floor((e.pageX-mapleft+1)/8);
var y = Math.floor((e.pageY-maptop+1)/8);
if(x==lastx && y==lasty)
return;
lastx=x;
lasty=y;
if(value==-1)
value= arena[x][y] = arena[x][y]?0:1;
else
arena[x][y] = value;
initUnderMap();
drawCanvas();
}
else {
//mouseup(e);
}
}
function mousedown(e) {
ismousedown=true
}
function mouseup(e) {
ismousedown=false;
value=-1;
}
function click(e) {
mousedown(e);
mousemove(e);
mouseup(e);
lastx=lasty=-1;
}
function save(e) {
var level = arena.toString();
level+=","+playerPos.toString();
level+=","+playerDir.toString();
level+=","+playerPosZ.toString();
alert(playerDir);
GM_setValue("level", level);
}
function load(e) {
var level = GM_getValue("level").split(",");
if(level) {
for(var i=0; i<100; i++) {
arena[Math.floor(i/10)][i%10] = parseInt(level[i]);
}
playerPos[0] = parseFloat(level[100]);
playerPos[1] = parseFloat(level[101]);
playerDir = parseFloat(level[102]);//XXX: doesn't work
playerPosZ = parseFloat(level[103]);
initUnderMap();
drawCanvas();
}
}
////////////////////////////
var map = document.getElementById("underMap");
var mapleft = getLeft(map);
var maptop = getTop(map);
var mapwidth = map.offsetWidth;
var mapheight = map.offsetHeight;
var ismousedown = false;
var lastx=-1;
var lasty=-1;
var value=-1;
var button1 = document.createElement("input");
button1.type = "button";
button1.value = "Save";
button1.style.position="absolute";
button1.style.top="200px";
button1.style.left="15px";
map.parentNode.insertBefore(button1, map.nextSibling);
var button2 = document.createElement("input");
button2.type = "button";
button2.value = "Load";
button2.style.position="absolute";
button2.style.top="230px";
button2.style.left="15px";
map.parentNode.insertBefore(button2, map.nextSibling);
document.addEventListener("mousedown", mousedown, false);
document.addEventListener("mouseup", mouseup, false);
document.addEventListener("mousemove", mousemove, false);
document.addEventListener("click", click, false);
button1.addEventListener("click", save, false);
button2.addEventListener("click", load, false);
More information about the Greasemonkey
mailing list