diff options
Diffstat (limited to 'client/map')
-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): |