123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- function SoundDuck() {
- var ctx = Game.context;
- var canvasHM = Game.canvas.height/2;
- var canvasWM = Game.canvas.width/2;
- var debug = false;
- var RADIUS = 8;
- var FIELD_SIZE = 600;
- var DOT_SIZE = 3;
- var DOT_DISTANCE = 4 * 5;
- var DOT_NUM = FIELD_SIZE / DOT_DISTANCE - 1;
- var box = [
- {x: 0, y: 0},
- {x: 0, y: FIELD_SIZE},
- {x: FIELD_SIZE, y: FIELD_SIZE},
- {x: FIELD_SIZE, y: 0}
- ];
- var dots = [];
- for(var i = 1; i <= DOT_NUM; ++i) {
- for(var j = 1; j <= DOT_NUM; ++j) {
- if((i % 2 == 1 && j % 2 == 0) || (i % 4 == 0 && j % 4 != 2) || (i % 4 == 2 && j % 4 != 0)) {
- dots.push({x: j * DOT_DISTANCE, y: i * DOT_DISTANCE});
- }
- }
- }
- var player = {
- x: FIELD_SIZE / 2,
- y: FIELD_SIZE / 2,
- angle: 0,
- dx: 100,
- da: Math.PI
- };
- var reference = {
- x: canvasWM,
- y: canvasHM
- };
- function translatePoints(point) {
- var x = point.x - player.x;
- var y = point.y - player.y;
- var nx = x * Math.cos(-player.angle) + y * Math.sin(-player.angle);
- var ny = -x * Math.sin(-player.angle) + y * Math.cos(-player.angle);
- return {x: nx + reference.x, y: ny + reference.y};
- }
- this.update = function(dt) {
- if(38 in Game.keysDown) {
- player.x += Math.cos(Math.PI/2+player.angle) * player.dx * dt;
- player.y -= Math.sin(Math.PI/2+player.angle) * player.dx * dt;
- }
- if(37 in Game.keysDown) {
- player.angle -= player.da * dt;
- }
- if(39 in Game.keysDown) {
- player.angle += player.da * dt;
- }
- player.x = clamp(player.x, 0, FIELD_SIZE);
- player.y = clamp(player.y, 0, FIELD_SIZE);
- };
- this.draw = function() {
- drawBG();
- ctx.beginPath();
- box.forEach(function(p, i) {
- var pos = translatePoints(p);
- if(i == 0) {
- ctx.moveTo(pos.x, pos.y);
- }
- else {
- ctx.lineTo(pos.x, pos.y);
- }
- });
- ctx.fillStyle = 'gray';
- dots.forEach(function(p) {
- var pos = translatePoints(p);
- ctx.fillRect(pos.x-1, pos.y-1, 3, 3);
- });
- ctx.closePath();
- ctx.lineWidth = 2;
- ctx.strokeStyle = 'white';
- ctx.stroke();
- // player
- drawCircle(reference, RADIUS, 3, 'white');
- };
- var onKeyUp = function(e) {
- switch(e.charCode) {
- case 80: // P
- case 112: // p
- case 32: // space
- Game.pause();
- soundManager.play('pause');
- break;
- case 68: // D
- debug = !debug;
- break;
- }
- };
- this.load = this.resume = function() {
- addEventListener('keypress', onKeyUp);
- }
- this.unload = this.pause = function() {
- removeEventListener('keypress', onKeyUp);
- }
- }
- SoundDuck.prototype = new Scene();
|