summaryrefslogtreecommitdiffstats
path: root/static/games/stallman-shooter/player.js
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2026-07-25 10:58:28 -0700
committerRose Hogenson <rosehogenson@posteo.net>2026-07-25 10:59:30 -0700
commitde5b309e0f06e93a963e09ef13c369ae7deeccc9 (patch)
tree87f0dec5650648640c6fc3119f32f7631b323f53 /static/games/stallman-shooter/player.js
parentMove pong into games/ subdirectory (diff)
downloadroseh.moe-de5b309e0f06e93a963e09ef13c369ae7deeccc9.tar.zst
Port a game I wrote a long time ago to JS
Diffstat (limited to 'static/games/stallman-shooter/player.js')
-rw-r--r--static/games/stallman-shooter/player.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/static/games/stallman-shooter/player.js b/static/games/stallman-shooter/player.js
new file mode 100644
index 0000000..83144e0
--- /dev/null
+++ b/static/games/stallman-shooter/player.js
@@ -0,0 +1,88 @@
+import * as constants from '/static/games/stallman-shooter/constants.js';
+
+export class Player {
+ constructor() {
+ this.x = 400;
+ this.y = 500;
+ this.x_d = 0;
+ this.y_d = 0;
+ this.down_p = false;
+ this.left_p = false;
+ this.right_p = false;
+ this.up_p = false;
+ this.fire_rate = 15;
+ this.shift_p = false;
+ }
+
+ act(events) {
+ for (const event of events) {
+ const [kind, key] = event;
+ if (kind === 'keydown' && key === 'ArrowDown') {
+ this.down_p = true;
+ this.y_d = -1;
+ } else if (kind === 'keyup' && key === 'ArrowDown') {
+ this.down_p = false;
+ } else if (kind === 'keydown' && key === 'ArrowUp') {
+ this.up_p = true;
+ this.y_d = 1;
+ } else if (kind === 'keyup' && key === 'ArrowUp') {
+ this.up_p = false;
+ } else if (kind === 'keydown' && key === 'ArrowLeft') {
+ this.left_p = true;
+ this.x_d = -1;
+ } else if (kind === 'keyup' && key === 'ArrowLeft') {
+ this.left_p = false;
+ } else if (kind === 'keydown' && key === 'ArrowRight') {
+ this.right_p = true;
+ this.x_d = 1;
+ } else if (kind === 'keyup' && key === 'ArrowRight') {
+ this.right_p = false;
+ } else if (kind === 'keydown' && key === 'Shift') {
+ this.shift_p = true;
+ } else if (kind === 'keyup' && key === 'Shift') {
+ this.shift_p = false;
+ }
+ }
+ if (this.left_p) {
+ if (!this.right_p) {
+ this.x_d = -1;
+ }
+ } else if (this.right_p) {
+ this.x_d = 1;
+ } else {
+ this.x_d = 0;
+ }
+ if (this.up_p) {
+ if (!this.down_p) {
+ this.y_d = -1;
+ }
+ } else if (this.down_p) {
+ this.y_d = 1;
+ } else {
+ this.y_d = 0;
+ }
+ /* Don't go off the side */
+ if (this.x_d < 0 && this.x <= 0 || this.x >= constants.x_dim && this.x_d > 0) {
+ this.x_d = 0;
+ }
+ if (this.y <= 0 && this.y_d < 0 || this.y >= constants.y_dim && this.y_d > 0) {
+ this.y_d = 0;
+ }
+
+ if (this.shift_p) {
+ this.x += this.x_d;
+ this.y += this.y_d;
+ } else {
+ this.x += this.x_d * 3;
+ this.y += this.y_d * 3;
+ }
+ }
+
+ radius() {
+ return 3;
+ }
+
+ center() {
+ return [33, 21];
+ }
+}