/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // Allows the game to exit //if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) // this.Exit(); // TODO: Add your update logic here ping(); switch (state) { case GameState.game_login: switch (pageLogin.currentState()) { case GameState.login_loggedin: pageLogin.Visible = false; pageCharacterSelector.init(pageLogin.getUserId()); pageCharacterSelector.Visible = true; pageLogin.reset(); reset(); startPing = gameTime.ElapsedGameTime.Milliseconds; state = GameState.game_characterselector; break; default: break; } break; case GameState.game_characterselector: int selectcharid = pageCharacterSelector.getSelectingCharacterID(); if (SelectingCharacterID != selectcharid && selectcharid > 0) { SelectingCharacterID = selectcharid; currentSelectedClassModelID = classConfigs[pageCharacterSelector.getSelectedClassId()].modelID; charEntity = new GameModelNode(Content, modelBank); charEntity.Load(currentSelectedClassModelID); charEntity.Rotation = modelBank.getModelRotation(currentSelectedClassModelID); charEntity.Rotation.Y += 90; charEntity.Position = modelBank.getModelPosition(currentSelectedClassModelID); charEntity.Position.Y -= 7; charEntity.Scale = modelBank.getModelScale(currentSelectedClassModelID); charEntity.playClip((short)GameState.anim_idle, true); } if (selectcharid <= 0) { charEntity = null; } if (charEntity != null && currentSelectedClassModelID > -1) { charEntity.Update(gameTime, Matrix.Identity); } switch (pageCharacterSelector.currentState()) { case GameState.character_backtologin: network.Send("LOGOUT:0;"); bool isLoggedOut = false; while (!isLoggedOut && network.isConnected()) { String responseLogoutMsg = ""; while (responseLogoutMsg.Length <= 0) { responseLogoutMsg = network.Receive(); } String[] LogoutLine = responseLogoutMsg.Split(';'); for (int l = 0; l < LogoutLine.Length; ++l) { String[] LogoutMsg = LogoutLine[l].Split(':'); if (LogoutMsg[0].Equals("LOGOUT") && LogoutMsg.Length == 2) { isLoggedOut = true; break; } } } network.Close(); pageCharacterSelector.Visible = false; pageLogin.Visible = true; pageCharacterSelector.reset(); reset(); state = GameState.game_login; break; case GameState.character_newcharacter: pageCharacterSelector.Visible = false; pageCharacterCreator.init(pageCharacterSelector.getUserId()); pageCharacterCreator.Visible = true; pageCharacterSelector.reset(); reset(); state = GameState.game_charactercreator; break; case GameState.character_selectedcharacter: pageCharacterSelector.Visible = false; gameHandler.init(pageCharacterSelector.getUserId(), pageCharacterSelector.getSelectedCharInfo()); pageCharacterSelector.reset(); reset(); state = GameState.game_map; break; default: break; } break; case GameState.game_charactercreator: short charclass_modelid = classConfigs[pageCharacterCreator.getSelectedClassId()].modelID; if (currentSelectedClassModelID != charclass_modelid) { currentSelectedClassModelID = charclass_modelid; charEntity = new GameModelNode(Content, modelBank); charEntity.Load(currentSelectedClassModelID); charEntity.Rotation = modelBank.getModelRotation(currentSelectedClassModelID); charEntity.Rotation.Y += 90; charEntity.Position = modelBank.getModelPosition(currentSelectedClassModelID); charEntity.Position.Y -= 7; charEntity.Scale = modelBank.getModelScale(currentSelectedClassModelID); charEntity.playClip((short)GameState.anim_idle, true); } if (charEntity != null && currentSelectedClassModelID > -1) { charEntity.Update(gameTime, Matrix.Identity); } switch (pageCharacterCreator.currentState()) { case GameState.character_newcharacterend: pageCharacterCreator.Visible = false; pageCharacterSelector.init(pageCharacterCreator.getUserId()); pageCharacterSelector.Visible = true; pageCharacterCreator.reset(); reset(); state = GameState.game_characterselector; break; default: break; } break; case GameState.game_map: switch (gameHandler.currentState()) { case GameState.map_warping: gameHandler.initToWarp(); break; case GameState.map_warp: cue.Stop(AudioStopOptions.Immediate); gameHandler.warping(); short mapid = gameHandler.getCurrentMapID(); if (mapid > 0 && mapEntities.ContainsKey(mapid)) { cue = audioSystem.getSoundBank().GetCue(mapEntities[mapid].getBGM()); } cue.Play(); break; case GameState.map_backtologin: network.Send("LOGOUT:0;"); bool isLoggedOut = false; while (!isLoggedOut && network.isConnected()) { String responseLogoutMsg = ""; while (responseLogoutMsg.Length <= 0) { responseLogoutMsg = network.Receive(); } String[] LogoutLine = responseLogoutMsg.Split(';'); for (int l = 0; l < LogoutLine.Length; ++l) { String[] LogoutMsg = LogoutLine[l].Split(':'); if (LogoutMsg[0].Equals("LOGOUT") && LogoutMsg.Length == 2) { isLoggedOut = true; break; } } } network.Close(); // Unload game connect pageLogin.Visible = true; guiGameAttribute.Visible = false; guiGameChat.Visible = false; guiGameMenu.Visible = false; guiGameNPC.Visible = false; guiGameEnvironment.Visible = false; guiGameInventory.Visible = false; guiGameInventory.clearInventoryData(); guiGameEquipment.Visible = false; guiGameEquipment.clearEquipmentData(); cue.Stop(AudioStopOptions.Immediate); cue = audioSystem.getSoundBank().GetCue("01"); cue.Play(); gameHandler.reset(); reset(); state = GameState.game_login; break; case GameState.none: gameHandler.ProcessKeyboard(); gameHandler.Update(gameTime, Matrix.Identity); gameCamera.Update(); particle.Update(gameTime, 1); if (IsActive) { gameCamera.ProcessMouse(); if (noCursorInsideWindows()) { gameHandler.ProcessMouse(); } } //shadow.Update(); break; default: break; } break; default: break; } audioSystem.update(); base.Update(gameTime); manager.Update(gameTime); }