kiki/coffee/mutant.coffee
monsterkodi 75fbe40295 levels
2016-08-24 23:50:44 +02:00

71 lines
2.2 KiB
CoffeeScript

# 00 00 000 000 000000000 0000000 000 000 000000000
# 000 000 000 000 000 000 000 0000 000 000
# 000000000 000 000 000 000000000 000 0 000 000
# 000 0 000 000 000 000 000 000 000 0000 000
# 000 000 0000000 000 000 000 000 000 000
Bot = require './bot'
Bullet = require './bullet'
Timer = require './timer'
Action = require './action'
class Mutant extends Bot
constructor: () ->
super
@health = 1
@move = true
die: ->
world.playSound 'BOT_DEATH'
super()
@setOpacity 0.6
@getActionWithId(Action.FALL).duration = 40
isMutant: -> true
bulletImpact: -> @health -= 0.1
bulletHitSound: -> @health > 0 and 'BULLET_HIT_MUTANT' or 'BULLET_HIT_OBJECT'
actionFinished: (action) ->
if @health <= 0 and not @died
@die()
if action.id != Action.PUSH and action.id != Action.FALL # dead player may only fall, nothing else
return
super action
moveBot: ->
changeOrientation = Math.random() < 0.3
changeJumpMode = Math.random() < 0.3
changeDirection = Math.random() < 0.3
@push = Math.random() < 0.1
fire = Math.random() < 0.5
noop = Math.random() < 0.05
if changeDirection
@dir_sgn = Math.random() < 0.3 and -1 or 1
if changeJumpMode
if @jump or @dir_sgn > 0 # prevent jumping backwards
@jump = not @jump
forwardPos = @position.plus @getDir()
if fire && world.isValidPos forwardPos
Bullet.shootFromBot @
if changeOrientation
if Math.random() < 0.5
@rotate_action = @getActionWithId Action.TURN_LEFT
else
@rotate_action = @getActionWithId Action.TURN_RIGHT
Timer.addAction @rotate_action
return
if noop
@startTimedAction @getActionWithId(Action.NOOP), 666
return
super()
module.exports = Mutant