53 lines
2.3 KiB
GDScript
53 lines
2.3 KiB
GDScript
extends Node2D
|
|
|
|
const GENERATOR := preload("res://scripts/items/item_generator.gd")
|
|
const REGEN := preload("res://resources/items/affixes/energy_regeneration.tres")
|
|
|
|
class MeasuredLaser:
|
|
extends "res://scripts/game/weapon_controller.gd"
|
|
var shots := 0
|
|
func _consume_energy(amount: float) -> bool:
|
|
var consumed := super._consume_energy(amount)
|
|
if consumed:
|
|
shots += 1
|
|
return consumed
|
|
|
|
func _ready() -> void:
|
|
seed(54321)
|
|
GameState.start_new_run()
|
|
var ship := preload("res://scenes/game/player_ship.tscn").instantiate() as CharacterBody2D
|
|
add_child(ship)
|
|
ship.get_node("WeaponController").set_physics_process(false)
|
|
var inventory := ship.get_node("ShipInventory") as ShipInventory
|
|
var laser := GENERATOR.generate_for_definition(preload("res://resources/items/beam_laser.tres"), 5)
|
|
assert(inventory.add_item(laser))
|
|
assert(inventory.move_item("cargo", inventory.cargo.find(laser), "weapon", 0))
|
|
# Five separate level-5 regeneration affixes, on five ordinary hull modules.
|
|
for index in 5:
|
|
var module := ItemInstance.new()
|
|
module.definition = preload("res://resources/items/hull_plating.tres")
|
|
module.item_level = 5
|
|
var addon := ItemStatModifier.new()
|
|
addon.affix = REGEN
|
|
addon.stat_key = REGEN.stat_key
|
|
addon.value = REGEN.roll_value(5)
|
|
module.additional_modifiers.append(addon)
|
|
assert(inventory.add_item(module))
|
|
assert(inventory.move_item("cargo", inventory.cargo.find(module), "module", index))
|
|
print("REGEN_BONUS_%d: %.4f energy/s" % [index + 1, module.get_stat_total("energy_regeneration")])
|
|
var controller := MeasuredLaser.new()
|
|
ship.add_child(controller)
|
|
await get_tree().physics_frame
|
|
ship.set("energy", 80.0)
|
|
assert(ship.call("get_solar_regeneration") == 0.0)
|
|
print("LASER_SETUP: level=5 DMG=%s addons=%d cost=%.2f regen=%.4f" % [laser.get_damage_range_text(), laser.get_addon_count(), laser.get_energy_cost(), ship.get("energy_regeneration")])
|
|
Input.action_press("ship_fire_primary")
|
|
for frame in 600:
|
|
await get_tree().physics_frame
|
|
Input.action_release("ship_fire_primary")
|
|
var final_energy := float(ship.get("energy"))
|
|
assert(controller.shots > 0)
|
|
assert(final_energy < 80.0)
|
|
print("LASER_ENERGY_TEST: PASS duration=10s shots=%d initial=80 final=%.4f loss=%.4f" % [controller.shots, final_energy, 80.0 - final_energy])
|
|
get_tree().quit()
|