allowed path backtracking (Map)
This commit is contained in:
parent
104e607cc7
commit
b74b472573
2 changed files with 21 additions and 22 deletions
|
|
@ -11,39 +11,33 @@ enum RoomType {
|
|||
EVENT
|
||||
}
|
||||
|
||||
# Configuration
|
||||
var min_levels = 6
|
||||
var max_levels = 12
|
||||
var max_levels = 15
|
||||
var min_nodes_per_level = 2
|
||||
var max_nodes_per_level = 4
|
||||
var positions_per_level = 7 # How many horizontal positions are available (0-6)
|
||||
var max_nodes_per_level = 6
|
||||
var positions_per_level = 6
|
||||
var starting_elo = 1000
|
||||
var final_elo = 2100
|
||||
|
||||
# Internal variables
|
||||
var _rng = RandomNumberGenerator.new()
|
||||
var _next_id = 0
|
||||
|
||||
func _init(seed_value = null):
|
||||
# Set seed for reproducible maps if needed
|
||||
# Set seed for reproducible maps
|
||||
if seed_value != null:
|
||||
_rng.seed = seed_value
|
||||
else:
|
||||
_rng.randomize()
|
||||
|
||||
# Main function to generate the map
|
||||
func generate_map():
|
||||
var nodes = []
|
||||
var connections = []
|
||||
_next_id = 0
|
||||
|
||||
# Determine the number of levels
|
||||
var num_levels = _rng.randi_range(min_levels, max_levels)
|
||||
|
||||
# Calculate ELO for each level
|
||||
var elo_step = float(final_elo - starting_elo) / (num_levels - 1)
|
||||
|
||||
# Create starting node (always at position 3, level 0)
|
||||
var start_node = {
|
||||
"id": _get_next_id(),
|
||||
"type": RoomType.STARTING,
|
||||
|
|
@ -63,25 +57,18 @@ func generate_map():
|
|||
}
|
||||
nodes.append(final_node)
|
||||
|
||||
# Generate intermediate levels
|
||||
var levels_nodes = {0: [start_node], (num_levels - 1): [final_node]}
|
||||
|
||||
for level in range(1, num_levels - 1):
|
||||
var level_nodes = []
|
||||
|
||||
# Calculate ELO for this level
|
||||
var level_elo = starting_elo + (elo_step * level)
|
||||
|
||||
# Determine number of nodes for this level
|
||||
var num_nodes = _rng.randi_range(min_nodes_per_level, max_nodes_per_level)
|
||||
|
||||
# Generate available positions and shuffle them
|
||||
var available_positions = []
|
||||
for pos in range(positions_per_level):
|
||||
available_positions.append(pos)
|
||||
available_positions.shuffle()
|
||||
|
||||
# Create nodes for this level
|
||||
|
||||
for i in range(num_nodes):
|
||||
var node_type = _get_random_room_type(level, num_levels)
|
||||
var node = {
|
||||
|
|
@ -186,7 +173,6 @@ func _get_random_room_type(level, total_levels):
|
|||
boss_chance += 0.3
|
||||
|
||||
var roll = _rng.randf()
|
||||
print("_get_random_room_type ", roll, " ", boss_chance, " ", shop_chance, " ", event_chance)
|
||||
if roll < boss_chance:
|
||||
return RoomType.BOSS
|
||||
elif roll < boss_chance + shop_chance:
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ func highlight_current_node(button):
|
|||
button.add_theme_stylebox_override("normal", style)
|
||||
|
||||
func _on_node_pressed(node_data):
|
||||
if is_node_accessible(node_data):
|
||||
if is_node_accessible(node_data) || is_node_path_accessible(node_data):
|
||||
# Update current node
|
||||
current_node = node_data
|
||||
traversed_node(node_data)
|
||||
|
|
@ -316,6 +316,19 @@ func _on_node_pressed(node_data):
|
|||
func traversed_node(node_data):
|
||||
traversed_map.append(node_data.id)
|
||||
|
||||
func is_node_path_accessible(node_data):
|
||||
if current_node == null:
|
||||
return node_data.type == RoomType.STARTING
|
||||
|
||||
# Check if there's a direct connection from current node to the path travelled
|
||||
for id in traversed_map:
|
||||
var cur = get_node_by_id(id)
|
||||
for connection in map_connections:
|
||||
if connection.from == cur.id and connection.to == node_data.id:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func is_node_accessible(node_data):
|
||||
if current_node == null:
|
||||
return node_data.type == RoomType.STARTING
|
||||
|
|
|
|||
Loading…
Reference in a new issue