Find point #30

Merged
alainstark merged 1 commits from voronoi-from-vector2 into main 3 years ago
  1. 31
      utils/terrain/Terrain.gd
  2. 28
      world/game.gd
  3. 1
      world/game.tscn

@ -309,9 +309,16 @@ 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()]
@ -580,6 +595,22 @@ 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

@ -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
@ -35,30 +35,6 @@ func _ready():
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())
"""
init_data()
add_trees()
emit_signal("world_loaded", terrain)

@ -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"]

Loading…
Cancel
Save