From 8cafea1e3f7c426aa161d636ca0590e2b2a4e81d Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 20 Jan 2025 21:19:36 -0500 Subject: [PATCH] chore: make enemy follow player --- src/constants/index.ts | 1 + src/constants/tags.ts | 3 +++ src/gameobjects/enemy.ts | 18 +++++++++++++++++- src/gameobjects/player.ts | 12 +++++++++++- src/scenes/game.ts | 9 +-------- 5 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 src/constants/index.ts create mode 100644 src/constants/tags.ts diff --git a/src/constants/index.ts b/src/constants/index.ts new file mode 100644 index 0000000..ab25ba9 --- /dev/null +++ b/src/constants/index.ts @@ -0,0 +1 @@ +export * from './tags' diff --git a/src/constants/tags.ts b/src/constants/tags.ts new file mode 100644 index 0000000..4bc7beb --- /dev/null +++ b/src/constants/tags.ts @@ -0,0 +1,3 @@ +export enum Tag { + 'player' = 'player', +} diff --git a/src/gameobjects/enemy.ts b/src/gameobjects/enemy.ts index 6d0fe84..7feef66 100644 --- a/src/gameobjects/enemy.ts +++ b/src/gameobjects/enemy.ts @@ -1,5 +1,21 @@ +import { Tag } from '../constants' import { ghosty } from '../sprites' +const ENEMY_SPEED = 200 + export function addEnemy(x: number, y: number) { - return add([ghosty, pos(x, y), anchor('center')]) + const enemy = add([ghosty, pos(x, y), anchor('center')]) + + enemy.onUpdate(() => { + const player = get(Tag.player)[0] + + if (!player) { + return + } + + const dir = player.pos.sub(enemy.pos).unit() + enemy.move(dir.scale(ENEMY_SPEED)) + }) + + return enemy } diff --git a/src/gameobjects/player.ts b/src/gameobjects/player.ts index 960b611..431711d 100644 --- a/src/gameobjects/player.ts +++ b/src/gameobjects/player.ts @@ -1,5 +1,15 @@ +import { Tag } from '../constants' +import { addCursorKeys } from '../events' import { bean } from '../sprites' export function addPlayer(x = center().x, y = center().y) { - return add([bean, pos(x, y), rotate(0), anchor('center')]) + const player = add([bean, pos(x, y), rotate(0), anchor('center'), Tag.player]) + + player.onUpdate(() => { + player.angle += 120 * dt() + }) + + addCursorKeys(player) + + return player } diff --git a/src/scenes/game.ts b/src/scenes/game.ts index 73208b4..871c679 100644 --- a/src/scenes/game.ts +++ b/src/scenes/game.ts @@ -1,15 +1,8 @@ -import { addCursorKeys } from '../events' import { addEnemy, addPlayer } from '../gameobjects' import { Scene } from '../types' scene(Scene.game, () => { - const player = addPlayer() - - player.onUpdate(() => { - player.angle += 120 * dt() - }) - - addCursorKeys(player) + addPlayer() onClick(() => addKaboom(mousePos()))