Skip to content

Commit

Permalink
Merge pull request #20 from Mumakil/feature/corpses
Browse files Browse the repository at this point in the history
Feature/corpses
  • Loading branch information
OsQu committed Dec 25, 2015
2 parents 81c489f + 12ea077 commit b9f2d35
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 20 deletions.
8 changes: 8 additions & 0 deletions client/app/scripts/colors.coffee
@@ -0,0 +1,8 @@
module.exports = (color) ->
switch color
when "red" then "#ff0000"
when "blue" then "#1b6cde"
when "green" then "#00ff00"
when "white" then "#ffffff"
when "yellow" then "#ffff00"
else "#ffffff"
13 changes: 13 additions & 0 deletions client/app/scripts/corpse.coffee
@@ -0,0 +1,13 @@
colors = require('./colors')

class Corpse
constructor: (@x, @y, @color) ->

render: (display) ->
display.draw(@x, @y, '%', @colorCode())

colorCode: ->
colors(@color)


module.exports = Corpse
7 changes: 7 additions & 0 deletions client/app/scripts/game.coffee
Expand Up @@ -8,6 +8,7 @@ ScoreBoard = require('./score-board')
Map = require('./map')
Player = require('./player')
Rocket = require('./rocket')
Corpse = require('./corpse')

gameEvents = require('./game-events')
screenHeight = require('./constants')["screenDimensions"]["height"]
Expand All @@ -17,6 +18,7 @@ class Game
@fps = 30
@players = []
@items = []
@corpses = []

@messageHandler = new MessageHandler(@)
@messageHandler.connect()
Expand All @@ -25,6 +27,8 @@ class Game
@scoreBoard = new ScoreBoard(@messageHandler)

render: ->
for corpse in @corpses
corpse.render(@display)
for player in @players
player.render(@display)
for item in @items
Expand Down Expand Up @@ -102,4 +106,7 @@ class Game
setScores: (scores) ->
@scoreBoard.setScores(scores)

addCorpse: ({x, y, color}) ->
@corpses.push(new Corpse(x, y, color))

module.exports = Game
25 changes: 14 additions & 11 deletions client/app/scripts/message-handler.coffee
Expand Up @@ -15,17 +15,18 @@ class MessageHandler
io.connect(@game.serverUrl)

bindEvents: ->
gameEvents.socketMessage(@gameSocket, 'game-state').onValue (data) => @gotGameState(data)
gameEvents.socketMessage(@gameSocket, 'map').onValue (data) => @updateMap(data)
gameEvents.socketMessage(@gameSocket, 'info').onValue (data) => @gotServerInfo(data)
gameEvents.socketMessage(@gameSocket, 'new-player').onValue (data) => @addNewPlayer(data)
gameEvents.socketMessage(@gameSocket, 'player-leaving').onValue (data) => @playerLeaving(data)
gameEvents.socketMessage(@gameSocket, 'player-state-changed').onValue (data) => @playerStateChanged(data)
gameEvents.socketMessage(@gameSocket, 'rocket-moved').onValue (data) => @rocketMoved(data)
gameEvents.socketMessage(@gameSocket, 'rocket-destroyed').onValue (data) => @rocketDestroyed(data)

gameEvents.globalBus.filter((ev) -> ev.target == 'server').onValue (data) => @sendToServer(data)
gameEvents.globalBus.filter((ev) -> ev.target == 'join-game').onValue (data) => @joinGame(data)
gameEvents.socketMessage(@gameSocket, 'game-state').onValue @, 'gotGameState'
gameEvents.socketMessage(@gameSocket, 'map').onValue @, 'updateMap'
gameEvents.socketMessage(@gameSocket, 'info').onValue @, 'gotServerInfo'
gameEvents.socketMessage(@gameSocket, 'new-player').onValue @, 'addNewPlayer'
gameEvents.socketMessage(@gameSocket, 'player-leaving').onValue @, 'playerLeaving'
gameEvents.socketMessage(@gameSocket, 'player-state-changed').onValue @, 'playerStateChanged'
gameEvents.socketMessage(@gameSocket, 'rocket-moved').onValue @, 'rocketMoved'
gameEvents.socketMessage(@gameSocket, 'rocket-destroyed').onValue @, 'rocketDestroyed'
gameEvents.socketMessage(@gameSocket, 'new-corpse').onValue @, 'newCorpse'

gameEvents.globalBus.filter((ev) -> ev.target == 'server').onValue @, 'sendToServer'
gameEvents.globalBus.filter((ev) -> ev.target == 'join-game').onValue @, 'joinGame'

