Add gas giant resource system
This commit is contained in:
parent
8f7b58f2a8
commit
fc68c4e8cf
9 changed files with 180 additions and 10 deletions
64
tests/test_gas_system.gd
Normal file
64
tests/test_gas_system.gd
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
extends SceneTree
|
||||
|
||||
# Forgejo #27: gas giants are deterministic animated gas sources, and the
|
||||
# existing transporter route carries their gas without converting it to ore.
|
||||
|
||||
var game_state: Node
|
||||
var stage: int = 0
|
||||
var elapsed: float = 0.0
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
game_state = root.get_node("GameState")
|
||||
game_state.buildings.clear()
|
||||
game_state.extractors.clear()
|
||||
game_state.transporters.clear()
|
||||
game_state.gas = 0
|
||||
game_state.rocks = 0
|
||||
|
||||
|
||||
func _process(delta: float) -> bool:
|
||||
elapsed += delta
|
||||
if stage == 0:
|
||||
var found_giant: bool = false
|
||||
for x in range(-12, 13):
|
||||
for y in range(-12, 13):
|
||||
var data: Dictionary = WorldGen.planet_data_at_chunk(Vector2i(x, y))
|
||||
if String(data.get("planet_type", "")) == "gas_giant":
|
||||
found_giant = String(data.get("resource_type", "")) == "gas"
|
||||
break
|
||||
if found_giant:
|
||||
break
|
||||
if not found_giant:
|
||||
return _fail("world generation produced no deterministic gas giant")
|
||||
var giant: Node2D = load("res://Planet.tscn").instantiate()
|
||||
giant.planet_type = "gas_giant"
|
||||
giant._process(0.5)
|
||||
if giant.gas_phase <= 0.0:
|
||||
return _fail("gas giant animation did not advance")
|
||||
giant.free()
|
||||
|
||||
game_state.add_building(GameState.BUILDING_MOTHERSHIP, Vector2.ZERO)
|
||||
game_state.add_building(GameState.BUILDING_TRANSPORT_HUB, Vector2(100, 0))
|
||||
game_state.add_extractor("Aurelia", Vector2(400, 0), "gas")
|
||||
game_state.extractors[0].stock = game_state.transporter_load_limit()
|
||||
game_state.transporters.append({"hub_id": 2, "state": GameState.TRANSPORTER_TO_EXTRACTOR,
|
||||
"target_id": 0, "extractor_index": 0, "carrying": 0, "resource_type": "gas",
|
||||
"progress": 1.0, "from": Vector2(100, 0), "to": Vector2(400, 0)})
|
||||
game_state._arrive(game_state.transporters[0])
|
||||
if game_state.transporters[0].state != GameState.TRANSPORTER_TO_MOTHERSHIP_FROM_EXTRACTOR:
|
||||
return _fail("transporter did not collect gas from the extractor")
|
||||
game_state._arrive(game_state.transporters[0])
|
||||
if game_state.gas != game_state.transporter_load_limit() or game_state.rocks != 0:
|
||||
return _fail("gas delivery banked gas=%d ore=%d" % [game_state.gas, game_state.rocks])
|
||||
print("gas giant animated; transporter banked %d gas without creating ore" % game_state.gas)
|
||||
print("TEST_GAS_SYSTEM: PASS")
|
||||
quit(0)
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func _fail(message: String) -> bool:
|
||||
print("TEST_GAS_SYSTEM: FAIL (%s)" % message)
|
||||
quit(1)
|
||||
return true
|
||||
Loading…
Reference in a new issue