kiki/coffee/wirestone.coffee
monsterkodi 2e4c5e5233 levels
2016-08-21 23:07:33 +02:00

65 lines
2.3 KiB
CoffeeScript

# 000 000 000 00000000 00000000 0000000 000000000 0000000 000 000 00000000
# 000 0 000 000 000 000 000 000 000 000 000 0000 000 000
# 000000000 000 0000000 0000000 0000000 000 000 000 000 0 000 0000000
# 000 000 000 000 000 000 000 000 000 000 000 0000 000
# 00 00 000 000 000 00000000 0000000 000 0000000 000 000 00000000
Stone = require './stone'
Wall = require './wall'
Face = require './face'
Wire = require './wire'
Action = require './action'
Generator = require './generator'
class WireStone extends Stone
constructor: () ->
@wires = [null, null, null, null, null, null]
super
initAction: (action) ->
switch action.id
when Action.FALL, Action.PUSH
for i in [0...6]
if @wires[i]?
world.unsetObject @wires[i]
@wires[i].setActive false
for generator in world.getObjectsOfType Generator # ???
generator.activateWires() if generator.active # ???
super action
setPosition: (pos) ->
for i in [0...6]
newPos = pos.minus Face.normalVectorForFace i
if @isFreePos newPos
if not @wires[i]?
@wires[i] = new Wire (i+3)%6
world.addObjectAtPos @wires[i], newPos
else
world.setObjectAtPos @wires[i], newPos
@wires[i].updateActive()
else if @wires[i]?
@wires[i].del()
@wires[i] = null
for generator in world.getObjectsOfType Generator
if generator.active
generator.activateWires()
super pos
setCurrentPosition: (pos) ->
super pos
for i in [0...6]
@wires[i]?.setPosition @current_position.minus Face.normalVectorForFace i
isFreePos: (pos) ->
if world.isUnoccupiedPos pos
return true
if world.isValidPos pos
occupant = world.getOccupantAtPos pos
return not (occupant instanceof Wall) and not (occupant instanceof Stone)
return false
module.exports = WireStone