0

Update function generate_full_block, fix problems with beds, cakes, and trapdoors.

This commit is contained in:
Alejandro Aguilera
2011-07-17 01:15:23 +02:00
parent b17f51404b
commit 641e9f5c18

View File

@@ -326,34 +326,34 @@ def _build_full_block(top, side1, side2, side3, side4, bottom=None, blockID=None
A non transparent block uses top, side 3 and side 4. A non transparent block uses top, side 3 and side 4.
If top is a tuple then first member is the top image and the second If top is a tuple then first item is the top image and the second
member is an increment (integer) from 0 to 12. This increment will item is an increment (integer) from 0 to 16 (pixels in the
used to crop the side images to look like a block and to paste all original minecraft texture). This increment will be used to crop the
the images increment pixels lower. Using increment = 6 will create side images and to paste the top image increment pixels lower, so if
a half-block. you use an increment of 8, it willll draw a half-block.
NOTE: this method uses the top of the texture image (as done in NOTE: this method uses the bottom of the texture image (as done in
minecraft with beds) minecraft with beds and cackes)
""" """
increment = 0 increment = 0
if isinstance(top, tuple): if isinstance(top, tuple):
increment = top[1] increment = math.floor((top[1] / 16.)*12.) # range increment in the block height in pixels (half texture size)
crop_height = int(increment * 16./12.) crop_height = increment
top = top[0] top = top[0]
if side1 != None: if side1 != None:
side1 = side1.copy() side1 = side1.copy()
ImageDraw.Draw(side1).rectangle((0, 16 - crop_height,16,16),outline=(0,0,0,0),fill=(0,0,0,0)) ImageDraw.Draw(side1).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0))
if side2 != None: if side2 != None:
side2 = side2.copy() side2 = side2.copy()
ImageDraw.Draw(side2).rectangle((0, 16 - crop_height,16,16),outline=(0,0,0,0),fill=(0,0,0,0)) ImageDraw.Draw(side2).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0))
if side3 != None: if side3 != None:
side3 = side3.copy() side3 = side3.copy()
ImageDraw.Draw(side3).rectangle((0, 16 - crop_height,16,16),outline=(0,0,0,0),fill=(0,0,0,0)) ImageDraw.Draw(side3).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0))
if side4 != None: if side4 != None:
side4 = side4.copy() side4 = side4.copy()
ImageDraw.Draw(side4).rectangle((0, 16 - crop_height,16,16),outline=(0,0,0,0),fill=(0,0,0,0)) ImageDraw.Draw(side4).rectangle((0, 0,16,crop_height),outline=(0,0,0,0),fill=(0,0,0,0))
img = Image.new("RGBA", (24,24), (38,92,255,0)) img = Image.new("RGBA", (24,24), (38,92,255,0))
@@ -367,7 +367,7 @@ def _build_full_block(top, side1, side2, side3, side4, bottom=None, blockID=None
side1 = ImageEnhance.Brightness(side1).enhance(0.9) side1 = ImageEnhance.Brightness(side1).enhance(0.9)
side1.putalpha(sidealpha) side1.putalpha(sidealpha)
composite.alpha_over(img, side1, (0,0 + increment), side1) composite.alpha_over(img, side1, (0,0), side1)
if side2 != None : if side2 != None :
@@ -378,7 +378,7 @@ def _build_full_block(top, side1, side2, side3, side4, bottom=None, blockID=None
side2 = ImageEnhance.Brightness(side2).enhance(0.8) side2 = ImageEnhance.Brightness(side2).enhance(0.8)
side2.putalpha(sidealpha2) side2.putalpha(sidealpha2)
composite.alpha_over(img, side2, (12,0 + increment), side2) composite.alpha_over(img, side2, (12,0), side2)
if bottom != None : if bottom != None :
bottom = transform_image(bottom, blockID) bottom = transform_image(bottom, blockID)
@@ -393,7 +393,7 @@ def _build_full_block(top, side1, side2, side3, side4, bottom=None, blockID=None
side3 = ImageEnhance.Brightness(side3).enhance(0.9) side3 = ImageEnhance.Brightness(side3).enhance(0.9)
side3.putalpha(sidealpha) side3.putalpha(sidealpha)
composite.alpha_over(img, side3, (0,6 + increment), side3) composite.alpha_over(img, side3, (0,6), side3)
if side4 != None : if side4 != None :
side4 = transform_image_side(side4, blockID) side4 = transform_image_side(side4, blockID)
@@ -404,7 +404,7 @@ def _build_full_block(top, side1, side2, side3, side4, bottom=None, blockID=None
side4 = ImageEnhance.Brightness(side4).enhance(0.8) side4 = ImageEnhance.Brightness(side4).enhance(0.8)
side4.putalpha(sidealpha) side4.putalpha(sidealpha)
composite.alpha_over(img, side4, (12,6 + increment), side4) composite.alpha_over(img, side4, (12,6), side4)
if top != None : if top != None :
top = transform_image(top, blockID) top = transform_image(top, blockID)
@@ -605,7 +605,7 @@ def generate_special_texture(blockID, data):
if blockID == 26: # bed if blockID == 26: # bed
increment = 5 increment = 8
left_face = None left_face = None
right_face = None right_face = None
if data & 0x8 == 0x8: # head of the bed if data & 0x8 == 0x8: # head of the bed
@@ -1393,21 +1393,21 @@ def generate_special_texture(blockID, data):
img = Image.new("RGBA", (24,24), (38,92,255,0)) img = Image.new("RGBA", (24,24), (38,92,255,0))
composite.alpha_over(img, side, (1,12), side) composite.alpha_over(img, side, (1,6), side)
composite.alpha_over(img, otherside, (11,13), otherside) # workaround, fixes a hole composite.alpha_over(img, otherside, (11,7), otherside) # workaround, fixes a hole
composite.alpha_over(img, otherside, (12,12), otherside) composite.alpha_over(img, otherside, (12,6), otherside)
composite.alpha_over(img, top, (0,6), top) composite.alpha_over(img, top, (0,6), top)
return generate_texture_tuple(img, blockID) return generate_texture_tuple(img, blockID)
if blockID in (93, 94): # redstone repeaters, ON and OFF if blockID in (93, 94): # redstone repeaters (diodes), ON and OFF
# NOTE: this function uses the redstone torches generated above, # NOTE: this function uses the redstone torches generated above,
# this must run after the function of the torches. # this must run after the function of the torches.
top = terrain_images[131] if blockID == 93 else terrain_images[147] top = terrain_images[131] if blockID == 93 else terrain_images[147]
side = terrain_images[5] side = terrain_images[5]
increment = 9 increment = 13
if (data & 0x3) == 0: # pointing east if (data & 0x3) == 0: # pointing east
pass pass
@@ -1532,7 +1532,7 @@ def generate_special_texture(blockID, data):
img = _build_full_block(None, None, None, texture, None) img = _build_full_block(None, None, None, texture, None)
elif data & 0x4 == 0: # closed trapdoor elif data & 0x4 == 0: # closed trapdoor
img = _build_full_block((texture, 9), None, None, texture, texture) img = _build_full_block((texture, 12), None, None, texture, texture)
return generate_texture_tuple(img, blockID) return generate_texture_tuple(img, blockID)