struct SBarInfo native ui { native void SetScaled(bool scaled); native void Destroy(); native void AttachToPlayer(PlayerInfo player); native void ScreenSizeChanged(); native void Draw(int state); native void NewGame(); native bool MustDrawLog(int state); native void SetMugShotState(String state_name, bool wait_till_done, bool reset); native void Tick(); native clearscope void ReceivedWeapon(Weapon weapon); native void FlashItem(class itemtype); native void ShowPop(int popnum); } // The sole purpose of this wrapper is to elimintate 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 SetScaled(bool scale, bool force) { Super.SetScaled(scale, force); core.SetScaled(Scaled); } override void AttachToPlayer(PlayerInfo player) { Super.AttachToPlayer(player); core.AttachToPlayer(player); } override void ScreenSizeChanged() { Super.ScreenSizeChanged(); core.ScreenSizeChanged(); } override void Draw(int state, double TicFrac) { Super.Draw(state, TicFrac); core.Draw(state); } override void NewGame() { Super.NewGame(); if (CPlayer != NULL) { AttachToPlayer(CPlayer); core.NewGame(); } } override bool MustDrawLog(int state) { return core.MustDrawLog(state); } override void SetMugShotState(String state_name, bool wait_till_done, bool reset) { core.SetMugShotState(state_name, wait_till_done, reset); } override void Tick() { Super.Tick(); core.Tick(); } override void ReceivedWeapon(Weapon weapon) { core.ReceivedWeapon(weapon); } override void FlashItem(class itemtype) { core.FlashItem(itemtype); } override void ShowPop(int popnum) { Super.ShowPop(popnum); core.ShowPop(popnum); } }