71 lines
2.2 KiB
CoffeeScript
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
|