node-x11/examples/asteroids/asteroids.js
Andrey Sidorov de9e1538ff new examples
2011-12-15 18:05:59 +11:00

103 lines
3 KiB
JavaScript

var x11 = require('../../lib/x11');
var watchMobile = require('./staticserver');
var PointerMotion = x11.eventMask.PointerMotion;
var X, Render;
var rocketX = 400;
var rocketY = 300;
var speedX = 0;
var speedY = 0;
var angle = 0;
var acc = 0;
var xclient = x11.createClient(function(display) {
X = display.client;
var root = display.screen[0].root;
X.require('render', function(rendExt) {
Render = rendExt;
var wid = X.AllocID();
var white = display.screen[0].white_pixel;
var black = display.screen[0].black_pixel;
X.CreateWindow(wid, root, 10, 10, 900, 600, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion });
X.MapWindow(wid);
var gc = X.AllocID();
X.CreateGC(gc, wid, { foreground: white, background: black } );
var pict = X.AllocID();
Render.CreatePicture(pict, wid, Render.rgb24);
var pictGrad = X.AllocID();
Render.RadialGradient(pictGrad, [50,56], [50,50], 0, 50,
[
[0, [0,0,0xffff,0xffff ] ],
[0.95, [0,0,0,0x00ff00 ] ],
[0.997, [0xffff, 0xf, 0, 0x1] ],
[1, [0xffff, 0xffff, 0, 0x0] ]
]);
var solid = Render.SolidFill
var dark_grad = X.AllocID();
Render.LinearGradient(dark_grad, [0,0], [1000,100],
[
[0, [0,0,0,0x0 ] ],
[0.1, [0xfff, 0, 0xffff, 0] ] ,
[0.25, [0xfff, 0, 0xfff, 0] ] ,
[0.5, [0xfff, 0, 0xffff, 0] ] ,
[1, [0xfff, 0xffff, 0, 0] ]
]);
function draw(x, y) {
X.PolyFillRectangle(wid, gc, [0, 0, 1000, 1000]);
Render.Composite(3, pictGrad, 0, pict, 0, 0, 0, 0, rocketX - 50, rocketY - 50, 100, 100);
// draw directed triangle
//
//
//
var pts = [
rocketX + Math.cos(angle)*50, rocketY + Math.sin(angle)*50,
rocketX + Math.cos(angle + 1)*50, rocketY + Math.sin(angle+1)*50,
rocketX + Math.cos(angle + 2)*50, rocketY + Math.sin(angle+2)*50,
];
//Render.Triangles(3, dark_grad, 0, 0, dark_grad, 0, pts);
X.PolyLine(0, wid, gc, pts);
}
X.on('event', function(ev) {
//draw(ev.x, ev.y);
});
watchMobile(function(x, y, z) {
//console.log([x, y, z]);
//console.log(x);
angle = 2*Math.PI*(y/360);
acc = 90 - z;
draw();
});
function updateScene()
{
rocketX += speedX;
rocketY += speedY;
speedX += Math.cos(angle + 1)*acc/500;
speedY += Math.sin(angle + 1)*acc/500;
console.log(acc);
if (rocketX+100 > 900)
speedX = -speedX;
if (rocketX-100 < 0)
speedX = -speedX;
if (rocketY+100 > 600)
speedY = -speedY;
if (rocketY-100 < 0)
speedY = -speedY;
}
setInterval(updateScene, 50);
});
});