Files

58 lines
2.1 KiB
GDScript
Raw Permalink Normal View History

2026-09-12 11:01:37 +02:00
extends SceneTree
func _initialize() -> void:
call_deferred("run")
func run() -> void:
create_timer(18).timeout.connect(func(): quit(1))
var server := "--server" in OS.get_cmdline_user_args()
var game: Node3D = load("res://scenes/main.tscn").instantiate()
root.add_child(game)
game.port = 27997
if server:
var settings: Dictionary = game.config.duplicate()
settings.bots = 0
game.host(settings)
else: game.join("127.0.0.1:27997")
game.set_physics_process(false)
var initialized := false
var sent := false
var saw_active := false
var saw_roof := false
var sequence := 0
for tick in 200:
await create_timer(0.05).timeout
for p: Fighter in game.players.values(): p.set_physics_process(false)
if server and game.players.size() == 2:
var roster := []
for p: Fighter in game.players.values():
if p.peer_id != 1:
if not initialized:
p.reset_at(game.arena.lifts[0].bottom)
initialized = true
p.input_data.merge(p.queued_actions, true)
p.queued_actions.clear()
if p.input_data.get("interact", false): RopeLift.start(p)
p.input_data["interact"] = false
if p.rope_active: RopeLift.advance(p, 0.05)
saw_active = saw_active or p.rope_active
saw_roof = saw_roof or p.position.distance_to(game.arena.lifts[0].top) < 0.1
roster.append(p.snapshot())
game.receive_state.rpc(var_to_bytes([roster, game.scores, 600.0, false, "", [], [], game.objectives.snapshot()]).compress(FileAccess.COMPRESSION_DEFLATE))
elif not server and game.active and game.players.has(game.local_id):
var p: Fighter = game.players[game.local_id]
if p.life < 2: continue
if not sent:
game.submit_actions.rpc_id(1, 1, {"interact": true})
sent = true
sequence += 1
game.submit_input.rpc_id(1, sequence, {"move": Vector2.ZERO, "yaw": 0.0, "pitch": 0.0})
saw_active = saw_active or p.rope_active
saw_roof = saw_roof or p.target_position.distance_to(game.arena.lifts[0].top) < 0.1
var passed := saw_active and saw_roof
print("ROPE NETWORK ", "HOST" if server else "CLIENT", " result=", passed)
game.leave()
game.queue_free()
await process_frame
quit(0 if passed else 1)