#!./bin/jspl
require('SDL', 'SDL');
require('SDL.App', 'SDL::App');
require('SDL.Timer', 'SDL::Timer');
require('SDL.Rect', 'SDL::Rect');
require('SDL.Color', 'SDL::Color');
require('SDL.Event', 'SDL::Event');
function rand(n) {
return Math.floor(Math.random() * n);
}
var app = new SDL.App(
'-title', 'Foo bar',
'-width', 640,
'-height', 480,
'-depth', 32
);
app.loop = function() {
var done = false;
while(!done) {
app.world.step();
app.draw();
done = app.handle_one_event();
}
};
app.curr_event = new SDL.Event;
app.world = {
rect: new SDL.Rect('-width', 10, '-height', 10, '-x', 320, '-y', -10),
colr: new SDL.Color('-r', 0, '-g', 0, '-b', 255),
toString: function () { return '' + this.rect + ' ' + this.colr; }
}
SDL.Rect.prototype.toString = function() {
return '(' + this.x() + ',' + this.y() + ')';
}
SDL.Color.prototype.toString = function() {
return '(' + this.r() + ',' + this.g() + ',' + this.b() + ')';
}
app.world.colr.randomize = function() {
this.r(rand(256));
this.g(rand(256));
this.b(rand(256));
}
app.world.step = function() {
var y = this.rect.y();
if(y > 460) {
y = -10;
this.rect.x(rand(640));
this.colr.randomize();
Sys.say(''+this);
}
this.rect.y(y+10);
};
app.draw = function() {
this.fill(this.world.rect, this.world.colr);
this.update(this.world.rect);
this.sync();
};
app.handle_one_event = function() {
if(!this.curr_event.poll()) return false;
if(this.curr_event.type() == SDL.SDL_QUIT()) return true;
return false;
}
app.loop();