|
import collider |
|
|
|
import models.cube |
|
|
|
class Block_type: |
|
|
|
def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): |
|
self.name = name |
|
self.block_face_textures = block_face_textures |
|
self.model = model |
|
|
|
|
|
|
|
self.transparent = model.transparent |
|
self.is_cube = model.is_cube |
|
self.glass = model.glass |
|
|
|
|
|
|
|
self.colliders = [] |
|
|
|
for _collider in model.colliders: |
|
self.colliders.append(collider.Collider(*_collider)) |
|
|
|
|
|
|
|
self.vertex_positions = model.vertex_positions |
|
self.tex_coords = model.tex_coords.copy() |
|
self.shading_values = model.shading_values |
|
|
|
def set_block_face(face, texture): |
|
|
|
|
|
if face > len(self.tex_coords) - 1: |
|
return |
|
|
|
self.tex_coords[face] = self.tex_coords[face].copy() |
|
|
|
for vertex in range(4): |
|
self.tex_coords[face][vertex * 3 + 2] = texture |
|
|
|
for face in block_face_textures: |
|
texture = block_face_textures[face] |
|
texture_manager.add_texture(texture) |
|
|
|
texture_index = texture_manager.textures.index(texture) |
|
|
|
if face == "all": |
|
for i in range(len(self.tex_coords)): |
|
set_block_face(i, texture_index) |
|
|
|
elif face == "sides": |
|
set_block_face(0, texture_index) |
|
set_block_face(1, texture_index) |
|
set_block_face(4, texture_index) |
|
set_block_face(5, texture_index) |
|
|
|
elif face == "x": |
|
set_block_face(0, texture_index) |
|
set_block_face(1, texture_index) |
|
|
|
elif face == "y": |
|
set_block_face(2, texture_index) |
|
set_block_face(3, texture_index) |
|
|
|
elif face == "z": |
|
set_block_face(4, texture_index) |
|
set_block_face(5, texture_index) |
|
|
|
else: |
|
set_block_face(["right", "left", "top", "bottom", "front", "back"].index(face), texture_index) |