Add cow, pig, sheep models
This commit is contained in:
parent
5de1f764fd
commit
32a09b555e
@ -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
|
||||
|
@ -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"])
|
129
src/mcedit2/rendering/chunkmeshes/entity/quadruped.py
Normal file
129
src/mcedit2/rendering/chunkmeshes/entity/quadruped.py
Normal 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)
|
Reference in New Issue
Block a user