Skip to content

Commit

Permalink
chore: damage enemy with bullet
Browse files Browse the repository at this point in the history
  • Loading branch information
remarkablemark committed Jan 21, 2025
1 parent a2d12b1 commit a28ed3f
Show file tree
Hide file tree
Showing 16 changed files with 51 additions and 30 deletions.
2 changes: 2 additions & 0 deletions src/constants/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export * from './scenes'
export * from './sprites'
export * from './tags'
File renamed without changes.
File renamed without changes.
9 changes: 8 additions & 1 deletion src/gameobjects/bullet.ts
Original file line number Diff line number Diff line change
@@ -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([
Expand All @@ -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
}

Expand Down
24 changes: 20 additions & 4 deletions src/gameobjects/enemy.ts
Original file line number Diff line number Diff line change
@@ -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
}
1 change: 1 addition & 0 deletions src/gameobjects/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './bullet'
export * from './enemy'
export * from './player'
14 changes: 9 additions & 5 deletions src/gameobjects/player.ts
Original file line number Diff line number Diff line change
@@ -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)

Expand All @@ -14,5 +20,3 @@ export function addPlayer(x = center().x, y = center().y) {

return player
}

export type Player = ReturnType<typeof addPlayer>
6 changes: 3 additions & 3 deletions src/scenes/game.ts
Original file line number Diff line number Diff line change
@@ -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)
}
})
})
2 changes: 1 addition & 1 deletion src/scenes/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import './game'
import './preload'

import { Scene } from '../types'
import { Scene } from '../constants'

export function start() {
go(Scene.preload)
Expand Down
3 changes: 1 addition & 2 deletions src/scenes/preload.ts
Original file line number Diff line number Diff line change
@@ -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)
})
3 changes: 0 additions & 3 deletions src/sprites/bean.ts

This file was deleted.

3 changes: 0 additions & 3 deletions src/sprites/ghosty.ts

This file was deleted.

2 changes: 0 additions & 2 deletions src/sprites/index.ts

This file was deleted.

3 changes: 0 additions & 3 deletions src/types/gameobject.ts

This file was deleted.

5 changes: 5 additions & 0 deletions src/types/gameobjects.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { addBullet, addEnemy, addPlayer } from '../gameobjects'

export type Bullet = ReturnType<typeof addBullet>
export type Enemy = ReturnType<typeof addEnemy>
export type Player = ReturnType<typeof addPlayer>
4 changes: 1 addition & 3 deletions src/types/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
export * from './gameobject'
export * from './scene'
export * from './sprite'
export * from './gameobjects'

0 comments on commit a28ed3f

Please sign in to comment.