DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
b5dd445
Branches
Tags
master
voxels
mesh.py
Faster raycast, better mapgen and much better HUD
dkl9
commited
b5dd445
at 2025-174 14:21:36
mesh.py
Blame
History
Raw
from libs import * import entity class SquareMesh(entity.Entity): def __init__(self, **kwargs): super().__init__( np.empty((0, 3), dtype=FLOAT), [0.0, 1.0, 0.0, 1.0], [0.0, 0.0, 0.0], mode=GL_TRIANGLES, **kwargs ) self.faces = [] def add_sq(self, axis, width, pos, fd=1): w = width / 2 sq = pos + np.roll(vec([ [w, w, 0], [-w, w, 0], [w, -w, 0], [-w, -w, 0], [w, -w, 0], [-w, w, 0] ]), abs(axis), 1) if axis < 0: sq = np.flip(sq, 0) self.verts = np.concatenate((self.verts, sq), dtype=FLOAT) for i in range(2): self.faces.append((axis, fd)) def del_sq(self, ind): self.verts = np.delete(self.verts, np.s_[3 * ind:3 * (ind + 2)], 0) del self.faces[ind:ind + 2] def cube_col(self, fd, axis, corner): if not isinstance(fd, int): fd = self.grid[*fd] match fd: case 0: return vec([0.0, 0.0, 0.0, 0.0]) case 1: return vec([*np.add(0.5, axis2offset(axis, 0.5)), 1.0]) case 2: top = vec([0.5, 0.5, 1.0, 1.0]) bottom = vec([0.0, 0.0, 0.5, 1.0]) match axis: case 3 | -3: return top if corner < 2 else bottom case 1 | -1: return top if not corner % 2 else bottom case 2: return top case -2: return bottom def col_list(self): cl = np.empty((3 * len(self.faces), 4), dtype=FLOAT) for s in range(len(self.faces) // 2): axis, fd = self.faces[2 * s] for (t, c) in enumerate([0, 1, 2, 3, 2, 1] if axis > 0 else [1, 2, 3, 2, 1, 0]): cl[6 * s + t] = self.cube_col(fd, axis, c) return cl