diff --git a/src/constants/index.ts b/src/constants/index.ts index ab25ba9..9112e5d 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1 +1,3 @@ +export * from './scenes' +export * from './sprites' export * from './tags' diff --git a/src/types/scene.ts b/src/constants/scenes.ts similarity index 100% rename from src/types/scene.ts rename to src/constants/scenes.ts diff --git a/src/types/sprite.ts b/src/constants/sprites.ts similarity index 100% rename from src/types/sprite.ts rename to src/constants/sprites.ts diff --git a/src/gameobjects/bullet.ts b/src/gameobjects/bullet.ts index 1e09e88..83f9800 100644 --- a/src/gameobjects/bullet.ts +++ b/src/gameobjects/bullet.ts @@ -1,7 +1,8 @@ import { Tag } from '../constants' -import type { Player } from './player' +import type { Enemy, Player } from '../types' const BULLET_SPEED = 600 +const BULLET_DAMAGE = 20 export function addBullet(player: Player) { const bullet = add([ @@ -15,6 +16,12 @@ export function addBullet(player: Player) { Tag.bullet, ]) + bullet.onCollide(Tag.enemy, (enemy) => { + bullet.destroy() + const currentEnemy = enemy as Enemy + currentEnemy.hurt(BULLET_DAMAGE) + }) + return bullet } diff --git a/src/gameobjects/enemy.ts b/src/gameobjects/enemy.ts index c38651c..88b10b5 100644 --- a/src/gameobjects/enemy.ts +++ b/src/gameobjects/enemy.ts @@ -1,16 +1,32 @@ -import { Tag } from '../constants' -import { ghosty } from '../sprites' -import type { Player } from './player' +import { Sprite, Tag } from '../constants' +import type { Player } from '../types' const ENEMY_SPEED = 200 export function addEnemy(x: number, y: number, player: Player) { - const enemy = add([ghosty, pos(x, y), anchor('center'), Tag.enemy]) + const enemy = add([ + sprite(Sprite.ghosty), + pos(x, y), + anchor('center'), + health(100), + opacity(1), + area(), + Tag.enemy, + ]) enemy.onUpdate(() => { const dir = player.pos.sub(enemy.pos).unit() enemy.move(dir.scale(ENEMY_SPEED)) }) + enemy.onHurt(() => { + enemy.opacity = enemy.hp() / 100 + }) + + enemy.onDeath(() => { + enemy.destroy() + addKaboom(enemy.pos) + }) + return enemy } diff --git a/src/gameobjects/index.ts b/src/gameobjects/index.ts index 8c85dea..6ff964a 100644 --- a/src/gameobjects/index.ts +++ b/src/gameobjects/index.ts @@ -1,2 +1,3 @@ +export * from './bullet' export * from './enemy' export * from './player' diff --git a/src/gameobjects/player.ts b/src/gameobjects/player.ts index 680b82c..c837c40 100644 --- a/src/gameobjects/player.ts +++ b/src/gameobjects/player.ts @@ -1,10 +1,16 @@ -import { Tag } from '../constants' +import { Sprite, Tag } from '../constants' import { addCursorKeys } from '../events' -import { bean } from '../sprites' import { addBullet } from './bullet' export function addPlayer(x = center().x, y = center().y) { - const player = add([bean, pos(x, y), rotate(0), anchor('center'), Tag.player]) + const player = add([ + sprite(Sprite.bean), + pos(x, y), + rotate(0), + anchor('center'), + area(), + Tag.player, + ]) addCursorKeys(player) @@ -14,5 +20,3 @@ export function addPlayer(x = center().x, y = center().y) { return player } - -export type Player = ReturnType diff --git a/src/scenes/game.ts b/src/scenes/game.ts index 089126b..bbc6a84 100644 --- a/src/scenes/game.ts +++ b/src/scenes/game.ts @@ -1,14 +1,14 @@ +import { Scene } from '../constants' import { addEnemy, addPlayer } from '../gameobjects' -import { Scene } from '../types' scene(Scene.game, () => { const player = addPlayer() add([text('Press arrow keys', { width: width() / 2 }), pos(12, 12)]) - for (let i = 0; i < 3; i++) { + loop(5, () => { const x = rand(0, width()) const y = rand(0, height()) addEnemy(x, y, player) - } + }) }) diff --git a/src/scenes/index.ts b/src/scenes/index.ts index 7cece75..bacd843 100644 --- a/src/scenes/index.ts +++ b/src/scenes/index.ts @@ -1,7 +1,7 @@ import './game' import './preload' -import { Scene } from '../types' +import { Scene } from '../constants' export function start() { go(Scene.preload) diff --git a/src/scenes/preload.ts b/src/scenes/preload.ts index c2adfe6..83c54dc 100644 --- a/src/scenes/preload.ts +++ b/src/scenes/preload.ts @@ -1,8 +1,7 @@ -import { Scene, Sprite } from '../types' +import { Scene, Sprite } from '../constants' scene(Scene.preload, () => { loadSprite(Sprite.bean, 'sprites/bean.png') loadSprite(Sprite.ghosty, 'sprites/ghosty.png') - go(Scene.game) }) diff --git a/src/sprites/bean.ts b/src/sprites/bean.ts deleted file mode 100644 index 65bb597..0000000 --- a/src/sprites/bean.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Sprite } from '../types' - -export const bean = sprite(Sprite.bean) diff --git a/src/sprites/ghosty.ts b/src/sprites/ghosty.ts deleted file mode 100644 index 325a16e..0000000 --- a/src/sprites/ghosty.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Sprite } from '../types' - -export const ghosty = sprite(Sprite.ghosty) diff --git a/src/sprites/index.ts b/src/sprites/index.ts deleted file mode 100644 index b174efe..0000000 --- a/src/sprites/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './bean' -export * from './ghosty' diff --git a/src/types/gameobject.ts b/src/types/gameobject.ts deleted file mode 100644 index 4835fb3..0000000 --- a/src/types/gameobject.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { addPlayer } from '../gameobjects' - -export type Player = ReturnType diff --git a/src/types/gameobjects.ts b/src/types/gameobjects.ts new file mode 100644 index 0000000..95e39d9 --- /dev/null +++ b/src/types/gameobjects.ts @@ -0,0 +1,5 @@ +import { addBullet, addEnemy, addPlayer } from '../gameobjects' + +export type Bullet = ReturnType +export type Enemy = ReturnType +export type Player = ReturnType diff --git a/src/types/index.ts b/src/types/index.ts index 87eac29..b138e73 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1 @@ -export * from './gameobject' -export * from './scene' -export * from './sprite' +export * from './gameobjects'