Refactoring
parent
4d391ff5b3
commit
c4770b395a
|
@ -23,7 +23,7 @@ func _ready():
|
||||||
movable_component.pos = self.transform.origin
|
movable_component.pos = self.transform.origin
|
||||||
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(_delta):
|
||||||
if is_active and color_component:
|
if is_active and color_component:
|
||||||
var color = Color(
|
var color = Color(
|
||||||
(sin(float(OS.get_system_time_msecs()) / 1000.0) + 1.0) / 2.0,
|
(sin(float(OS.get_system_time_msecs()) / 1000.0) + 1.0) / 2.0,
|
||||||
|
@ -34,7 +34,7 @@ func _process(delta):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(_delta):
|
||||||
if not collision_component:
|
if not collision_component:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -9,17 +9,17 @@
|
||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ {
|
_global_script_classes=[ {
|
||||||
"base": "Reference",
|
"base": "Node",
|
||||||
"class": "ClickableComponent",
|
"class": "ClickableComponent",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://components/ClickableComponent.gd"
|
"path": "res://components/ClickableComponent.gd"
|
||||||
}, {
|
}, {
|
||||||
"base": "Reference",
|
"base": "KinematicBody2D",
|
||||||
"class": "CollisionLine",
|
"class": "CollisionLine",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://utils/CollisionLine.gd"
|
"path": "res://utils/CollisionLine.gd"
|
||||||
}, {
|
}, {
|
||||||
"base": "Reference",
|
"base": "Node",
|
||||||
"class": "ColorComponent",
|
"class": "ColorComponent",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://components/ColorComponent.gd"
|
"path": "res://components/ColorComponent.gd"
|
||||||
|
@ -54,7 +54,7 @@ _global_script_classes=[ {
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://utils/SpringDamper.gd"
|
"path": "res://utils/SpringDamper.gd"
|
||||||
}, {
|
}, {
|
||||||
"base": "Reference",
|
"base": "Sprite",
|
||||||
"class": "TintedSpriteComponent",
|
"class": "TintedSpriteComponent",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://components/TintedSpriteComponent.gd"
|
"path": "res://components/TintedSpriteComponent.gd"
|
||||||
|
|
|
@ -23,7 +23,7 @@ func _ready():
|
||||||
node.connect("island_tile_hover", self, "on_island_tile_hover")
|
node.connect("island_tile_hover", self, "on_island_tile_hover")
|
||||||
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(_delta):
|
||||||
fps_label.text = "FPS: " + str(Performance.get_monitor(Performance.TIME_FPS))
|
fps_label.text = "FPS: " + str(Performance.get_monitor(Performance.TIME_FPS))
|
||||||
player_pos_label.text = "Pos: " + str(player.transform.origin)
|
player_pos_label.text = "Pos: " + str(player.transform.origin)
|
||||||
|
|
||||||
|
@ -37,5 +37,5 @@ func on_island_tile_selected(island, tile):
|
||||||
print ("clicked on tile " + str(target_coordinate) + " error: " + str(position_error))
|
print ("clicked on tile " + str(target_coordinate) + " error: " + str(position_error))
|
||||||
|
|
||||||
|
|
||||||
func on_island_tile_hover(island, tile):
|
func on_island_tile_hover(_island, tile):
|
||||||
tile_pos_label.text = "TilePos: " + str(tile.global_transform.origin)
|
tile_pos_label.text = "TilePos: " + str(tile.global_transform.origin)
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
[ext_resource path="res://entities/PlayerEntity.gd" type="Script" id=1]
|
[ext_resource path="res://entities/PlayerEntity.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://scenes/HexGrid3DTest.gd" type="Script" id=2]
|
[ext_resource path="res://scenes/HexGrid3DTest.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://scenes/DebugCamera.gd" type="Script" id=3]
|
[ext_resource path="res://scenes/DebugCamera.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://scenes/Island.tscn" type="PackedScene" id=4]
|
|
||||||
[ext_resource path="res://assets/water_diffuse.png" type="Texture" id=5]
|
[ext_resource path="res://assets/water_diffuse.png" type="Texture" id=5]
|
||||||
[ext_resource path="res://components/MovableComponent.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://components/MovableComponent.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://scenes/World.gd" type="Script" id=7]
|
[ext_resource path="res://scenes/World.gd" type="Script" id=7]
|
||||||
|
@ -17,6 +16,8 @@ radial_segments = 16
|
||||||
radius = 0.25
|
radius = 0.25
|
||||||
height = 0.5
|
height = 0.5
|
||||||
|
|
||||||
|
[sub_resource type="HeightMapShape" id=6]
|
||||||
|
|
||||||
[sub_resource type="PlaneMesh" id=1]
|
[sub_resource type="PlaneMesh" id=1]
|
||||||
subdivide_width = 24
|
subdivide_width = 24
|
||||||
subdivide_depth = 24
|
subdivide_depth = 24
|
||||||
|
@ -101,8 +102,8 @@ shader = SubResource( 2 )
|
||||||
shader_param/amplitude = Vector2( 0.005, 0.005 )
|
shader_param/amplitude = Vector2( 0.005, 0.005 )
|
||||||
shader_param/frequency = Vector2( 50, 48 )
|
shader_param/frequency = Vector2( 50, 48 )
|
||||||
shader_param/time_factor = Vector2( 7, 8 )
|
shader_param/time_factor = Vector2( 7, 8 )
|
||||||
shader_param/beer_factor = 4.0
|
shader_param/beer_factor = 2.0
|
||||||
shader_param/refraction = 0.01
|
shader_param/refraction = 0.001
|
||||||
shader_param/uv_offset_scale = Vector2( 0.2, 0.2 )
|
shader_param/uv_offset_scale = Vector2( 0.2, 0.2 )
|
||||||
shader_param/uv_offset_time_scale = 0.1
|
shader_param/uv_offset_time_scale = 0.1
|
||||||
shader_param/uv_offset_amplitude = 1.2
|
shader_param/uv_offset_amplitude = 1.2
|
||||||
|
@ -180,18 +181,21 @@ max_speed = 3
|
||||||
|
|
||||||
[node name="World" type="Spatial" parent="."]
|
[node name="World" type="Spatial" parent="."]
|
||||||
script = ExtResource( 7 )
|
script = ExtResource( 7 )
|
||||||
|
generate_flag = true
|
||||||
|
|
||||||
[node name="Scene" type="Spatial" parent="World"]
|
[node name="Scene" type="Spatial" parent="World"]
|
||||||
|
|
||||||
[node name="Navigation" type="Spatial" parent="World"]
|
[node name="Navigation" type="Spatial" parent="World"]
|
||||||
|
|
||||||
[node name="Island" parent="World" instance=ExtResource( 4 )]
|
[node name="Tiles" type="Spatial" parent="World"]
|
||||||
|
|
||||||
[node name="Island2" parent="World" instance=ExtResource( 4 )]
|
[node name="ClckArea" type="Area" parent="World"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -12.2668, 0, 0 )
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="World/ClckArea"]
|
||||||
|
transform = Transform( 50, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 0 )
|
||||||
|
shape = SubResource( 6 )
|
||||||
|
|
||||||
[node name="Water" type="Spatial" parent="."]
|
[node name="Water" type="Spatial" parent="."]
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="Water" type="MeshInstance" parent="Water"]
|
[node name="Water" type="MeshInstance" parent="Water"]
|
||||||
transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, 0, -0.1, 0 )
|
transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, 0, -0.1, 0 )
|
||||||
|
@ -210,3 +214,7 @@ transform = Transform( -10, 0, 0, 0, 10, 0, 0, 0, 10, 20, -0.1, -0.01 )
|
||||||
mesh = SubResource( 1 )
|
mesh = SubResource( 1 )
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
material/0 = SubResource( 3 )
|
material/0 = SubResource( 3 )
|
||||||
|
|
||||||
|
[connection signal="input_event" from="World/ClckArea" to="World" method="_on_ClckArea_input_event"]
|
||||||
|
[connection signal="mouse_entered" from="World/ClckArea" to="World" method="_on_ClckArea_mouse_entered"]
|
||||||
|
[connection signal="mouse_exited" from="World/ClckArea" to="World" method="_on_ClckArea_mouse_exited"]
|
||||||
|
|
|
@ -3,7 +3,8 @@ class_name HexTile3D
|
||||||
|
|
||||||
onready var is_mouse_over = false
|
onready var is_mouse_over = false
|
||||||
onready var mesh = $Mesh
|
onready var mesh = $Mesh
|
||||||
var old_material_override = Material.new()
|
onready var old_material_override = preload("res://materials/SandTile.tres")
|
||||||
|
onready var game_tile = preload("res://utils/GameTile.gd").new()
|
||||||
|
|
||||||
signal tile_selected
|
signal tile_selected
|
||||||
signal tile_mouse_entered
|
signal tile_mouse_entered
|
||||||
|
@ -13,14 +14,16 @@ signal tile_mouse_entered
|
||||||
func set_tiletype(type):
|
func set_tiletype(type):
|
||||||
var GameTile = load("res://utils/GameTile.gd").new()
|
var GameTile = load("res://utils/GameTile.gd").new()
|
||||||
|
|
||||||
var mesh = $Mesh
|
game_tile.type = type
|
||||||
|
|
||||||
if type == GameTile.TileType.Sand:
|
var _mesh = $Mesh
|
||||||
mesh.set_surface_material(0, preload("res://materials/SandTile.tres"))
|
|
||||||
|
if type == GameTile.TileType.Sand or type== GameTile.TileType.Water:
|
||||||
|
_mesh.set_surface_material(0, preload("res://materials/SandTile.tres"))
|
||||||
elif type == GameTile.TileType.Grass:
|
elif type == GameTile.TileType.Grass:
|
||||||
mesh.set_surface_material(0, preload("res://materials/GrassTile.tres"))
|
_mesh.set_surface_material(0, preload("res://materials/GrassTile.tres"))
|
||||||
else:
|
else:
|
||||||
mesh.set_surface_material(0, preload("res://materials/DeepGrassTile.tres"))
|
_mesh.set_surface_material(0, preload("res://materials/DeepGrassTile.tres"))
|
||||||
|
|
||||||
|
|
||||||
func _on_Area_mouse_entered():
|
func _on_Area_mouse_entered():
|
||||||
|
@ -39,7 +42,7 @@ func _on_Area_mouse_exited():
|
||||||
mesh.material_override = old_material_override
|
mesh.material_override = old_material_override
|
||||||
|
|
||||||
|
|
||||||
func _on_Area_input_event(camera, event, position, normal, shape_idx):
|
func _on_Area_input_event(_camera, event, position, _normal, _shape_idx):
|
||||||
if is_mouse_over and event is InputEventMouseButton:
|
if is_mouse_over and event is InputEventMouseButton:
|
||||||
if event.button_index == 1 and event.pressed:
|
if event.button_index == 1 and event.pressed:
|
||||||
emit_signal("tile_selected", self)
|
emit_signal("tile_selected", self)
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
[sub_resource type="CylinderMesh" id=6]
|
[sub_resource type="CylinderMesh" id=6]
|
||||||
top_radius = 0.5
|
top_radius = 0.5
|
||||||
bottom_radius = 0.5
|
bottom_radius = 0.5
|
||||||
height = 1.0
|
height = 10.0
|
||||||
radial_segments = 6
|
radial_segments = 6
|
||||||
rings = 1
|
rings = 1
|
||||||
|
|
||||||
|
@ -19,13 +19,14 @@ transform = Transform( -1.62921e-07, 0, 1, 0, 1, 0, -1, 0, -1.62921e-07, 0, 0, 0
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="Mesh" type="MeshInstance" parent="."]
|
[node name="Mesh" type="MeshInstance" parent="."]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -5, 0 )
|
||||||
mesh = SubResource( 6 )
|
mesh = SubResource( 6 )
|
||||||
material/0 = ExtResource( 2 )
|
material/0 = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="Area" type="Area" parent="Mesh"]
|
[node name="Area" type="Area" parent="Mesh"]
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="Mesh/Area"]
|
[node name="CollisionShape" type="CollisionShape" parent="Mesh/Area"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
shape = SubResource( 5 )
|
shape = SubResource( 5 )
|
||||||
|
|
||||||
[connection signal="input_event" from="Mesh/Area" to="." method="_on_Area_input_event"]
|
[connection signal="input_event" from="Mesh/Area" to="." method="_on_Area_input_event"]
|
||||||
|
|
|
@ -51,7 +51,7 @@ func generate():
|
||||||
print ("Generated island with " + str(tiles.get_child_count()) + " nodes")
|
print ("Generated island with " + str(tiles.get_child_count()) + " nodes")
|
||||||
|
|
||||||
|
|
||||||
func do_generate(flag: bool):
|
func do_generate(_flag: bool):
|
||||||
print ("Generating Level")
|
print ("Generating Level")
|
||||||
generate()
|
generate()
|
||||||
|
|
||||||
|
|
164
scenes/World.gd
164
scenes/World.gd
|
@ -2,17 +2,173 @@ extends Spatial
|
||||||
|
|
||||||
var GameTile = load("res://utils/GameTile.gd")
|
var GameTile = load("res://utils/GameTile.gd")
|
||||||
var HexCell = preload("res://addons/gdhexgrid/HexCell.gd")
|
var HexCell = preload("res://addons/gdhexgrid/HexCell.gd")
|
||||||
|
onready var HexGrid = preload("res://addons/gdhexgrid/HexGrid.gd").new()
|
||||||
|
var IslandGenerator = preload("res://utils/IslandGenerator.gd").new()
|
||||||
|
|
||||||
|
onready var tiles = $Tiles
|
||||||
var has_tiles_initialized = false
|
var has_tiles_initialized = false
|
||||||
export var size = [200, 200]
|
var tile_map = {}
|
||||||
|
var active_tile = null
|
||||||
|
var island_count = 5
|
||||||
|
|
||||||
|
export var size = [50, 50]
|
||||||
|
export var generate_flag: bool = false setget do_generate
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
assert(get_node("Tiles") != null)
|
||||||
|
generate()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func create_ocean_tiles():
|
func _process(_delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func add_tile_for_hex(game_tile):
|
||||||
|
var hexgrid = preload("res://addons/gdhexgrid/HexGrid.gd").new()
|
||||||
|
var HexTile3D = preload("res://scenes/HexTile3D.tscn")
|
||||||
|
|
||||||
var islands
|
var tile = HexTile3D.instance()
|
||||||
pass
|
var pos = hexgrid.get_hex_center_from_offset(game_tile.offset_coords)
|
||||||
|
var height = -2.0 # if game_tile.type == GameTile.TileType.Sand else 0.1 + rand_range(0.0, 0.05)
|
||||||
|
|
||||||
|
tiles.add_child(tile)
|
||||||
|
tile_map[game_tile.offset_coords] = tile
|
||||||
|
|
||||||
|
tile.set_tiletype(game_tile.type)
|
||||||
|
tile.transform.origin = Vector3(pos.x, height, pos.y)
|
||||||
|
tile.game_tile = game_tile
|
||||||
|
|
||||||
|
return tile
|
||||||
|
|
||||||
|
|
||||||
|
func reset():
|
||||||
|
var tiles = get_node("Tiles")
|
||||||
|
print ("clearing old tiles: " + str(tiles.get_child_count()))
|
||||||
|
for tile in tiles.get_children():
|
||||||
|
tiles.remove_child(tile)
|
||||||
|
tile.queue_free()
|
||||||
|
tile_map = {}
|
||||||
|
|
||||||
|
|
||||||
|
func generate():
|
||||||
|
reset()
|
||||||
|
generate_base_tiles()
|
||||||
|
|
||||||
|
for i in range (island_count):
|
||||||
|
generate_island(Vector2(
|
||||||
|
rand_range(-size[0] / 2, size[0] / 2),
|
||||||
|
rand_range(-size[1] / 2, size[1] / 2)
|
||||||
|
))
|
||||||
|
|
||||||
|
mark_sand_tiles()
|
||||||
|
smooth_water_tiles()
|
||||||
|
smooth_water_tiles()
|
||||||
|
smooth_water_tiles()
|
||||||
|
smooth_water_tiles()
|
||||||
|
|
||||||
|
|
||||||
|
func generate_base_tiles():
|
||||||
|
print ("generating world")
|
||||||
|
|
||||||
|
for i in range (-size[0] / 2, size[0] / 2):
|
||||||
|
for j in range (-size[1] / 2, size[1] / 2):
|
||||||
|
var tile = GameTile.new()
|
||||||
|
tile.type = GameTile.TileType.Water
|
||||||
|
tile.offset_coords = Vector2(i,j)
|
||||||
|
|
||||||
|
add_tile_for_hex(tile)
|
||||||
|
|
||||||
|
|
||||||
|
func generate_island(start_pos: Vector2):
|
||||||
|
var generated_tiles = IslandGenerator.random_walk(20, start_pos)
|
||||||
|
generated_tiles = IslandGenerator.extrude_tiles(generated_tiles)
|
||||||
|
# generated_tiles = IslandGenerator.mark_sand_tiles(generated_tiles)
|
||||||
|
|
||||||
|
for island_tile in generated_tiles.values():
|
||||||
|
if not island_tile.offset_coords in tile_map.keys():
|
||||||
|
continue
|
||||||
|
var world_tile = tile_map[island_tile.offset_coords]
|
||||||
|
world_tile.transform.origin[1] = 0
|
||||||
|
world_tile.set_tiletype(island_tile.type)
|
||||||
|
|
||||||
|
print ("Generated island with " + str(tiles.get_child_count()) + " nodes")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func mark_sand_tiles():
|
||||||
|
for tile in tile_map.values():
|
||||||
|
if tile.game_tile.type == GameTile.TileType.Water:
|
||||||
|
continue
|
||||||
|
|
||||||
|
tile.set_tiletype(GameTile.TileType.Grass if randi() % 2 else GameTile.TileType.DeepGrass)
|
||||||
|
var tile_neighbours = tile.game_tile.get_all_adjacent()
|
||||||
|
|
||||||
|
for neighbour in tile_neighbours:
|
||||||
|
var tile_on_map = neighbour.offset_coords in tile_map.keys()
|
||||||
|
if not tile_on_map:
|
||||||
|
continue
|
||||||
|
|
||||||
|
var neighbour_tile = tile_map[neighbour.offset_coords]
|
||||||
|
if neighbour_tile.game_tile.type == GameTile.TileType.Water:
|
||||||
|
tile.set_tiletype(GameTile.TileType.Sand)
|
||||||
|
|
||||||
|
|
||||||
|
func smooth_water_tiles():
|
||||||
|
# horizontal smoothing
|
||||||
|
for i in range ((-size[0] / 2) + 1, (size[0] / 2) - 1):
|
||||||
|
for j in range ((-size[1] / 2) + 1, (size[1] / 2) - 1):
|
||||||
|
var prev = tile_map[Vector2(i - 1,j)]
|
||||||
|
var current = tile_map[Vector2(i,j)]
|
||||||
|
var next = tile_map[Vector2(i + 1,j)]
|
||||||
|
|
||||||
|
if current.game_tile.type != GameTile.TileType.Water:
|
||||||
|
continue
|
||||||
|
|
||||||
|
current.transform.origin[1] = (prev.transform.origin[1] + next.transform.origin[1]) * 0.5
|
||||||
|
|
||||||
|
# vertical smoothings
|
||||||
|
for i in range ((-size[0] / 2) + 1, (size[0] / 2) - 1):
|
||||||
|
for j in range ((-size[1] / 2) + 1, (size[1] / 2) - 1):
|
||||||
|
var prev = tile_map[Vector2(i,j - 1)]
|
||||||
|
var current = tile_map[Vector2(i,j)]
|
||||||
|
var next = tile_map[Vector2(i,j + 1)]
|
||||||
|
|
||||||
|
if current.game_tile.type != GameTile.TileType.Water:
|
||||||
|
continue
|
||||||
|
|
||||||
|
current.transform.origin[1] = (prev.transform.origin[1] + next.transform.origin[1]) * 0.5
|
||||||
|
|
||||||
|
|
||||||
|
func do_generate(flag: bool):
|
||||||
|
print ("Generating Level")
|
||||||
|
generate_flag = false
|
||||||
|
# generate()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_ClckArea_input_event(_camera, _event, position, _normal, _shape_idx):
|
||||||
|
var offset_coords = HexGrid.get_hex_at(position).offset_coords
|
||||||
|
|
||||||
|
var world_tile = null
|
||||||
|
if offset_coords in tile_map.keys():
|
||||||
|
world_tile = tile_map[offset_coords]
|
||||||
|
|
||||||
|
if active_tile != null and world_tile != active_tile:
|
||||||
|
active_tile._on_Area_mouse_exited()
|
||||||
|
|
||||||
|
if active_tile == world_tile:
|
||||||
|
return
|
||||||
|
|
||||||
|
if world_tile == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
active_tile = world_tile
|
||||||
|
active_tile._on_Area_mouse_entered()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_ClckArea_mouse_entered():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
func _on_ClckArea_mouse_exited():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends "res://addons/gdhexgrid/HexCell.gd"
|
extends "res://addons/gdhexgrid/HexCell.gd"
|
||||||
class_name GameTile
|
class_name GameTile
|
||||||
|
|
||||||
enum TileType { Sand, Grass, DeepGrass, Rock, Water }
|
enum TileType { Water, Sand, Grass, DeepGrass, Rock }
|
||||||
|
|
||||||
var type = TileType.Sand
|
var type = TileType.Sand
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,11 @@ extends Node
|
||||||
|
|
||||||
var GameTile = load("res://utils/GameTile.gd")
|
var GameTile = load("res://utils/GameTile.gd")
|
||||||
var HexCell = preload("res://addons/gdhexgrid/HexCell.gd")
|
var HexCell = preload("res://addons/gdhexgrid/HexCell.gd")
|
||||||
|
var rng = RandomNumberGenerator.new()
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
rng.randomize()
|
||||||
|
|
||||||
|
|
||||||
func hex_cell_to_island_tile (hex: HexCell) -> GameTile:
|
func hex_cell_to_island_tile (hex: HexCell) -> GameTile:
|
||||||
|
@ -11,12 +16,11 @@ func hex_cell_to_island_tile (hex: HexCell) -> GameTile:
|
||||||
return tile
|
return tile
|
||||||
|
|
||||||
|
|
||||||
func random_walk(walk_size):
|
func random_walk(walk_size, start_offset = Vector2(0,0)):
|
||||||
var hexgrid = preload("res://addons/gdhexgrid/HexGrid.gd").new()
|
var hexgrid = preload("res://addons/gdhexgrid/HexGrid.gd").new()
|
||||||
var tiles = {}
|
var tiles = {}
|
||||||
|
|
||||||
var current_offset_coordinate = Vector2(0, 0)
|
var current_tile = hex_cell_to_island_tile(hexgrid.get_hex_from_offset(start_offset))
|
||||||
var current_tile = hex_cell_to_island_tile(hexgrid.get_hex_from_offset(Vector2(0,0)))
|
|
||||||
tiles[current_tile.offset_coords] = current_tile
|
tiles[current_tile.offset_coords] = current_tile
|
||||||
|
|
||||||
for i in range(walk_size - 1):
|
for i in range(walk_size - 1):
|
||||||
|
@ -24,7 +28,7 @@ func random_walk(walk_size):
|
||||||
|
|
||||||
var tile_exists = true
|
var tile_exists = true
|
||||||
while tile_exists and len(neighbours) > 0:
|
while tile_exists and len(neighbours) > 0:
|
||||||
var test_index = randi() % len(neighbours)
|
var test_index = rng.randi() % len(neighbours)
|
||||||
var test_tile = hex_cell_to_island_tile(neighbours[test_index])
|
var test_tile = hex_cell_to_island_tile(neighbours[test_index])
|
||||||
if test_tile.offset_coords in tiles.keys():
|
if test_tile.offset_coords in tiles.keys():
|
||||||
neighbours.remove(test_index)
|
neighbours.remove(test_index)
|
||||||
|
@ -61,7 +65,7 @@ func extrude_tiles(tiles):
|
||||||
|
|
||||||
func mark_sand_tiles(tiles):
|
func mark_sand_tiles(tiles):
|
||||||
for tile in tiles.values():
|
for tile in tiles.values():
|
||||||
tile.type = GameTile.TileType.Grass if randi() % 2 else GameTile.TileType.DeepGrass
|
tile.type = GameTile.TileType.Grass if rng.randi() % 2 else GameTile.TileType.DeepGrass
|
||||||
var tile_neighbours = tile.get_all_adjacent()
|
var tile_neighbours = tile.get_all_adjacent()
|
||||||
|
|
||||||
for neighbour in tile_neighbours:
|
for neighbour in tile_neighbours:
|
||||||
|
|
Loading…
Reference in New Issue