Round five reached the race - full mesh on all three machines, eggs, ACKs, mission running - but the owner raced ALONE. Cause: the engine self-runs a pod at WaitingForLaunch when its console host is not online (the arcade no-console fallback), and the owner''s in-process console never connects to its own pod. On fast-loading owners the self-run beat the console''s staging gate, so RunMission was never sent and the members sat staged at black screens until someone hit the & emergency-abort key. gConsoleMarshalsLaunch (APPMGR) now tells the engine an in-process console owns the launch: the network-race install sets it and the owner holds at WaitingForLaunch with everyone else; plain single player leaves it False and auto-runs as always. Verified on loopback: all pods staged - RUN is back in the hosted-race log and both the hosted race and the single-player cycle pass. Also: unhandled-exception minidumps (rpl4crash.dmp beside the exe, dbghelp loaded lazily) so test-machine crashes hand back stacks. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "app.h"
|
|
|
|
extern HWND ghWnd;
|
|
|
|
// per-frame observer called once per RunMissions frame, after the
|
|
// foreground pass (the single-player local-console marshal uses this)
|
|
extern void (*gPerFrameHook)();
|
|
|
|
// True when an in-process console marshals the launch: suppresses the
|
|
// no-console self-run in CheckLoadMessageHandler so a hosted network
|
|
// race stages at WaitingForLaunch until every pod is ready. Plain
|
|
// single player leaves it False and auto-runs exactly as always.
|
|
extern Logical gConsoleMarshalsLaunch;
|
|
|
|
class ApplicationManager : public Node
|
|
{
|
|
public:
|
|
ApplicationManager(HINSTANCE hInstance, HWND hWnd, Scalar frame_rate);
|
|
~ApplicationManager();
|
|
|
|
void StartApplication(Application *new_app);
|
|
|
|
void RunMissions();
|
|
|
|
Scalar GetFrameRate()
|
|
{
|
|
Check(this);
|
|
return frameRate;
|
|
}
|
|
|
|
HINSTANCE GetHInstance() { return mHInstance; }
|
|
HWND GetHWnd() { return ghWnd; }
|
|
|
|
static ApplicationManager* GetCurrentManager() { return CurrentAppManager; }
|
|
|
|
protected:
|
|
static ApplicationManager* CurrentAppManager;
|
|
|
|
Scalar frameDuration, frameRate;
|
|
SChainOf<Application*> runningApplications;
|
|
HINSTANCE mHInstance;
|
|
};
|