Add cow, pig, sheep models

This commit is contained in:
David Vierra 2015-07-12 16:41:45 -10:00
parent 5de1f764fd
commit 32a09b555e
3 changed files with 165 additions and 18 deletions

View File

@ -10,7 +10,7 @@ log = logging.getLogger(__name__)
class ModelBox(collections.namedtuple(
'ModelBox',
'x y z w h l expandOffset mirror',
'u v x y z w h l expandOffset mirror',
)):
@property
@ -45,16 +45,19 @@ class ModelRenderer(object):
self.u = u
self.v = v
self.mirror = False
self.centerPoint = 0, 0, 0
self.rotation = 0, 0, 0
self.cx, self.cy, self.cz = 0, 0, 0
self.rx, self.ry, self.rz = 0, 0, 0
def addBox(self, x, y, z, w, h, l, expandOffset=0.0, mirror=None):
if mirror is None:
mirror = self.mirror
self.boxes.append(ModelBox(x, y, z, w, h, l, expandOffset, mirror))
self.boxes.append(ModelBox(self.u, self.v, x, y, z, w, h, l, expandOffset, mirror))
def setCenterPoint(self, x, y, z):
self.centerPoint = x, y, z
self.cx, self.cy, self.cz = x, y, z
def setRotation(self, rx, ry, rz):
self.rotation = rx, ry, rz
self.rx, self.ry, self.rz = rx, ry, rz
def setTextureOffset(self, u, v):
self.u, self.v = u, v

View File

@ -8,6 +8,7 @@ import numpy
from mcedit2.rendering.chunkmeshes.entity.biped import ModelZombie, ModelSkeleton, \
ModelPigZombie
from mcedit2.rendering.chunkmeshes.entity.creeper import ModelCreeper
from mcedit2.rendering.chunkmeshes.entity.quadruped import ModelPig, ModelCow, ModelSheep
from mcedit2.rendering.chunkmeshes.entity.spider import ModelSpider
log = logging.getLogger(__name__)
@ -22,7 +23,8 @@ def makeQuad(c1, c2, c3, c4, u1, v1, u2, v2):
]
def makeBoxQuads(u, v, box):
def makeBoxQuads(box):
u, v = box.u, box.v
x, y, z = box.x, box.y, box.z
x2, y2, z2 = box.x2, box.y2, box.z2
expandOffset = box.expandOffset
@ -48,12 +50,23 @@ def makeBoxQuads(u, v, box):
dx, dy, dz = box.dx, box.dy, box.dz
quadArgs = [
(x2yz2, x2yz, x2y2z, x2y2z2, u + dz + dx, v + dz, u + dz + dx + dz, v + dz + dy),
(xyz, xyz2, xy2z2, xy2z, u, v + dz, u + dz, v + dz + dy),
(x2yz2, xyz2, xyz, x2yz, u + dz, v, u + dz + dx, v + dz ),
(x2y2z, xy2z, xy2z2, x2y2z2, u + dz + dx, v + dz, u + dz + dx + dx, v ),
(x2yz, xyz, xy2z, x2y2z, u + dz, v + dz, u + dz + dx, v + dz + dy),
(xyz2, x2yz2, x2y2z2, xy2z2, u + dz + dx + dz, v + dz, u + dz + dx + dz + dx, v + dz + dy),
(x2yz2, x2yz, x2y2z, x2y2z2,
u + dz + dx, v + dz, u + dz + dx + dz, v + dz + dy),
(xyz, xyz2, xy2z2, xy2z,
u, v + dz, u + dz, v + dz + dy),
(x2yz2, xyz2, xyz, x2yz,
u + dz, v, u + dz + dx, v + dz),
(x2y2z, xy2z, xy2z2, x2y2z2,
u + dz + dx, v + dz, u + dz + dx + dx, v),
(x2yz, xyz, xy2z, x2y2z,
u + dz, v + dz, u + dz + dx, v + dz + dy),
(xyz2, x2yz2, x2y2z2, xy2z2,
u + dz + dx + dz, v + dz, u + dz + dx + dz + dx, v + dz + dy),
]
quads = []
for a in quadArgs:
@ -98,12 +111,11 @@ def cookEntityModel(model):
allVerts = []
for part in model.parts:
partVerts = []
u, v = part.u, part.v
for box in part.boxes:
partVerts.extend(makeBoxQuads(u, v, box))
partVerts.extend(makeBoxQuads(box))
cx, cy, cz = part.centerPoint
rx, ry, rz = part.rotation
cx, cy, cz = part.cx, part.cy, part.cz
rx, ry, rz = part.rx, part.ry, part.rz
partMatrix = numpy.identity(4)
if ry:
partMatrix = npRotate("y", ry) * partMatrix
@ -133,7 +145,10 @@ addModel(ModelZombie())
addModel(ModelSkeleton())
addModel(ModelPigZombie())
addModel(ModelSpider())
addModel(ModelPig())
addModel(ModelCow())
addModel(ModelSheep())
if __name__ == '__main__':
from pprint import pprint
pprint(cookedModels["Spider"])
pprint(cookedModels["Sheep"])

View File

