65 lines
2.3 KiB
CoffeeScript
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
|