init
This commit is contained in:
135
scripts/data_handler.gd
Normal file
135
scripts/data_handler.gd
Normal file
@@ -0,0 +1,135 @@
|
||||
extends Node
|
||||
|
||||
signal pickup_item
|
||||
|
||||
const ENTITIES = preload("res://assets/entities.png")
|
||||
const SAVE_FILE = "user://misguided_data.tres"
|
||||
const SPACE_POD = preload("res://scenes/space_pod.tscn")
|
||||
|
||||
const type_to_int ={
|
||||
"star": 96,
|
||||
"fuel": 64
|
||||
}
|
||||
|
||||
var game_data: GameData
|
||||
|
||||
var current_rocket: Rocket
|
||||
|
||||
func get_current_rocket_display() -> Array[TextureRect]:
|
||||
var rocket: Array[TextureRect] = []
|
||||
return rocket
|
||||
|
||||
func ready_to_launch() -> bool:
|
||||
return not game_data.modules[GameData.ModuleType.ENGINE].is_empty() and not game_data.modules[GameData.ModuleType.COCKPIT]
|
||||
|
||||
func launch_rocket() -> void:
|
||||
game_data.cargo = {}
|
||||
game_data.fuel = game_data.fuel_max
|
||||
|
||||
func pickup(type: String) -> void:
|
||||
game_data.pickup(type)
|
||||
pickup_item.emit()
|
||||
|
||||
func has_cargo() -> bool:
|
||||
return game_data.has_cargo()
|
||||
|
||||
func type_to_texture(type: String) -> Texture:
|
||||
var texture := AtlasTexture.new()
|
||||
texture.atlas = ENTITIES
|
||||
texture.region = Rect2(type_to_int[type], 0, 32, 32)
|
||||
return texture
|
||||
|
||||
func move_cargo_to_inventory() -> void:
|
||||
game_data.move_cargo_to_inventory()
|
||||
|
||||
func create_cargo_pod(pod_position: Vector2) -> void:
|
||||
game_data.create_cargo_pod(pod_position)
|
||||
|
||||
func save_game_data() -> void:
|
||||
ResourceSaver.save(game_data, SAVE_FILE)
|
||||
|
||||
func load_game_data() -> void:
|
||||
if ResourceLoader.exists(SAVE_FILE):
|
||||
game_data = load(SAVE_FILE)
|
||||
else:
|
||||
game_data = GameData.new()
|
||||
|
||||
func spawn_pods() -> Array[SpacePod]:
|
||||
var pod_nodes: Array[SpacePod] = []
|
||||
for pod: FloatingPodData in game_data.floating_pods:
|
||||
var pod_spawn = SPACE_POD.instantiate()
|
||||
pod_spawn.pod_data = pod
|
||||
pod_spawn.position = pod.position
|
||||
pod_nodes.append(pod_spawn)
|
||||
return pod_nodes
|
||||
|
||||
func retrive_pod(pod_data: FloatingPodData) -> void:
|
||||
for item in pod_data.cargo:
|
||||
game_data.pickup(item, pod_data.cargo[item])
|
||||
var index = game_data.floating_pods.find(pod_data)
|
||||
if index >= 0:
|
||||
game_data.floating_pods.remove_at(index)
|
||||
pickup_item.emit()
|
||||
|
||||
func remove_module(location: GameData.ModuleType, part: String) -> void:
|
||||
print("Module removed %s" % part)
|
||||
|
||||
func add_module(location: GameData.ModuleType, part: Module) -> void:
|
||||
print("Module added %s" % part)
|
||||
|
||||
func initial_velocity() -> Vector2:
|
||||
return Vector2.RIGHT * get_speed() * 0.011
|
||||
|
||||
func has_fuel() -> bool:
|
||||
return game_data.fuel > 0
|
||||
|
||||
func add_fuel(amount: float, apply_efficiency: bool = false) -> void:
|
||||
game_data.fuel += amount if not apply_efficiency else amount * game_data.fuel_efficiency
|
||||
|
||||
func get_fuel() -> float:
|
||||
return game_data.fuel
|
||||
|
||||
func get_fuel_percent() -> float:
|
||||
return game_data.fuel / game_data.fuel_max
|
||||
|
||||
func get_speed() -> float:
|
||||
return game_data.SPEED
|
||||
|
||||
func get_maneuverability() -> float:
|
||||
return 0.01
|
||||
|
||||
func has_fuel_needed_for_eject() -> bool:
|
||||
return eject_fuel_percentage() >= 1.0
|
||||
|
||||
func eject_fuel_percentage() -> float:
|
||||
return game_data.fuel / fuel_needed_for_eject()
|
||||
|
||||
func eject_fuel_max_percentage() -> float:
|
||||
return fuel_needed_for_eject() / game_data.fuel_max
|
||||
|
||||
func fuel_needed_for_eject() -> float:
|
||||
return max(current_rocket.position.length() / 160.0, 10.0)
|
||||
|
||||
func get_available_upgrades() -> Array[Upgrade]:
|
||||
return game_data.upgrades.filter(func(upgd: Upgrade) -> bool: return not upgd.purchased)
|
||||
|
||||
func purchase_upgrade(upgrade: Upgrade) -> bool:
|
||||
upgrade.purchased = not upgrade.purchased
|
||||
if not has_upgrade_cost(upgrade): return false
|
||||
var index = game_data.upgrades.find(upgrade)
|
||||
if index < 0: return false
|
||||
#TODO finsh this
|
||||
print(game_data.upgrades[index].purchased)
|
||||
return true
|
||||
|
||||
func has_upgrade_cost(upgrade: Upgrade) -> bool:
|
||||
for item in upgrade.cost:
|
||||
if not game_data.inventory.has(item) or game_data.inventory[item] < upgrade.cost[item]:
|
||||
return false
|
||||
return true
|
||||
|
||||
func get_modules_for_location(location: GameData.ModuleType) -> Array:
|
||||
return game_data.modules[location]
|
||||
|
||||
func get_mid_count() -> int:
|
||||
return game_data.mid_module_limit
|
||||
Reference in New Issue
Block a user