@ -0,0 +1,129 @@
"""
pig
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import logging
import math
from mcedit2.rendering.chunkmeshes.entity.modelrenderer import ModelRenderer
log = logging.getLogger(__name__)
class ModelQuadruped(object):
def __init__(self, height, expandOffset=0.0):
self.head = ModelRenderer(self, 0, 0)
self.head.addBox(-4.0, -4.0, -8.0, 8, 8, 8, expandOffset)
self.head.setCenterPoint(0.0, (18 - height), -6.0)
self.body = ModelRenderer(self, 28, 8)
self.body.addBox(-5.0, -10.0, -7.0, 10, 16, 8, expandOffset)
self.body.setCenterPoint(0.0, (17 - height), 2.0)
self.leg1 = ModelRenderer(self, 0, 16)
self.leg1.addBox(-2.0, 0.0, -2.0, 4, height, 4, expandOffset)
self.leg1.setCenterPoint(-3.0, (24 - height), 7.0)
self.leg2 = ModelRenderer(self, 0, 16)
self.leg2.addBox(-2.0, 0.0, -2.0, 4, height, 4, expandOffset)
self.leg2.setCenterPoint(3.0, (24 - height), 7.0)
self.leg3 = ModelRenderer(self, 0, 16)
self.leg3.addBox(-2.0, 0.0, -2.0, 4, height, 4, expandOffset)
self.leg3.setCenterPoint(-3.0, (24 - height), -5.0)
self.leg4 = ModelRenderer(self, 0, 16)
self.leg4.addBox(-2.0, 0.0, -2.0, 4, height, 4, expandOffset)
self.leg4.setCenterPoint(3.0, (24 - height), -5.0)
self.body.setRotation(math.pi/2., 0, 0)
@property
def parts(self):
return [
self.head,
self.body,
self.leg1,
self.leg2,
self.leg3,
self.leg4,
]
class ModelPig(ModelQuadruped):
id = "Pig"
modelTexture = "assets/minecraft/textures/entity/pig/pig.png"
def __init__(self, expandOffset=0.0):
super(ModelPig, self).__init__(6)
self.head.setTextureOffset(16, 16)
self.head.addBox(-2.0, 0.0, -9.0, 4, 3, 1, expandOffset)
class ModelCow(ModelQuadruped):
id = "Cow"
modelTexture = "assets/minecraft/textures/entity/cow/cow.png"
def __init__(self):
super(ModelCow, self).__init__(12)
self.head = ModelRenderer(self, 0, 0)
self.head.addBox(-4.0, -4.0, -6.0, 8, 8, 6, 0.0)
self.head.setCenterPoint(0.0, 4.0, -8.0)
self.head.setTextureOffset(22, 0)
self.head.addBox(-5.0, -5.0, -4.0, 1, 3, 1, 0.0)
self.head.setTextureOffset(22, 0)
self.head.addBox(4.0, -5.0, -4.0, 1, 3, 1, 0.0)
self.body = ModelRenderer(self, 18, 4)
self.body.addBox(-6.0, -10.0, -7.0, 12, 18, 10, 0.0)
self.body.setCenterPoint(0.0, 5.0, 2.0)
self.body.setTextureOffset(52, 0)
self.body.addBox(-2.0, 2.0, -8.0, 4, 6, 1)
self.body.setRotation(math.pi/2., 0, 0)
self.leg1.cx -= 1
self.leg2.cx += 1
self.leg3.cx -= 1
self.leg4.cx += 1
self.leg3.cz -= 1
self.leg4.cz += 1
class ModelSheepWool(ModelQuadruped):
modelTexture = "assets/minecraft/textures/entity/sheep/sheep_fur.png"
def __init__(self):
super(ModelSheepWool, self).__init__(12)
self.head = ModelRenderer(self, 0, 0)
self.head.addBox(-3.0, -4.0, -4.0, 6, 6, 6, 0.6)
self.head.setCenterPoint(0.0, 6.0, -8.0)
self.body = ModelRenderer(self, 28, 8)
self.body.addBox(-4.0, -10.0, -7.0, 8, 16, 6, 1.75)
self.body.setCenterPoint(0.0, 5.0, 2.0)
legExpand = 0.5
self.leg1 = ModelRenderer(self, 0, 16)
self.leg1.addBox(-2.0, 0.0, -2.0, 4, 6, 4, legExpand)
self.leg1.setCenterPoint(-3.0, 12.0, 7.0)
self.leg2 = ModelRenderer(self, 0, 16)
self.leg2.addBox(-2.0, 0.0, -2.0, 4, 6, 4, legExpand)
self.leg2.setCenterPoint(3.0, 12.0, 7.0)
self.leg3 = ModelRenderer(self, 0, 16)
self.leg3.addBox(-2.0, 0.0, -2.0, 4, 6, 4, legExpand)
self.leg3.setCenterPoint(-3.0, 12.0, -5.0)
self.leg4 = ModelRenderer(self, 0, 16)
self.leg4.addBox(-2.0, 0.0, -2.0, 4, 6, 4, legExpand)
self.leg4.setCenterPoint(3.0, 12.0, -5.0)
self.body.setRotation(math.pi/2., 0, 0)
class ModelSheep(ModelQuadruped):
id = "Sheep"
modelTexture = "assets/minecraft/textures/entity/sheep/sheep.png"
def __init__(self):
super(ModelSheep, self).__init__(12)
self.head = ModelRenderer(self, 0, 0)
self.head.addBox(-3.0, -4.0, -6.0, 6, 6, 8, 0.0)
self.head.setCenterPoint(0.0, 6.0, -8.0)
self.body = ModelRenderer(self, 28, 8)
self.body.addBox(-4.0, -10.0, -7.0, 8, 16, 6, 0.0)
self.body.setCenterPoint(0.0, 5.0, 2.0)
self.body.setRotation(math.pi/2., 0, 0)