-
-
Save schlompf/1238847cfd5e1e510b56 to your computer and use it in GitHub Desktop.
gameLoop for indesign script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#targetengine "gameTime" | |
//app.scriptPreferences.enableRedraw = true; | |
var debug = false; | |
var ID_GAME = {}; | |
ID_GAME.game = (function () { | |
var xPos = 10; | |
var yPos = 10; | |
var player; | |
var board; | |
var bg; | |
var doc | |
var w; | |
var colorRandom; | |
ID_GAME.dimensions = 200; // board is square, size 200 | |
var frameLength = 33; // let's hope for 30 fps ;) | |
function init() { // initialize some stuff | |
w = new Window ("palette", "super ascii"); | |
var stopButton = w.add ("button", undefined, "stop it!"); | |
stopButton.onClick = function () {stop();}; | |
var restartButton = w.add("button", undefined, "restart"); | |
restartButton.onClick = function () {stop();init();} | |
t = w.add ("statictext", undefined, "blibablub"); | |
t.characters = 40; | |
w.show (); | |
w.onClose = function () {stop(true);}; | |
bindEvents(); | |
doc = app.documents.add({ // create new document for the game | |
documentPreferences:{ | |
pageWidth : ID_GAME.dimensions, | |
pageHeight : ID_GAME.dimensions, | |
facingPages: false | |
} | |
}); | |
setupColors(); | |
board = doc.pages[0]; // first page is our gameboard | |
bg = board.rectangles.add({geometricBounds:[0, 0, ID_GAME.dimensions, ID_GAME.dimensions]}); //add rectangle to fill whole page | |
bg.fillColor = "Black"; //fill black | |
bg.strokeWeight = 0; // no stroke | |
bg.locked = true; // lock rect, so no one messes with it ;) | |
app.activeWindow.screenMode = ScreenModeOptions.PREVIEW_TO_PAGE; // switch to preview-mode | |
app.activeWindow.viewDisplaySetting = ViewDisplaySettings.HIGH_QUALITY; // we want high-quality! | |
app.activeWindow.zoom(ZoomOptions.ACTUAL_SIZE); // zoom to 100% | |
//add center point for reference | |
board.rectangles.add({fillColor: "Paper", strokeWeight: 0, geometricBounds:[ID_GAME.dimensions/2-0.5, ID_GAME.dimensions/2-0.5, ID_GAME.dimensions/2+0.5, ID_GAME.dimensions/2+0.5]}); | |
player = ID_GAME.player(); | |
} | |
function setupColors() { | |
try{ | |
colorRandom = doc.colors.item("randomColor"); | |
//If the color does not exist, trying to get its name will generate an error. | |
cName = c1.name; | |
} catch (error){ | |
//The color style did not exist, so create it. | |
colorRandom = doc.colors.add({name:"randomColor", model:ColorModel.process, | |
colorValue:[Math.random()*100, Math.random()*100, Math.random()*100, Math.random()*100]}); | |
} | |
} | |
function bindEvents() { | |
var gameLoopTask = app.idleTasks.add({name:"gameLoop", sleep: frameLength}); //HACK: create idleTask for a gameloop, setTimeout/setInterval not available | |
var gameLoopTaskEventListener = gameLoopTask.addEventListener(IdleEvent.ON_IDLE, gameLoop, false); | |
$.writeln("Created gameLoop/idle task " + gameLoopTask.name + "; added event listener on " + gameLoopTaskEventListener.eventType); | |
w.addEventListener ("keydown", function (key) { | |
keyDown(key); | |
}); | |
//~ w.addEventListener ("keyup", function (key) { | |
//~ keyUp(key); | |
//~ }); | |
} | |
function keyDown (k){ | |
var direction = k.keyName; | |
if (direction) { | |
player.move(direction); | |
} | |
} | |
//~ function keyUp (k){ | |
//~ | |
//~ } | |
function stop(onClose) { | |
if (app.idleTasks.length == 0) { | |
alert("There is no idle task."); | |
} else { | |
var idleTaskName = "gameLoop"; | |
var idleTask = app.idleTasks.itemByName(idleTaskName); | |
if (idleTask != null) { | |
idleTask.remove(); | |
alert("idle task removed!"); | |
} else { | |
alert("There is no idle task named " + idleTaskName); | |
} | |
} | |
w.removeEventListener ("keydown", function (key) {keyDown (key)}); | |
//w.removeEventListener ("keyup", function (key) {keyUp(key);}); | |
if(onClose != true) { | |
w.close(); //close "console"-panel | |
} | |
if(app.activeDocument == doc){ | |
doc.close(SaveOptions.no); //close document without saving | |
} | |
} | |
var angle = 0; | |
function gameLoop() { //gameLoop Code | |
var radians = angle * (Math.PI/180); | |
var radius = 30; | |
player.pos.x = ID_GAME.dimensions/2 + Math.cos(radians) * radius; | |
player.pos.y = ID_GAME.dimensions/2 + Math.sin(radians) * radius; | |
angle += 6; | |
t.text = "pos.x: " + (Math.round(player.pos.x*100)/100) + " pos.y: " + (Math.round(player.pos.y*100)/100); | |
if(angle%6 == 0) { | |
colorRandom.colorValue = [Math.random()*100, Math.random()*100, Math.random()*100, Math.random()*100]; | |
} | |
bg.locked = false; | |
bg.fillColor = "randomColor"; //fill black | |
bg.locked = true; | |
player.draw(board); | |
} | |
return { | |
init: init | |
}; | |
})(); | |
ID_GAME.player = function () { | |
var size = 5; | |
var pos = {}; | |
pos.x = 10; | |
pos.y = 10; | |
var square; | |
function draw(board) { | |
if( typeof square == 'undefined' ) { //square doesn't exist? No? | |
square = board.textFrames.add({name: "player", label: "player", contents: "H", geometricBounds: [pos.y-size/2, pos.x-size/2, pos.y+size/2, pos.x+size/2]}); | |
//square = board.rectangles.add({name: "player", label: "player", geometricBounds: [pos.y-size/2, pos.x-size/2, pos.y+size/2, pos.x+size/2]}); // add little square | |
square.paragraphs.item(0).fillColor = "Paper"; // fill white/paper | |
square.paragraphs.item(0).pointSize = 14; | |
square.paragraphs.item(0).justification = Justification.centerAlign; | |
square.locked = true; | |
} else {// yes, it does! | |
square.locked = false; | |
square.geometricBounds = [pos.y-size/2, pos.x-size/2, pos.y+size/2, pos.x+size/2]; // draw rect around center-position pos.y pos.x, (y1,x1,y2,x2) | |
square.locked = true; | |
} | |
if(debug == true) { | |
$.writeln("drawn!"); | |
} | |
} | |
//~ function setDirection(direction) { | |
//~ switch(direction) { | |
//~ case "Up": | |
//~ pos.y -= 1; | |
//~ break; | |
//~ case "Down": | |
//~ pos.y += 1; | |
//~ break; | |
//~ case "Left": | |
//~ pos.x -= 1; | |
//~ break; | |
//~ case "Right": | |
//~ pos.x += 1; | |
//~ break; | |
//~ } | |
//~ } | |
function move(direction) { | |
switch(direction) { | |
case "Up": | |
pos.y -= 1; | |
break; | |
case "Down": | |
pos.y += 1; | |
break; | |
case "Left": | |
pos.x -= 1; | |
break; | |
case "Right": | |
pos.x += 1; | |
break; | |
} | |
} | |
return { | |
draw: draw, | |
move: move, | |
pos: pos | |
}; | |
}; | |
app.doScript(ID_GAME.game.init, ScriptLanguage.javascript, undefined, | |
UndoModes.fastEntireScript, "Game started"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Wenn das Spiel zu Ende ist, sollte ein Chart mit Scores stehen bleiben als Ergebnis.