Skip to content

Commit 805ae5f

Browse files
committed
add some obstacles and basic collision
1 parent 1c1662e commit 805ae5f

File tree

10 files changed

+126
-5
lines changed

10 files changed

+126
-5
lines changed

src/assets/briefcase.png

200 Bytes
Loading

src/assets/mail.png

192 Bytes
Loading

src/assets/paper.png

228 Bytes
Loading

src/assets/stapler.png

275 Bytes
Loading

src/assets/taxman.png

989 Bytes
Loading

src/game/Obstacle.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import Phaser from "phaser";
2+
3+
export class Obstacle {
4+
private scene: Phaser.Scene;
5+
private sprite: Phaser.Physics.Arcade.Sprite;
6+
private speed: number;
7+
8+
constructor(scene: Phaser.Scene, x: number, type: string) {
9+
this.scene = scene;
10+
this.sprite = this.scene.physics.add.sprite(x, -128, type);
11+
this.sprite.play(`${type}-fall`, true);
12+
this.sprite.setOrigin(0.5, 1);
13+
14+
this.speed = Phaser.Math.Between(30, 60);
15+
}
16+
17+
update(deltaSeconds: number) {
18+
this.sprite.setVelocityY(this.speed);
19+
20+
if (this.sprite.y > this.scene.cameras.main.height + 128) {
21+
this.sprite.destroy();
22+
}
23+
}
24+
25+
getBody(): Phaser.GameObjects.Sprite {
26+
return this.sprite;
27+
}
28+
29+
isAlive(): boolean {
30+
return this.sprite.active;
31+
}
32+
}

src/game/Player.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import Phaser from "phaser";
22

33
export class Player {
44
private scene: Phaser.Scene;
5-
private sprite: Phaser.GameObjects.Sprite;
5+
private sprite: Phaser.Physics.Arcade.Sprite;
66
private horizontal: number = 0;
77

88
constructor(scene: Phaser.Scene, x: number, y: number, spriteName: string) {
99
this.scene = scene;
10-
this.sprite = this.scene.add.sprite(x, y, spriteName);
11-
this.sprite.play("walk");
10+
this.sprite = this.scene.physics.add.sprite(x, y, spriteName);
11+
this.sprite.play(`${spriteName}-walk`);
1212
}
1313

1414
update(horizontal: number) {
@@ -18,4 +18,8 @@ export class Player {
1818
(this.horizontal * this.scene.cameras.main.width) / 2;
1919
this.sprite.setPosition(newX, this.scene.cameras.main.height - 16);
2020
}
21+
22+
getBody() {
23+
return this.sprite;
24+
}
2125
}

src/game/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const gameConfig: Phaser.Types.Core.GameConfig = {
1010
physics: {
1111
default: "arcade",
1212
arcade: {
13-
gravity: { y: 600, x: 0 },
13+
gravity: { y: 0, x: 0 },
1414
debug: false,
1515
},
1616
},

src/game/createSpriteAssets.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,67 @@ export class SpriteAssets {
66
frameWidth: 16,
77
frameHeight: 16,
88
});
9+
scene.load.spritesheet("briefcase", "src/assets/briefcase.png", {
10+
frameWidth: 16,
11+
frameHeight: 16,
12+
});
13+
scene.load.spritesheet("mail", "src/assets/mail.png", {
14+
frameWidth: 16,
15+
frameHeight: 16,
16+
});
17+
scene.load.spritesheet("paper", "src/assets/paper.png", {
18+
frameWidth: 16,
19+
frameHeight: 16,
20+
});
21+
scene.load.spritesheet("stapler", "src/assets/stapler.png", {
22+
frameWidth: 16,
23+
frameHeight: 16,
24+
});
25+
scene.load.spritesheet("taxman", "src/assets/taxman.png", {
26+
frameWidth: 32,
27+
frameHeight: 64,
28+
});
929
}
1030

