kiki/coffee/event.coffee
2016-10-12 16:27:29 +02:00

71 lines
2.0 KiB
CoffeeScript

# 00000000 000 000 00000000 000 000 000000000
# 000 000 000 000 0000 000 000
# 0000000 000 000 0000000 000 0 000 000
# 000 000 000 000 0000 000
# 00000000 0 00000000 000 000 000
{
last
} = require './tools/tools'
Action = require './action'
_ = require 'lodash'
class Event
constructor: (obj, name) ->
@object = obj
@name = name
@time = 0
@actions = []
@finished_actions = []
getTime: -> @time
hasAction: (action) -> _.find @actions, action
addAction: (action) ->
if action? and not @hasAction action
return if world.noRotations and action.id == Action.ROTATE
@actions.push action
action.event = @
action.init()
else if not action?
console.log 'Event.addAction no action?'
throw new Error
else
log "Event.addAction has action #{action.name}"
removeAllActions: () ->
while @actions.length
@removeAction last @actions
getActionsOfObject: (object) -> @actions.filter (a) -> a.object == object
removeActionsOfObject: (object) ->
for a in @actions
@removeAction a if a.object == object
removeActionWithName: (actionName) ->
for a in @actions
@removeAction a if a.name == actionName
removeAction: (action) ->
action.event = null
action.reset()
_.pull @actions, action
_.pull @finished_actions, action
triggerActions: () ->
return if not @actions.length
@time = world.getTime()
actions = _.clone @actions
while actions.length
actions.pop().performWithEvent @
addFinishedAction: (action) ->
@finished_actions.push action
finishActions: () ->
while @finished_actions.length
@finished_actions.pop().finished()
module.exports = Event