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

44 lines
1.5 KiB
CoffeeScript

# 000 000 0000000 000 000 000 00000000
# 000 000 000 000 000 000 000 000
# 000 000 000000000 000 000 000 0000000
# 000 000 000 000 000 000
# 0 000 000 0000000 0 00000000
log = require './tools/log'
Quaternion = require './lib/quaternion'
Pushable = require './pushable'
Action = require './action'
Face = require './face'
class Valve extends Pushable
constructor: (@face) ->
super
@angle = 0.0
@active = false
@clockwise = false
@addAction new Action @, Action.ROTATE, "rotation", 2000, Action.REPEAT
# @startTimedAction @getActionWithId Action.ROTATE
updateMesh: ->
# log "Valve.updateMesh #{@angle} #{@face}"
rot = Quaternion.rotationAroundVector (@clockwise and 1 or -1) * @angle, 0,0,1
@mesh.quaternion.copy Face.orientationForFace(@face).mul rot
setPosition: (pos) ->
super pos
p = @getPos()
dir = @face % 3
sum = ((dir == Face.Y or dir == Face.Z) and p.x or 0) + ((dir == Face.X or dir == Face.Z) and p.y or 0) + ((dir == Face.X or dir == Face.Y) and p.z or 0)
@clockwise = sum % 2
# log "Valve.setPosition sum #{sum} @clockwise #{@clockwise}", pos
performAction: (action) ->
switch action.id
when Action.ROTATE
@angle += action.getRelativeDelta() * 360
@updateMesh()
else super action
module.exports = Valve