aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/map/map.gd4
-rw-r--r--client/map/tile_factory.gd2
-rw-r--r--client/map/tiles/floor_mesher.gd29
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):