public LoginScreen() { PlayBackgroundMusic(new string[] { "none" }); /** * Scale the whole screen to 1024 */ BackgroundCtnr = new UIContainer(); BackgroundCtnr.ScaleX = BackgroundCtnr.ScaleY = ScreenWidth / 800.0f; /** Background image **/ Background = new UIImage(GetTexture((ulong)FileIDs.UIFileIDs.setup)); Background.ID = "Background"; BackgroundCtnr.Add(Background); /** Client version **/ var lbl = new UILabel(); lbl.Caption = "Version " + GlobalSettings.Default.ClientVersion; lbl.X = 20; lbl.Y = 558; BackgroundCtnr.Add(lbl); this.Add(BackgroundCtnr); /** Progress bar **/ LoginProgress = new UILoginProgress(); LoginProgress.X = (ScreenWidth - (LoginProgress.Width + 20)); LoginProgress.Y = (ScreenHeight - (LoginProgress.Height + 20)); LoginProgress.Opacity = 0.9f; this.Add(LoginProgress); /** Login dialog **/ LoginDialog = new UILoginDialog(this); LoginDialog.Opacity = 0.9f; //Center LoginDialog.X = (ScreenWidth - LoginDialog.Width) / 2; LoginDialog.Y = (ScreenHeight - LoginDialog.Height) / 2; this.Add(LoginDialog); NetworkFacade.Controller.OnNetworkError += new NetworkErrorDelegate(Controller_OnNetworkError); NetworkFacade.Controller.OnLoginProgress += new OnProgressDelegate(Controller_OnLoginProgress); NetworkFacade.Controller.OnLoginStatus += new OnLoginStatusDelegate(Controller_OnLoginStatus); var gameplayButton = new UIButton() { Caption = "Simantics & Lot Debug", Y = 10, Width = 200, X = 10 }; this.Add(gameplayButton); gameplayButton.OnButtonClick += new ButtonClickDelegate(gameplayButton_OnButtonClick); }
/// <summary> /// Creates a new CityTransitionScreen. /// </summary> /// <param name="SelectedCity">The city being transitioned to.</param> /// <param name="CharacterCreated">If transitioning from CreateASim, this should be true. /// A CharacterCreateCity packet will be sent to the CityServer. Otherwise, this should be false. /// A CityToken packet will be sent to the CityServer.</param> public CityTransitionScreen(CityInfo SelectedCity, bool CharacterCreated) { m_SelectedCity = SelectedCity; m_CharacterCreated = CharacterCreated; /** * Scale the whole screen to 1024 */ m_BackgroundCtnr = new UIContainer(); m_BackgroundCtnr.ScaleX = m_BackgroundCtnr.ScaleY = ScreenWidth / 800.0f; /** Background image **/ m_Background = new UIImage(GetTexture((ulong)FileIDs.UIFileIDs.setup)); m_Background.ID = "Background"; m_BackgroundCtnr.Add(m_Background); var lbl = new UILabel(); lbl.Caption = "Version " + GlobalSettings.Default.ClientVersion; lbl.X = 20; lbl.Y = 558; m_BackgroundCtnr.Add(lbl); this.Add(m_BackgroundCtnr); m_LoginProgress = new UILoginProgress(); m_LoginProgress.X = (ScreenWidth - (m_LoginProgress.Width + 20)); m_LoginProgress.Y = (ScreenHeight - (m_LoginProgress.Height + 20)); m_LoginProgress.Opacity = 0.9f; this.Add(m_LoginProgress); /*lock(NetworkFacade.Controller) NetworkFacade.Controller.OnNetworkError += new NetworkErrorDelegate(Controller_OnNetworkError);*/ lock (NetworkFacade.Client) { lock (NetworkFacade.Client.ClientEncryptor) { LoginArgsContainer LoginArgs = new LoginArgsContainer(); LoginArgs.Username = NetworkFacade.Client.ClientEncryptor.Username; LoginArgs.Password = Convert.ToBase64String(PlayerAccount.Hash); LoginArgs.Enc = NetworkFacade.Client.ClientEncryptor; NetworkFacade.Client = new NetworkClient(SelectedCity.IP, SelectedCity.Port, GonzoNet.Encryption.EncryptionMode.AESCrypto, true); //This might not fix decryption of cityserver's packets, but it shouldn't make things worse... NetworkFacade.Client.ClientEncryptor = LoginArgs.Enc; //THIS IS IMPORTANT - THIS NEEDS TO BE COPIED AFTER IT HAS BEEN RECREATED FOR //THE RECONNECTION TO WORK! LoginArgs.Client = NetworkFacade.Client; NetworkFacade.Client.OnConnected += new OnConnectedDelegate(Client_OnConnected); NetworkFacade.Controller.Reconnect(ref NetworkFacade.Client, SelectedCity, LoginArgs); } } lock (NetworkFacade.Controller) { NetworkFacade.Controller.OnCharacterCreationStatus += new OnCharacterCreationStatusDelegate(Controller_OnCharacterCreationStatus); NetworkFacade.Controller.OnCityTransferProgress += new OnCityTransferProgressDelegate(Controller_OnCityTransfer); NetworkFacade.Controller.OnLoginNotifyCity += new OnLoginNotifyCityDelegate(Controller_OnLoginNotifyCity); NetworkFacade.Controller.OnLoginSuccessCity += new OnLoginSuccessCityDelegate(Controller_OnLoginSuccessCity); NetworkFacade.Controller.OnLoginFailureCity += new OnLoginFailureCityDelegate(Controller_OnLoginFailureCity); NetworkFacade.Controller.OnNetworkError += new NetworkErrorDelegate(Controller_OnNetworkError); } }
public void InitTestLot(string path, bool host) { if (Connecting) return; if (vm != null) CleanupLastWorld(); World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); VMNetDriver driver; if (host) { driver = new VMServerDriver(37564, null); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm = new VM(new VMContext(World), driver, new UIHeadlineRendererProvider()); vm.Init(); vm.LotName = (path == null) ? "localhost" : path.Split('/').LastOrDefault(); //quick hack just so we can remember where we are if (host) { //check: do we have an fsov to try loading from? string filename = Path.GetFileName(path); try { using (var file = new BinaryReader(File.OpenRead(Path.Combine(FSOEnvironment.UserDir, "LocalHouse/")+filename.Substring(0, filename.Length-4)+".fsov"))) { var marshal = new SimAntics.Marshals.VMMarshal(); marshal.Deserialize(file); vm.Load(marshal); vm.Reset(); } } catch (Exception) { short jobLevel = -1; //quick hack to find the job level from the chosen blueprint //the final server will know this from the fact that it wants to create a job lot in the first place... try { if (filename.StartsWith("nightclub") || filename.StartsWith("restaurant") || filename.StartsWith("robotfactory")) jobLevel = Convert.ToInt16(filename.Substring(filename.Length - 9, 2)); } catch (Exception) { } vm.SendCommand(new VMBlueprintRestoreCmd { JobLevel = jobLevel, XMLData = File.ReadAllBytes(path) }); } } uint simID = (uint)(new Random()).Next(); vm.MyUID = simID; vm.SendCommand(new VMNetSimJoinCmd { ActorUID = simID, HeadID = GlobalSettings.Default.DebugHead, BodyID = GlobalSettings.Default.DebugBody, SkinTone = (byte)GlobalSettings.Default.DebugSkin, Gender = !GlobalSettings.Default.DebugGender, Name = GlobalSettings.Default.LastUser }); LotController = new UILotControl(vm, World); this.AddAt(0, LotController); vm.Context.Clock.Hours = 10; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } if (IDEHook.IDE != null) IDEHook.IDE.StartIDE(vm); vm.OnFullRefresh += VMRefreshed; vm.OnChatEvent += Vm_OnChatEvent; vm.OnEODMessage += LotController.EODs.OnEODMessage; }
public void ClientStateChangeProcess(int state, float progress) { //TODO: queue these up and try and sift through them in an update loop to avoid UI issues. (on main thread) if (state == 4) //disconnected { var reason = (VMCloseNetReason)progress; if (reason == VMCloseNetReason.Unspecified) { var alert = UIScreen.ShowAlert(new UIAlertOptions { Title = GameFacade.Strings.GetString("222", "3"), Message = GameFacade.Strings.GetString("222", "2", new string[] { "0" }), }, true); if (Connecting) { UIScreen.RemoveDialog(ConnectingDialog); ConnectingDialog = null; Connecting = false; } alert.ButtonMap[UIAlertButtonType.OK].OnButtonClick += DisconnectedOKClick; } else { DisconnectedOKClick(null); } } if (ConnectingDialog == null) return; switch (state) { case 1: ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "26"); ConnectingDialog.Progress = 25f; break; case 2: ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "27"); ConnectingDialog.Progress = 100f*(0.5f+progress*0.5f); break; case 3: UIScreen.RemoveDialog(ConnectingDialog); ConnectingDialog = null; Connecting = false; ZoomLevel = 1; ucp.SetInLot(true); break; } }
public void InitTestLot(string path, bool host) { if (Connecting) return; if (vm != null) CleanupLastWorld(); World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); VMNetDriver driver; if (host) { driver = new VMServerDriver(37564); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm = new VM(new VMContext(World), driver); vm.Init(); if (host) { vm.SendCommand(new VMBlueprintRestoreCmd { XMLData = File.ReadAllBytes(path) }); } uint simID = (uint)(new Random()).Next(); vm.SendCommand(new VMNetSimJoinCmd { SimID = simID, HeadID = GlobalSettings.Default.DebugHead, BodyID = GlobalSettings.Default.DebugBody, SkinTone = (byte)GlobalSettings.Default.DebugSkin, Gender = !GlobalSettings.Default.DebugGender, Name = GlobalSettings.Default.LastUser }); LotController = new UILotControl(vm, World); LotController.SelectedSimID = simID; this.AddAt(0, LotController); vm.Context.Clock.Hours = 8; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } vm.OnFullRefresh += VMRefreshed; }