1131
static createSprites(scene: Phaser.Scene): void {
1232
scene.anims.create({
13-
key: "walk",
33+
key: "switchy-walk",
1434
frames: scene.anims.generateFrameNumbers("switchy", { start: 0, end: 2 }),
1535
frameRate: 6,
1636
repeat: -1,
1737
});
38+
scene.anims.create({
39+
key: "briefcase-fall",
40+
frames: scene.anims.generateFrameNumbers("briefcase", {
41+
start: 0,
42+
end: 0,
43+
}),
44+
frameRate: 6,
45+
repeat: -1,
46+
});
47+
scene.anims.create({
48+
key: "mail-fall",
49+
frames: scene.anims.generateFrameNumbers("mail", { start: 0, end: 0 }),
50+
frameRate: 6,
51+
repeat: -1,
52+
});
53+
scene.anims.create({
54+
key: "paper-fall",
55+
frames: scene.anims.generateFrameNumbers("paper", { start: 0, end: 0 }),
56+
frameRate: 6,
57+
repeat: -1,
58+
});
59+
scene.anims.create({
60+
key: "stapler-fall",
61+
frames: scene.anims.generateFrameNumbers("stapler", { start: 0, end: 0 }),
62+
frameRate: 6,
63+
repeat: -1,
64+
});
65+
scene.anims.create({
66+
key: "taxman-fall",
67+
frames: scene.anims.generateFrameNumbers("taxman", { start: 0, end: 1 }),
68+
frameRate: 6,
69+
repeat: -1,
70+
});
1871
}
1972
}

src/game/scenes/GameScene.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ import { Player } from "../Player";
33
import { PlaceholderAssets } from "../createPlaceholderAssets";
44
import { AnalogKey, AnalogReport } from "../../components/ConnectDevice";
55
import { SpriteAssets } from "../createSpriteAssets";
6+
import { Obstacle } from "../Obstacle";
67

78
export class GameScene extends Phaser.Scene {
89
private player!: Player;
910

11+
private obstacles: Obstacle[] = [];
12+
private obstacleTimer: number = 0;
13+
1014
private switchy!: Phaser.GameObjects.Sprite;
1115

1216
private background!: Phaser.GameObjects.TileSprite;
@@ -66,6 +70,7 @@ export class GameScene extends Phaser.Scene {
6670

6771
// Collision optimizations
6872
// this.switchy.setCollideWorldBounds(true);
73+
this.physics.world.setBoundsCollision(true, true, true, true);
6974

7075
// Set up keyboard controls - ensure keyboard exists
7176
if (this.input.keyboard) {
@@ -84,9 +89,36 @@ export class GameScene extends Phaser.Scene {
8489
// Update position according to horizontal
8590
this.player.update(this.horizontal);
8691

92+
this.obstacleTimer += delta;
93+
94+
if (this.obstacleTimer > 1000) {
95+
this.spawnObstacle();
96+
this.obstacleTimer = 0;
97+
}
98+
99+
this.obstacles = this.obstacles.filter((o) => {
100+
o.update(deltaSeconds);
101+
this.physics.world.overlap(this.player.getBody(), o.getBody(), () => {
102+
this.handlePlayerHit();
103+
});
104+
return o.isAlive();
105+
});
106+
87107
// Jump when space is pressed or screen is tapped (handled via pointer events)
88108
// if (this.input.keyboard && Phaser.Input.Keyboard.JustDown(this.jumpKey)) {
89109
// this.jump();
90110
// }
91111
}
112+
113+
spawnObstacle() {
114+
const obstacleTypes = ["paper", "mail", "stapler", "taxman", "briefcase"];
115+
const type = Phaser.Utils.Array.GetRandom(obstacleTypes);
116+
const x = Phaser.Math.Between(0, this.cameras.main.width - 16);
117+
const obstacle = new Obstacle(this, x, type);
118+
this.obstacles.push(obstacle);
119+
}
120+
121+
handlePlayerHit() {
122+
console.log("SWITCHY GOT BUSTED BY THE IRS 🚨");
123+
}
92124
}

0 commit comments

Comments
 (0)