107 lines
3.1 KiB
GDScript
107 lines
3.1 KiB
GDScript
@abstract
|
|
extends Resource
|
|
class_name StoryStep
|
|
|
|
#region ------------------ Story ------------------
|
|
|
|
@abstract func get_respawn_scene() -> Scene
|
|
|
|
@abstract func get_destination_text() -> String
|
|
|
|
func get_destination_scene() -> Scene:
|
|
return BoreaScene.new()
|
|
|
|
func get_run_progress(level : int) -> int:
|
|
if is_region_sequence_infinite():
|
|
return 0
|
|
return get_region_sequence_length() - level
|
|
|
|
func get_ship_dialog_path(_level : int, _ship_in_space := true) -> String:
|
|
return ""
|
|
#region ------------------ Run ------------------
|
|
|
|
func is_run_finished(level : int) -> bool:
|
|
if is_region_sequence_infinite():
|
|
return false
|
|
return level == get_region_sequence_length() - 1
|
|
|
|
func is_region_sequence_infinite() -> bool:
|
|
return false
|
|
|
|
func get_region_sequence_length() -> int:
|
|
return 7
|
|
|
|
func get_first_vending_machine_occurence(_level : int) -> int:
|
|
return 2
|
|
|
|
func get_vending_machine_occurence(_level : int) -> int:
|
|
return 3
|
|
|
|
func get_first_cave_occurence(level : int) -> int:
|
|
return get_cave_occurence(level)
|
|
|
|
func get_cave_occurence(_level : int) -> int:
|
|
return 3
|
|
|
|
func get_challenge_chance(_level : int) -> float:
|
|
return 0.15
|
|
|
|
func get_run_point_number(level : int) -> int:
|
|
if is_run_finished(level):
|
|
return 1
|
|
return 2
|
|
|
|
func get_charge_number(_level : int) -> int:
|
|
return 10
|
|
|
|
func is_run_point_dangerous(level : int) -> bool:
|
|
if is_region_sequence_infinite():
|
|
return false
|
|
return level == get_region_sequence_length() - 2
|
|
|
|
func get_objective_for_region(level : int) -> int:
|
|
match level:
|
|
1: return 10
|
|
2: return 15
|
|
3: return 20
|
|
4: return 30
|
|
5: return 45
|
|
_: return get_objective_for_region(level-1) + (level-2) * 5
|
|
|
|
func get_story_modifiers_for_region(level : int) -> Array[RegionModifier]:
|
|
var modifiers : Array[RegionModifier] = []
|
|
if is_run_finished(level):
|
|
var dest_mod = DestinationModifier.new()
|
|
dest_mod.destination_scene = get_destination_scene()
|
|
modifiers.append(dest_mod)
|
|
|
|
return modifiers
|
|
|
|
func get_gameplay_modifiers_for_region(level : int) -> Array[RegionModifier]:
|
|
var modifiers : Array[RegionModifier] = []
|
|
|
|
if need_gameplay_modifier(level):
|
|
var first_vending = get_first_vending_machine_occurence(level)
|
|
var vending_occurence = get_vending_machine_occurence(level)
|
|
if vending_occurence > 0 and level >= first_vending:
|
|
if (level - first_vending)%vending_occurence == 0:
|
|
modifiers.append(VendingMachineModifier.new())
|
|
|
|
var first_cave = get_first_cave_occurence(level)
|
|
var cave_occurence = get_cave_occurence(level)
|
|
if cave_occurence > 0 and level >= first_cave:
|
|
if (level - first_cave)%cave_occurence == 0:
|
|
modifiers.append(CaveModifier.new())
|
|
|
|
return modifiers
|
|
|
|
func need_gameplay_modifier(level : int):
|
|
if is_run_finished(level):
|
|
return false
|
|
return true
|
|
|
|
func _on_finish():
|
|
GameInfo.game_data.incubator_used = []
|
|
GameInfo.game_data.dead_orchid_position = Vector3.ZERO
|
|
GameInfo.game_data.dead_orchid_rotation = Vector3.ZERO
|