Begin implementing 180 degree rotations

This commit is contained in:
David Vierra 2016-06-18 02:45:37 -10:00
parent bee69153b8
commit d77c9c9d61

View File

@ -87,13 +87,21 @@ class BlockRotations(object):
self.rotateY90 = self.buildTable(axis='y')
self.rotateX90 = self.buildTable(axis='x')
self.rotateZ90 = self.buildTable(axis='z')
self.rotateX180 = self.buildTable(axis='x', aboutFace=True)
self.rotateZ180 = self.buildTable(axis='z', aboutFace=True)
def buildTable(self, axis):
def buildTable(self, axis, aboutFace=False):
mapping = self.mappings[axis]
axisMapping = self.axisMappings[axis]
if aboutFace:
mapping90 = mapping
mapping = {k: mapping90[v] for k, v in mapping90.iteritems()}
table = blankRotationTable()
rotIncrement = 8 if aboutFace else 4
for block in self.blocktypes:
state = block.stateDict
if not len(state):
@ -124,7 +132,7 @@ class BlockRotations(object):
# For signs and banners: rotation=10 and similar
if 'rotation' in state:
rotation = (int(state['rotation']) + 4) % 16
rotation = (int(state['rotation']) + rotIncrement) % 16
state['rotation'] = unicode(rotation)
# For rails, powered rails, etc: shape=north_east
@ -138,11 +146,20 @@ class BlockRotations(object):
# For logs and such: axis=x and similar
if 'axis' in state:
if not aboutFace and 'axis' in state:
axis = state['axis']
axis = axisMapping.get(axis, axis)
state['axis'] = axis
# For stairs/slabs: if x or z axis and 180-degree rotation, flip "half"
if axis in 'xz' and aboutFace:
if 'half' in state:
if state['half'] == 'bottom':
state['half'] = 'top'
elif state['half'] == 'top':
state['half'] = 'bottom'
#print("Changed %s \nto %s" % (stateString, newStateString))
newBlock = self.matchingState(block.internalName, state)