dkl9 commited on 2025-183 20:12:05
Showing 5 changed files, with 20 additions and 19 deletions.
| ... | ... |
@@ -5,7 +5,7 @@ import mesh |
| 5 | 5 |
def crosshair(): |
| 6 | 6 |
return attributes.AttributedEntity( |
| 7 | 7 |
[[-0.03, 0, 0], [0.03, 0, 0], [0, -0.03, 0], [0, 0.03, 0]], |
| 8 |
- [0, 0, 0], [1, 1, 1, 1], mode=GL_LINES, hud=True |
|
| 8 |
+ [0, 0, 0], [1, 1, 1, 1], texi=-1, mode=GL_LINES, hud=True |
|
| 9 | 9 |
) |
| 10 | 10 |
|
| 11 | 11 |
def fps(): |
| ... | ... |
@@ -19,7 +19,7 @@ def hand(): |
| 19 | 19 |
h.add_sq(1, 1, [0.5, 0, 0], 1) |
| 20 | 20 |
h.add_sq(2, 1, [0, 0.5, 0], 1) |
| 21 | 21 |
h.add_sq(3, 1, [0, 0, 0.5], 1) |
| 22 |
- h.pos = [0.8, -0.8, 0.0] |
|
| 22 |
+ h.pos = [0.8, -0.8, -0.2] |
|
| 23 | 23 |
h.rotate(-1, [0, 1, 0]) |
| 24 | 24 |
h.rotate(0.1, [1, 0, 0]) |
| 25 | 25 |
h.orient[:3, :3] *= 0.2 |
| ... | ... |
@@ -40,25 +40,25 @@ class MapGen(world.WorldHolder): |
| 40 | 40 |
n = 0 |
| 41 | 41 |
for i in range(wr.r): |
| 42 | 42 |
for j in range(wr.r): |
| 43 |
- h = 4 + 4 * self.perlin( |
|
| 43 |
+ h = np.astype(np.floor(4 + 4 * self.perlin( |
|
| 44 | 44 |
"height", |
| 45 | 45 |
np.add(wr.pos[[0, 2]], (i, j)), |
| 46 | 46 |
np.array([10, 20]) |
| 47 |
- ) - wr.pos[1] |
|
| 47 |
+ ) - wr.pos[1]), int) |
|
| 48 | 48 |
if h > 0: |
| 49 |
- wr.grid[i, :min(int(h), wr.r), j] = 3 |
|
| 50 |
- if h < wr.r and h > 0: |
|
| 51 |
- wr.grid[i, int(h), j] = 4 |
|
| 49 |
+ wr.grid[i, :min(h, wr.r), j] = 3 |
|
| 50 |
+ if h < wr.r and h >= 0: |
|
| 51 |
+ wr.grid[i, h, j] = 4 |
|
| 52 | 52 |
if 2 <= i < wr.r - 2 and 2 <= j < wr.r - 2 and self.poisson( |
| 53 | 53 |
"trees", wr.pos[[0, 2]], wr.r, (6, 6) |
| 54 | 54 |
)[i, j] >= 1: |
| 55 | 55 |
for u in range(1, 6): |
| 56 |
- self.voxel_at(wr.pos + [0, h + u, 0], 5) |
|
| 56 |
+ self.voxel_at(wr.pos + [i, h + u, j], 5) |
|
| 57 | 57 |
for u in range(5, 7): |
| 58 | 58 |
for v in range(-7 + u, 8 - u): |
| 59 | 59 |
b = 7 - u - abs(v) |
| 60 | 60 |
for w in range(-b, b + 1): |
| 61 |
- self.voxel_at(wr.pos + [v, h + u, w], 6) |
|
| 61 |
+ self.voxel_at(wr.pos + [i + v, h + u, j + w], 6) |
|
| 62 | 62 |
return n |
| 63 | 63 |
|
| 64 | 64 |
def world_min(self, wr): |
| ... | ... |
@@ -17,22 +17,23 @@ class Player(interactive.InteractiveCamera): |
| 17 | 17 |
def update_motion(self, pressed, mg): |
| 18 | 18 |
netv = [0, 0, 0] |
| 19 | 19 |
for i in range(3): |
| 20 |
- for s in range(2): |
|
| 20 |
+ for s in range(1, -1, -1): |
|
| 21 | 21 |
sf = (-1) ** s |
| 22 |
- cp = self.pos + sf * self.vaa_mat()[i] |
|
| 23 |
- if self.collides and mg.voxel_at(cp): |
|
| 24 |
- pass |
|
| 25 |
- elif self.falls and i == 1 and s == 1: |
|
| 22 |
+ cd = 0.3 * sf * self.vaa_mat()[i] |
|
| 23 |
+ hit = self.collides and mg.voxel_at(self.pos + cd) |
|
| 24 |
+ if i == 1 and sf == -1 and self.falls and not hit: |
|
| 26 | 25 |
netv[i] = self.vaa_vel[i] - GRAVITY / FPS |
| 27 |
- else: |
|
| 26 |
+ if i != 1 or not self.falls or mg.voxel_at(self.pos - cd): |
|
| 28 | 27 |
netv[i] += sf * any(pressed[j] for j in ARROWS[2 * i + s]) |
| 28 |
+ if hit: |
|
| 29 |
+ netv[i] = sf * min(0, sf * netv[i]) |
|
| 29 | 30 |
self.vaa_vel = vec(netv) |
| 30 | 31 |
|
| 31 | 32 |
def set_hand(self, new_hand): |
| 32 | 33 |
self.hand = int(new_hand) |
| 33 | 34 |
hg = self.hud["hand"] |
| 34 | 35 |
hg.faces = [(a, self.hand) for (a, _) in hg.faces] |
| 35 |
- for i in [1, 3, 4]: |
|
| 36 |
+ for i in range(len(VERTEX_ATTRS)): |
|
| 36 | 37 |
update_attr(hg, i) |
| 37 | 38 |
|
| 38 | 39 |
def handle_event(self, ev, mg, scene): |
| ... | ... |
@@ -22,11 +22,9 @@ class WorldRegion(mesh.SquareMesh): |
| 22 | 22 |
for s in range(2): |
| 23 | 23 |
oob = pos[d] == self.r - 1 and s == 0 |
| 24 | 24 |
oob |= pos[d] == 0 and s == 1 |
| 25 |
- if oob: |
|
| 26 |
- continue |
|
| 27 | 25 |
a = (d + 1) * (-1) ** s |
| 28 | 26 |
o = np.array(axis2offset(a), dtype=np.int64) |
| 29 |
- bc = bool(self.grid[*(pos + o)]) |
|
| 27 |
+ bc = not oob and bool(self.grid[*(pos + o)]) |
|
| 30 | 28 |
if bp ^ bc: |
| 31 | 29 |
a *= bp - bc |
| 32 | 30 |
self.add_sq(a, 1, pos + o / 2, pos + (0 if bp else o)) |
| 33 | 31 |