-
Notifications
You must be signed in to change notification settings - Fork 0
/
wallball.js
90 lines (64 loc) · 2.3 KB
/
wallball.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import {width as screenWidth, height as screenHeight, bounds} from './data.js';
import {Application} from './pixi.min.mjs';
import Paddle from './paddle.js';
import Ball from './ball.js';
// Game objects
let paddle = new Paddle();
let ball = new Ball(paddle);
// Inputs and toggles with their respective bindings
// input[key] is true when 'key' is being pressed
// toggle[key] is true when the action the 'key' is bound to is ready to be toggled
// Note: both input[key] and toggle[key] are only true for 1 game clock cycle. This is when the toggle happens.
// inputBindings associate an 'inputAction' with several different keys
// you can use inputActive(inputAction) to check if an action is being performed
// toggleBindings associate an 'toggleAction' with several different keys
// you can use toggleActive(toggleAction) to check if an action is being toggled
let input = [];
let toggle = [];
let inputBindings = {
'movePaddleRight': ['ArrowRight', 'd'],
'movePaddleLeft' : ['ArrowLeft', 'a']
}
let toggleBindings = {
'pause': ['p'],
}
function inputActive(id) {
let inputKeys = inputBindings[id];
return Object.keys(input).filter(key => input[key] && inputKeys.includes(key)).length > 0;
}
function toggleActive(id) {
let toggleKeys = toggleBindings[id];
let keys = Object.keys(toggle).filter(key => input[key] && toggle[key] && toggleKeys.includes(key));
if(keys.length > 0) {
toggle[keys[0]] = false;
return true;
}
toggleKeys.forEach(key => {
if(!input[key])
toggle[key] = true;
});
return false;
}
let app = new Application({width: screenWidth, height: screenHeight});
app.stage.addChild(paddle);
app.stage.addChild(ball);
function defaultSetup() {
document.body.appendChild(app.view);
window.addEventListener("keydown", event => input[event.key] = true, false);
window.addEventListener("keyup", event => input[event.key] = false, false);
options.pause = false;
}
let deltaTime = 0;
let options = {'pause': true};
app.ticker.add((d) => {
if(toggleActive('pause'))
options.pause = !options.pause;
if(options.pause) return;
deltaTime = d;
if(inputActive('movePaddleRight'))
paddle.right();
if(inputActive('movePaddleLeft'))
paddle.left();
ball.move();
});
export {app, ball, paddle, inputBindings, inputActive, toggleBindings, toggleActive, options, defaultSetup};