diff options
author | nokoe <nokoe@mailbox.org> | 2024-09-27 18:07:42 +0200 |
---|---|---|
committer | nokoe <nokoe@mailbox.org> | 2024-09-27 18:07:57 +0200 |
commit | 9ac3ba2098ce6f3f3383c750e135d45e8820b5bc (patch) | |
tree | 2562fd5c573e66fbefbc2d093ffb715887cc14c9 | |
parent | d213fa30c1ad067363f374a059d5f3b066a0d0ea (diff) | |
download | hurrycurry-9ac3ba2098ce6f3f3383c750e135d45e8820b5bc.tar hurrycurry-9ac3ba2098ce6f3f3383c750e135d45e8820b5bc.tar.bz2 hurrycurry-9ac3ba2098ce6f3f3383c750e135d45e8820b5bc.tar.zst |
FloorMesher: add side faces
-rw-r--r-- | client/map/map.gd | 4 | ||||
-rw-r--r-- | client/map/tile_factory.gd | 2 | ||||
-rw-r--r-- | client/map/tiles/floor_mesher.gd | 29 |
3 files changed, 31 insertions, 4 deletions
diff --git a/client/map/map.gd b/client/map/map.gd index 4b15d55b..10bb1bd1 100644 --- a/client/map/map.gd +++ b/client/map/map.gd @@ -18,12 +18,10 @@ class_name Map extends Node3D -@export var optimize: bool = true - var tile_by_pos: Dictionary = {} var autobake = false var currently_baked = false -@onready var floor_mesher = FloorMesher.new() if optimize else null +var floor_mesher = FloorMesher.new() var floor_node := MeshInstance3D.new() func get_tile_name(pos: Vector2i): diff --git a/client/map/tile_factory.gd b/client/map/tile_factory.gd index 079c2d19..da76f24d 100644 --- a/client/map/tile_factory.gd +++ b/client/map/tile_factory.gd @@ -20,7 +20,7 @@ class TileCC: var tile_name: String var position: Vector2i var neighbors: Array - var floor_mesher # FloorMesher or null + var floor_mesher: FloorMesher static func produce(tile_name: String, position: Vector2i, neighbors: Array, floor_mesher) -> Tile: var ctx := TileCC.new() diff --git a/client/map/tiles/floor_mesher.gd b/client/map/tiles/floor_mesher.gd index 602fe18d..182425a5 100644 --- a/client/map/tiles/floor_mesher.gd +++ b/client/map/tiles/floor_mesher.gd @@ -16,6 +16,8 @@ class_name FloorMesher extends Object +const H := 0.25 + const RECTANGLE: Array[Vector3] = [ Vector3.ZERO, Vector3.RIGHT, Vector3.BACK + Vector3.RIGHT, Vector3.BACK, Vector3.ZERO, Vector3.BACK + Vector3.RIGHT, ] @@ -65,11 +67,38 @@ func flush() -> ArrayMesh: rectangle.x += 1 else: break + # floor for i in range(UV.size()): st.set_normal(Vector3.UP) st.set_uv(UV[i] * Vector2(rectangle)) st.add_vertex(RECTANGLE[i] * Vector3(rectangle.x, 0., rectangle.y) + Vector3(rectangle_origin.x, 0., rectangle_origin.y)) + # the faces on the side (should be improved...) + # back + for i in range(UV.size()): + st.set_normal(Vector3.BACK) + st.set_uv(UV[i] * Vector2(rectangle.x, H)) + st.add_vertex((RECTANGLE[i] * Vector3(rectangle.x, 0., -H)).rotated(Vector3.RIGHT, 0.5 * PI) + + Vector3(rectangle_origin.x, -H, rectangle_origin.y)) + # right + for i in range(UV.size()): + st.set_normal(Vector3.RIGHT) + st.set_uv(UV[i] * Vector2(H, rectangle.y)) + st.add_vertex((RECTANGLE[i] * Vector3(H, 0., rectangle.y)).rotated(Vector3.BACK, 0.5 * PI) + + Vector3(rectangle_origin.x, -H, rectangle_origin.y)) + # left + for i in range(UV.size()): + st.set_normal(Vector3.LEFT) + st.set_uv(UV[i] * Vector2(H, rectangle.y)) + st.add_vertex((RECTANGLE[i] * Vector3(H, 0., -rectangle.y)).rotated(Vector3.BACK, 0.5 * PI) + + Vector3(rectangle_origin.x + rectangle.x, -H, rectangle_origin.y + rectangle.y)) + # back + for i in range(UV.size()): + st.set_normal(Vector3.BACK) + st.set_uv(UV[i] * Vector2(rectangle.x, H)) + st.add_vertex((RECTANGLE[i] * Vector3(-rectangle.x, 0., -H)).rotated(Vector3.RIGHT, 0.5 * PI) + + Vector3(rectangle_origin.x + rectangle.x, -H, rectangle_origin.y + rectangle.y)) + # remove the rectangle from the "queue" for x in range(rectangle_origin.x, rectangle_origin.x + rectangle.x): for y in range(rectangle_origin.y, rectangle_origin.y + rectangle.y): |