From ddaa83a472a6d6eecafa80c5ca09b81ef26ac563 Mon Sep 17 00:00:00 2001 From: Alain STARK Date: Tue, 23 Aug 2022 21:48:22 +0200 Subject: [PATCH] Find point --- utils/terrain/Terrain.gd | 33 ++++++++++++++++++++++++++++++++- world/game.gd | 30 +++--------------------------- world/game.tscn | 1 + 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index d221ba4..acd387f 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -309,8 +309,15 @@ class Point: func to_center(): return VoronoiCenter.new(_idx, _terrain) + func find_index(): + var vect=point2d() + return int(vect[0] / 64.0) * 32 + int(vect[1] / 64.0) + func get_index(): return _idx + + func distance(vect): + return(point2d().distance_to(vect)) func has_key(key): return _terrain._points_data[_idx].has(key) @@ -533,6 +540,14 @@ func create(width:int, height:int, spacing:int, name:String): _halfedges = PoolIntArray(delaunay.halfedges) _triangles = PoolIntArray(delaunay.triangles) + # Initialize find_point + _data["find_point"]=[] + _data["find_point"].resize(1024) + for idx in 1024: + _data["find_point"][idx]=[] + for point in get_points(): + _data["find_point"][point.find_index()].append(point.get_index()) + # Initialize _points_to_halfedges for edge in get_edges(): var endpoint = _triangles[edge.next_half().get_index()] @@ -579,7 +594,23 @@ func get_points(): func get_point(idx): return Point.new(idx, self) - + +func find_point(vect): + var selected_point + var minimum = 999999.99 + for idx in _data["find_point"][int(vect[0] / 64.0) * 32 + int(vect[1] / 64.0)]: + var point=get_point(idx) + var distance = point.distance(vect) + if(distance < minimum): + selected_point = point + minimum=distance + for point_around in selected_point.points_around(): + var distance = point_around.distance(vect) + if(distance < minimum): + selected_point = point_around + minimum=distance + return selected_point + func get_centers(): var centers = VoronoiCenters.new(self) return centers diff --git a/world/game.gd b/world/game.gd index 9394f0e..abf8a85 100644 --- a/world/game.gd +++ b/world/game.gd @@ -2,8 +2,8 @@ extends Node signal world_loaded -export(int) var width = 2000 -export(int) var height = 2000 +export(int) var width = 2048 +export(int) var height = 2048 export(int) var spacing = 20 export(int, 1, 9) var octaves = 5 export(int, 1, 30) var wavelength = 8 @@ -34,31 +34,7 @@ func _ready(): else: terrain.create(width,height,spacing,terrain_name) - if terrain.is_created() or terrain.is_loaded(): - - var center = terrain.get_center(43) - for edge in center.borders(): - Global.print_debug("Corner start :") - Global.print_debug(edge.start_corner().point2d()) - Global.print_debug("Corner end :") - Global.print_debug(edge.end_corner().point2d()) - Global.print_debug("Center start :") - Global.print_debug(edge.start_center().point2d()) - Global.print_debug("Center end :") - Global.print_debug(edge.end_center().point2d()) - - """ - Global.print_debug("Corners of center :") - for corner in center.corners(): - Global.print_debug(corner.point2d()) - - Global.print_debug("Find neighbors") - for neighbor in center.neighbors(): - Global.print_debug("Corners of neighbor :") - for corner in neighbor.corners(): - Global.print_debug(corner.point2d()) - """ - + if terrain.is_created() or terrain.is_loaded(): init_data() add_trees() emit_signal("world_loaded", terrain) diff --git a/world/game.tscn b/world/game.tscn index af1b6c5..51f1d10 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -40,6 +40,7 @@ environment = ExtResource( 3 ) [node name="Camera" parent="World3d/CamBase" index="0"] transform = Transform( 1, 0, 0, 0, 0.659983, -0.75128, 0, 0.75128, 0.659983, 0, -1.90735e-06, 6.618 ) fov = 55.0 +depth_multiplier = 99.0 zoom_sensibility = 1.436 [node name="DirectionalLight" type="DirectionalLight" parent="World3d"] -- 2.36.2