55 lines
1.7 KiB
GDScript
55 lines
1.7 KiB
GDScript
extends SceneTree
|
|
var game: Node3D
|
|
var server := false
|
|
var elapsed := 0.0
|
|
var ready := false
|
|
var placed := false
|
|
var rewarded := false
|
|
var saw_reward := false
|
|
var saw_mine := false
|
|
var saw_nuke := false
|
|
var sent := false
|
|
func _initialize() -> void:
|
|
server = "--server" in OS.get_cmdline_user_args()
|
|
call_deferred("run")
|
|
func run() -> void:
|
|
game = load("res://scenes/main.tscn").instantiate()
|
|
root.add_child(game)
|
|
game.port = 27986
|
|
if server: game.host({"server_name": "Streak LAN", "mode": "FFA", "max_players": 8, "bots": 0, "score_limit": 100, "time_limit": 600})
|
|
else: game.join("127.0.0.1:27986")
|
|
ready = true
|
|
func _physics_process(dt: float) -> bool:
|
|
if not ready: return false
|
|
elapsed += dt
|
|
if game.active:
|
|
if server:
|
|
for p: Fighter in game.players.values():
|
|
if p.peer_id == 1: continue
|
|
if not placed:
|
|
p.reset_at(Vector3(0, 0.1, 28))
|
|
for i in 5: game.streaks.earned(p)
|
|
placed = true
|
|
saw_reward = p.infinite_left > 0 and p.streak >= 5
|
|
if not game.streaks.mines.is_empty():
|
|
saw_mine = true
|
|
if not rewarded:
|
|
for i in 15: game.streaks.earned(p)
|
|
rewarded = true
|
|
else:
|
|
game.set_physics_process(false)
|
|
var p: Fighter = game.players.get(game.local_id)
|
|
if p != null and p.streak >= 5:
|
|
saw_reward = p.infinite_left > 0
|
|
if not sent:
|
|
game.submit_actions.rpc_id(1, 1, {"ultimate": true})
|
|
sent = true
|
|
saw_mine = saw_mine or not game.streaks.mines.is_empty()
|
|
saw_nuke = saw_nuke or game.streaks.nuke_left > 0
|
|
if elapsed > (7 if server else 5):
|
|
var ok := saw_reward and saw_mine and saw_nuke
|
|
print("STREAK NETWORK ", "HOST" if server else "CLIENT", " result=", ok, " reward=", saw_reward, " mine=", saw_mine, " nuke=", saw_nuke)
|
|
game.leave()
|
|
quit(0 if ok else 1)
|
|
return false
|