Files
2025-11-24 14:19:51 +05:30

177 lines
4.6 KiB
ActionScript

import flash.external.*;
class LobbyInterface extends MovieClip
{
private static var mSingletonInstance:LobbyInterface;
private var mScreens:Array;
private var mCurScreenID:Number;
private var mLastScreenID:Number;
private var mScreensRegistered:Number;
private var mIsLoggedIn:Boolean;
private var mScreenTabManager:ScreenTabManager;
private var mcNavigationPanel:NavigationMenu;
private var mFlashMode:Boolean = false;
//====================================================
//User data
private var mProfileImageIndex:Number;
private var mAccountInfo:AccountInfo;
public function LobbyInterface()
{
ConsoleWindow.Trace("Constructing LobbyInterface");
mSingletonInstance = this;
mScreens = new Array();
mCurScreenID = 0;
mScreensRegistered = 0;
mProfileImageIndex = 1; //TODO: get this from c++
mScreenTabManager = new ScreenTabManager();
onLoad = Initialize;
}
//All screens should be constructed by now, but not neccessarily loaded
public function Initialize():Boolean
{
ConsoleWindow.Trace("LobbyInterface.Initialize()....");
mAccountInfo = new AccountInfo();
ExternalInterface.addCallback("c2f_NotifyConnectionLost", this, c2f_NotifyConnectionLost);
ExternalInterface.addCallback("c2f_GetAccountDetailsResult", mAccountInfo, ServerSetAccountInfo);
return true;
}
public function blah():Void
{
ConsoleWindow.Trace("blah..");
}
public static function get Instance():LobbyInterface
{
return mSingletonInstance;
}
public function GetCurrentScreen():Screen
{
return mScreens[mCurScreenID];
}
public function GetScreen( _screenID:Number ):Screen
{
return mScreens[_screenID];
}
//TODO: get this from c++
//player might get to a page that has a profile image before seeing this screen so we have to make sure this is loaded from c++ first
public function GetProfileImageIndex():Number
{
return mProfileImageIndex;
}
public function GetUsername():String
{
if ( mIsLoggedIn )
{
return mScreens[ScreenID.LOGIN].GetUsername();
}
return null;
}
public function SetLoginState( _state:Boolean ):Void
{
if ( mIsLoggedIn != _state )
{
mIsLoggedIn = _state;
if ( mIsLoggedIn )
{
mcNavigationPanel.OnPlayerLoggedIn();
}
else
{
mcNavigationPanel.OnPlayerLoggedOut();
}
}
}
public function IsLoggedIn():Boolean
{
return mIsLoggedIn;
}
public function RegisterScreen( _screenID:Number, _screen ):Void
{
mScreens[_screenID] = _screen;
mScreensRegistered++;
//trace("Registering screen: " + this[ ScreenID.GetScreenName(_screenID) ] );
ConsoleWindow.Trace("Registering screen: " + mScreens[_screenID] );
//All screens are done loading
if ( mScreensRegistered == ScreenID.TOTAL_SCREENS )
{
ConsoleWindow.Trace( "Finished registering all " + mScreensRegistered + " screens!" );
ShowScreen( ScreenID.CONNECTION );
//GetCurrentScreen()["f2c_Connect"]();
}
}
public function ShowScreen( _id:Number ):Void
{
//mScreens[mCurScreenID].Hide();
mScreenTabManager.ShowScreen( _id );
mLastScreenID = mCurScreenID;
mCurScreenID = _id;
//mScreens[mCurScreenID].Show();
}
public function GetLastScreenId():Number
{
return mLastScreenID;
}
public function ShowLastScreen():Void
{
ShowScreen( mLastScreenID );
}
public function CreateMessageBox( message:String, callback:Function ):Void
{
var messageBox = attachMovie("MessageBox", "MessageBox" + getNextHighestDepth(), getNextHighestDepth() );
messageBox.SetMessage( message, callback );
}
public function IsInFlashMode():Boolean { return mFlashMode; }
//===============================================================================================================================
//Functions called by C++
public function c2f_NotifyConnectionLost(resultIdentifier:String):Void
{
switch (resultIdentifier)
{
case "LCR_CLOSED_BY_USER":
// Programmer closed the connection to the server intentionally
break;
case "LCR_DISCONNECTION_NOTIFICATION":
// Server disconnected us intentionally
break;
case "LCR_CONNECTION_LOST":
// Lost connection to the server
break;
}
// If the user is in any state where you have to be connected (anything other than Disconnected and ConnectingToServer)
// And you get this callback, then show an error dialog, immediately leave whatever screen they are on once they click ok,
// and go to the disconnected state
//gotoAndStop("Disconnected");
ShowScreen(ScreenID.CONNECTION);
}
}