struct SBarInfo native ui { native void Destroy(); native void AttachToPlayer(PlayerInfo player); native void Draw(int state, LevelLocals l); native void NewGame(); native bool MustDrawLog(int state); native void Tick(LevelLocals l); native void ShowPop(int popnum); native int GetProtrusion(double scalefac); } // The sole purpose of this wrapper is to eliminate the native dependencies of the status bar object // because those would seriously impede the script conversion of the base class. class SBarInfoWrapper : BaseStatusBar { private clearscope SBarInfo core; override void OnDestroy() { if (core != null) core.Destroy(); // note that the core is not a GC'd object! Super.OnDestroy(); } override void AttachToPlayer(PlayerInfo player) { Super.AttachToPlayer(player); core.AttachToPlayer(player); } override void Draw(int state, double TicFrac) { Super.Draw(state, TicFrac); core.Draw(state, Level); } override void NewGame() { Super.NewGame(); if (CPlayer != NULL) { core.NewGame(); } } override bool MustDrawLog(int state) { return core.MustDrawLog(state); } override void Tick() { Super.Tick(); core.Tick(Level); } override void ShowPop(int popnum) { Super.ShowPop(popnum); core.ShowPop(popnum); } override int GetProtrusion(double scaleratio) const { return core.GetProtrusion(scaleratio); } }