-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.js
124 lines (107 loc) · 3.79 KB
/
controller.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
class Controller
{
static m1 = null;
static m2 = null;
static m3 = null;
static selectedStructure = null;
static structureOrientation = 0;
static lastMousePos = new Vector2();
static inputLoops(){
if (Controller.m1){
if (this.selectedStructure == null){
let pos = camera.screenPointToWorldPos(this.lastMousePos).floor();
world.addLiveCell(pos);
}
}
if (Controller.m3){
if (this.selectedStructure != null){
this.selectedStructure = null;
this.structureOrientation = 0;
} else {
let pos = camera.screenPointToWorldPos(this.lastMousePos).floor();
world.deleteCell(pos);
}
}
}
static setListeners(){
canvas.addEventListener("mousedown", function(e){
switch (e.button) {
case 0:
Controller.m1 = Date.now();
break;
case 1:
Controller.m2 = Date.now();
break;
case 2:
Controller.m3 = Date.now();
break;
default:
break;
}
});
canvas.addEventListener("click", function (e){
if (Controller.selectedStructure != null){
if (Date.now() - Controller.m1 < 200){
Structures.placeStructure(
Controller.selectedStructure,
Controller.lastMousePos,
Controller.structureOrientation
);
}
}
Controller.m1 = null;
});
canvas.addEventListener("mouseup", function(e){
if (e.button == 1){
Controller.m2 = null;
}
});
// document.addEventListener("mouseup", function(e){
// if (e.button == 0){
// Controller.m1 = null;
// }
// });
document.addEventListener("mousemove", function(e){
if (Controller.m2){
let offset = new Vector2(e.x, e.y).sub(Controller.lastMousePos).scale(-camera.size);
camera.translate(offset);
}
Controller.lastMousePos = new Vector2(e.x, e.y);
});
canvas.addEventListener("wheel", function(e){
if (e.wheelDeltaY < 1){
camera.applyZoom(1.1);
} else {
camera.applyZoom(0.9);
}
});
canvas.addEventListener("contextmenu", function(e){
e.preventDefault();
// if (Date.now() - Controller.m3 < 200){
// let pos = camera.screenPointToWorldPos(new Vector2(e.x, e.y)).floor();
// let cellIndex = world.liveCells.findIndex(el => el.x == pos.x && el.y == pos.y);
// if (cellIndex > -1){
// world.liveCells.splice(cellIndex, 1);
// }
// }
Controller.m3 = null;
});
document.addEventListener("keypress", (e) => {
if (e.code == "Space"){
if (Controller.selectedStructure != null){
Controller.structureOrientation = (Controller.structureOrientation + 90) % 360;
}
}
});
document.addEventListener("mouseleave", (e) => {
this.m1 = null;
this.m2 = null;
this.m3 = null;
});
document.addEventListener("keydown", (e) => {
if (e.code == "F2"){
camera.saveScreenshot();
}
});
}
}