listenMessages: (key) ->
gameEvents.socketMessage(@gameSocket, key)
Expand Down Expand Up @@ -83,6 +84,8 @@ class MessageHandler
player_id: @ourId()
player_name: playerName

newCorpse: (ev) ->
@game.addCorpse(ev.data)

ourId: ->
@gameSocket.socket.sessionid
Expand Down
9 changes: 2 additions & 7 deletions client/app/scripts/player.coffee
@@ -1,6 +1,7 @@
KeyboardController = require('./keyboard-controller')

gameEvents = require('./game-events')
colors = require('./colors')

class Player
constructor: (@id, @color, @x, @y) ->
Expand All @@ -13,13 +14,7 @@ class Player
display.draw(@x, @y, @getChar(), @colorCode())

colorCode: ->
switch @color
when "red" then "#ff0000"
when "blue" then "#1b6cde"
when "green" then "#00ff00"
when "white" then "#ffffff"
when "yellow" then "#ffff00"
else "#ffffff"
colors(@color)

clearCurrentPosition: (display) ->
# Assume that player can't stand inside the wall. This might need improving
Expand Down
4 changes: 4 additions & 0 deletions client/test/spec/game-spec.coffee
Expand Up @@ -107,3 +107,7 @@ describe 'Game', ->
@game.items.push new Rocket(0, 5, 5, 'shooter-1', 'right')
@game.removeRocket 0
expect(@game.items.length).to.be.equals(0)

it 'should add new corpses', ->
@game.addCorpse({x: 1, y: 1, color: 'red'})
expect(@game.corpses.length).to.be.equals(1)
4 changes: 4 additions & 0 deletions client/test/spec/message-handler-spec.coffee
Expand Up @@ -131,3 +131,7 @@ describe 'MessageHandler', ->
it 'should give our id when asking it', ->
@messageHandler.connect()
expect(@messageHandler.ourId()).to.be.equals('ownId')

it 'should add corpses', ->
@messageHandler.newCorpse({data: {x: 1, y: 1, color: 'red'}})
expect(@game.corpses.length).to.be.equals(1)
3 changes: 3 additions & 0 deletions server/app/actors/player-actor.coffee
Expand Up @@ -68,9 +68,12 @@ class PlayerActor extends BaseActor

die: (rocket) ->
debug "Crap! (For player #{@id}). It died :("
oldX = @x
oldY = @y
@x = random.randomNumber(78) + 1
@y = random.randomNumber(23) + 1
@health = 3
@manager.globalBus.push { type: 'PLAYER_DIE', player: @, rocket: rocket }
@manager.globalBus.push { type: 'BROADCAST', key: 'new-corpse', data: {x: oldX, y: oldY, color: @color}}

module.exports = PlayerActor
19 changes: 17 additions & 2 deletions server/test/spec/actors/player-actor-spec.coffee
Expand Up @@ -48,7 +48,7 @@ describe 'PlayerActor', ->
state.id.should.be.eql('123')
state.x.should.be.eql(1)
state.y.should.be.eql(1)
state.health.should.be.eql(5)
state.health.should.be.eql(3)
state.color.should.be.eql("red")
state.name.should.be.eql("MANNY")

Expand Down Expand Up @@ -119,7 +119,7 @@ describe 'PlayerActor', ->
y: @playerActor.y + 1,
direction: 'up')
rocket.move()
@playerActor.health.should.be.eql(4)
@playerActor.health.should.be.eql(2)

it 'should broadcast player-state-changed when rocket is hit', (done) ->
@gameManager.globalBus.filter((ev) -> ev.type == 'BROADCAST' && ev.key == "player-state-changed").onValue (ev) ->
Expand Down Expand Up @@ -161,3 +161,18 @@ describe 'PlayerActor', ->
@playerActor.health = 1
rocket.move()

it 'should broadcast a corpse add message when dying', (done) ->
@gameManager.globalBus.filter((ev) =>
ev.type == 'BROADCAST' && ev.key == 'new-corpse' &&
ev.data.x == @playerActor.x && ev.data.y == @playerActor.y &&
ev.data.color == @playerActor.color
).onValue (ev) ->
done()
rocket = Factory.rocketActor(
gameManager: @gameManager,
x: @playerActor.x,
y: @playerActor.y + 1,
direction: 'up')

@playerActor.health = 1
rocket.move()

0 comments on commit b9f2d35

Please sign in to comment.