enemy movement should be deterministic now
This commit is contained in:
@@ -8,7 +8,6 @@ var speed: float = 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
#TODO: make deterministic random
|
||||
var variance: float = randf_range(-1.0, 1.0)
|
||||
var variance: float = NoiseRandom.randf_in_range(character.name.to_int(), -1.0, 1.0)
|
||||
var variance_max: float = 0.03 # Enemy speed can vary by 3% from their base speed
|
||||
speed = character.stats.movement_speed + (variance * variance_max)
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
class_name PathingController
|
||||
extends EnemyMovement
|
||||
|
||||
#var path: Curve3D
|
||||
#var path_progress: float = 0.0
|
||||
var random_points_generated: int
|
||||
var flow_field: FlowField
|
||||
var next_node: FlowNodeData :
|
||||
get():
|
||||
@@ -13,9 +12,12 @@ var next_node: FlowNodeData :
|
||||
return
|
||||
var found_point: bool = false
|
||||
while !found_point:
|
||||
#TODO: make deterministic random
|
||||
var x: float = randf_range(-1, 1)
|
||||
var y: float = randf_range(-1, 1)
|
||||
random_points_generated += 1
|
||||
var sample: int = random_points_generated + character.name.to_int()
|
||||
var r: float = 1.0 * sqrt(NoiseRandom.randf_in_range(sample, 0.0, 1.0))
|
||||
var theta: float = NoiseRandom.randf_in_range(sample * 4, 0.0, 1.0) * 2.0 * PI
|
||||
var x: float = r * cos(theta)
|
||||
var y: float = r * sin(theta)
|
||||
if Vector3(next_node.position.x + x, next_node.position.y, next_node.position.z + y).distance_to(next_node.position) <= 1.0:
|
||||
found_point = true
|
||||
next_pos = Vector3(next_node.position.x + x, next_node.position.y, next_node.position.z + y)
|
||||
|
||||
@@ -5,7 +5,7 @@ enum Faction {
|
||||
GENERIC = 0,
|
||||
ENGINEER = 1,
|
||||
MAGE = 2,
|
||||
}
|
||||
}
|
||||
|
||||
@export var cost: int
|
||||
@export var rarity: Data.Rarity
|
||||
|
||||
@@ -27,6 +27,17 @@ var mage_cards_bought: int = 0
|
||||
var mage_unlocked: bool = 0
|
||||
|
||||
|
||||
func get_unlocked_classes() -> Array[HeroClass]:
|
||||
var arr: Array[HeroClass] = []
|
||||
for character: HeroClass in Data.characters:
|
||||
if character.faction == Card.Faction.ENGINEER:
|
||||
arr.append(Data.characters)
|
||||
#TODO: When mage cards are good to show up in the shop, replace false with mage_unlocked
|
||||
if false and character.faction == Card.Faction.MAGE:
|
||||
arr.append(Data.characters)
|
||||
return arr
|
||||
|
||||
|
||||
func check_high_score(level_title: String, wave_reached: int, endless: bool) -> void:
|
||||
if !endless_high_scores.has(level_title):
|
||||
endless_high_scores[level_title] = 0
|
||||
|
||||
@@ -206,19 +206,14 @@ func set_wave_to_spawners(wave_thing: WaveConfig, wave_number: int) -> void:
|
||||
|
||||
|
||||
func set_upcoming_wave() -> void:
|
||||
if is_multiplayer_authority():
|
||||
#print(wave)
|
||||
#print(level_config.waves.size())
|
||||
if wave > level_config.waves.size():
|
||||
#print("added new wave on top")
|
||||
var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size())
|
||||
var new_wave: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size())
|
||||
level_config.waves.append(new_wave)
|
||||
if wave > level_config.waves.size():
|
||||
var spawn_power: int = WaveManager.calculate_spawn_power(wave, connected_players_nodes.size())
|
||||
var new_wave: WaveConfig = WaveManager.generate_wave(spawn_power, level.enemy_pool, level.enemy_spawns.size())
|
||||
level_config.waves.append(new_wave)
|
||||
|
||||
var new_wave: WaveConfig = get_upcoming_waves(1)[0]
|
||||
#print(new_wave)
|
||||
set_wave_to_spawners(new_wave, wave)
|
||||
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
|
||||
var new_wave: WaveConfig = get_upcoming_waves(1)[0]
|
||||
set_wave_to_spawners(new_wave, wave)
|
||||
temp_set_upcoming_wave(new_wave, WaveManager.calculate_pot(wave, connected_players_nodes.size()))
|
||||
|
||||
|
||||
func temp_set_upcoming_wave(new_wave: WaveConfig, coins: int) -> void:
|
||||
@@ -407,15 +402,14 @@ func continue_with_game() -> void:
|
||||
gamemode.endless = true
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
connected_players_nodes[multiplayer.get_unique_id()].unpause()
|
||||
#TODO: This shouldn't happen. instead, the wave generator should generate level_config waves
|
||||
#FIXME: this really needs to be changed because otherwise endless mode cant have shit like
|
||||
#stations and shop respawns. it all needs to be part of the one system u know
|
||||
set_upcoming_wave()
|
||||
|
||||
|
||||
func quit_to_desktop() -> void:
|
||||
multiplayer.multiplayer_peer.close()
|
||||
multiplayer.multiplayer_peer = null
|
||||
#for player: Hero in connected_players_nodes.values():
|
||||
# player.queue_free()
|
||||
#multiplayer.multiplayer_peer.close()
|
||||
#multiplayer.multiplayer_peer = null
|
||||
get_tree().quit()
|
||||
|
||||
|
||||
@@ -424,8 +418,10 @@ func scene_switch_main_menu() -> void:
|
||||
node.queue_free()
|
||||
level = null
|
||||
connected_players_nodes.clear()
|
||||
multiplayer.multiplayer_peer.close()
|
||||
multiplayer.multiplayer_peer = null
|
||||
if multiplayer.multiplayer_peer:
|
||||
multiplayer.multiplayer_peer.close()
|
||||
multiplayer.multiplayer_peer = null
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
switch_to_main_menu.emit()
|
||||
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ func networked_ready_player(peer_id: int) -> void:
|
||||
start_game = false
|
||||
if start_game:
|
||||
setup_game()
|
||||
visible = false
|
||||
|
||||
|
||||
func ready_player(peer_id: int = multiplayer.get_unique_id()) -> void:
|
||||
@@ -99,11 +100,14 @@ func ready_player(peer_id: int = multiplayer.get_unique_id()) -> void:
|
||||
start_game = false
|
||||
if start_game:
|
||||
setup_game()
|
||||
visible = false
|
||||
|
||||
|
||||
@rpc("any_peer", "reliable")
|
||||
func networked_select_class(peer_id: int) -> void:
|
||||
player_character_selected_states[connected_players_profiles[peer_id]] = true
|
||||
if chatbox:
|
||||
chatbox.append_message("SERVER", Color.TOMATO, connected_players_profiles[peer_id].display_name + " has chosen a class!")
|
||||
var start_game: bool = true
|
||||
for state: bool in player_character_selected_states.values():
|
||||
if !state:
|
||||
@@ -125,7 +129,6 @@ func select_class(peer_id: int = multiplayer.get_unique_id()) -> void:
|
||||
|
||||
func start_game() -> void:
|
||||
enet_peer.refuse_new_connections = true
|
||||
visible = false
|
||||
super.start_game()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user