bool CStateBase::ChangeState(const string& s) { if(!m_CurState.empty()) LeaveState(m_CurState); m_CurState = s; EnterState(m_CurState); return true; }
void G2DTestSystemDriver::SetupFrame () { if (state_sptr == 0) { EventOutlet->Broadcast (csevQuit (object_reg)); return; } appState curstate = state [state_sptr - 1]; switch (curstate) { case stInit: case stStartup: case stContextInfo: case stWindowFixed: case stWindowResize: case stCustomCursor: case stCustomIcon: case stAlphaTest: case stTestUnicode1: case stTestUnicode2: case stTestFreetype: case stTestLineDraw: case stTestLinePerf: case stTestTextDraw: case stTestTextDraw2: case stPixelClipTest: case stLineClipTest: case stBoxClipTest: case stFontClipTest: case stBlitTest: { if (!myG3D->BeginDraw (CSDRAW_2DGRAPHICS)) break; myG2D->Clear (black); LeaveState (); switch (curstate) { case stInit: fontLarge = GetFont (CSFONT_LARGE); fontItalic = GetFont (CSFONT_ITALIC); fontCourier = GetFont (CSFONT_COURIER); fontSmall = GetFont (CSFONT_SMALL); { csRef<iVFS> vfs = csQueryRegistry<iVFS> (object_reg); csRef<iImageIO> iio = csQueryRegistry<iImageIO> (object_reg); if (vfs.IsValid () && iio.IsValid ()) { csRef<iFile> testFile = vfs->Open ("/lib/g2dtest/up.png", VFS_FILE_READ); if (testFile.IsValid ()) { csRef<iDataBuffer> fileData = testFile->GetAllData (); blitTestImage = iio->Load (fileData, CS_IMGFMT_TRUECOLOR | CS_IMGFMT_ALPHA); } testFile = vfs->Open ("/lib/std/cslogo2.png", VFS_FILE_READ); if (testFile.IsValid ()) { csRef<iDataBuffer> fileData = testFile->GetAllData (); alphaBlitImage = iio->Load (fileData, CS_IMGFMT_TRUECOLOR | CS_IMGFMT_ALPHA); } } } EnterState (stStartup); break; case stStartup: DrawStartupScreen (); EnterState (stContextInfo); EnterState (stPause, 5000); break; case stContextInfo: DrawContextInfoScreen (); EnterState (stWindowFixed); EnterState (stWaitKey); break; case stWindowFixed: DrawWindowScreen (); EnterState (stWindowResize); EnterState (stWaitKey); break; case stWindowResize: DrawWindowResizeScreen (); EnterState (stCustomCursor); EnterState (stWaitKey); break; case stCustomCursor: DrawCustomCursorScreen (); SetCustomCursor (); if (lastkey9) EnterState (stCustomIcon); else EnterState (stCustomCursor); break; case stCustomIcon: SetNormalCursor (); SetCustomIcon (); DrawCustomIconScreen (); EnterState (stAlphaTest); EnterState (stWaitKey); break; case stAlphaTest: DrawAlphaTestScreen (); EnterState (stTestUnicode1); EnterState (stWaitKey); break; case stTestUnicode1: DrawUnicodeTest1 (); EnterState (stTestUnicode2); EnterState (stWaitKey); break; case stTestUnicode2: DrawUnicodeTest2 (); EnterState (stTestFreetype); EnterState (stWaitKey); break; case stTestFreetype: DrawFreetypeTest (); EnterState (stTestLineDraw); EnterState (stWaitKey); break; case stTestLineDraw: DrawLineTest (); EnterState (stTestLinePerf); EnterState (stWaitKey); break; case stTestLinePerf: DrawLinePerf (); if (lastkey2) EnterState (stTestTextDraw); else EnterState (stTestLinePerf); break; case stTestTextDraw: DrawTextTest (); if (lastkey3) EnterState (stTestTextDraw2); else EnterState (stTestTextDraw); break; case stTestTextDraw2: DrawTextTest2 (); if (lastkey4) EnterState (stPixelClipTest); else EnterState (stTestTextDraw2); break; case stPixelClipTest: PixelClipTest (); if (lastkey5) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stLineClipTest); } else EnterState (stPixelClipTest); break; case stLineClipTest: LineClipTest (); if (lastkey6) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stBoxClipTest); } else EnterState (stLineClipTest); break; case stBoxClipTest: BoxClipTest (); if (lastkey7) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stFontClipTest); } else EnterState (stBoxClipTest); break; case stFontClipTest: FontClipTest (); if (lastkey8) EnterState (stBlitTest); else EnterState (stFontClipTest); break; case stBlitTest: BlitTest (); EnterState (stWaitKey); break; default: break; } break; } case stPause: if (int (csGetTicks () - timer) > 0) LeaveState (); else csSleep (1); break; case stWaitKey: if (lastkey) { LeaveState (); SwitchBB = false; } else { if (SwitchBB) { myG2D->Print (0); csSleep (200); } else csSleep (1); } break; } }
int LoginState::HandleEvent(NetworkEvent* nevt){ switch(nevt->_evt_type){ case NET_DISCONNECT: gInterface->ShowMsgBox("Disconnected from server!", MsgBox::BUTTON_OK); break; case NET_CONNECT_RESULT: { ConnectEvent* evt = (ConnectEvent*)nevt; if(!evt->mSuccess){ gInterface->ShowMsgBox("Connection failed.", MsgBox::BUTTON_OK); return 0; } if(evt->srvID == LS){ gInterface->ShowMsgBox("Logging in...", MsgBox::BUTTON_CANCEL); Packet pakout(0x703); gNetwork->SendPacket(LS, &pakout); }else if(evt->srvID == WS){ gInterface->ShowMsgBox("Logging in...", MsgBox::BUTTON_CANCEL); Packet pakout(0x70B); pakout.Add(mUserID); pakout.Add(mPasswordHash, 32); gNetwork->SendPacket(WS, &pakout); }else if(evt->srvID == GS){ gInterface->ShowMsgBox("Logging in...", MsgBox::BUTTON_CANCEL); Packet pakout(0x70B); pakout.Add(mUserID); pakout.Add(mPasswordHash, 32); gNetwork->SendPacket(GS, &pakout); } } break; case NET_PAK_NET_STATUS: { PakNetStatusEvent* evt = (PakNetStatusEvent*)nevt; if(evt->mStatus != 2){ gInterface->ShowMsgBox("Invalid network status.", MsgBox::BUTTON_OK); return 0; } gNetwork->SetCryptKey(evt->srvID, evt->mKey); Packet pakout(0x708); pakout.Add(mPasswordHash, 32); pakout.Add(mUsername); gNetwork->SendPacket(LS, &pakout); } break; case NET_PAK_LOGIN_RESULT: { PakLoginResultEvent* evt = (PakLoginResultEvent*)nevt; if(evt->mResult != LOGIN_OK){ if(evt->mResult > LOGIN_OUT_OF_IP) evt->mResult = 1; else if(evt->mResult == LOGIN_UNSUPPORTED) { gInterface->ShowMsgBox(gLoginStrs[12], MsgBox::BUTTON_OK); gNetwork->Disconnect(1); return 0; } else { gInterface->ShowMsgBox(gLoginStrs[evt->mResult], MsgBox::BUTTON_OK); gNetwork->Disconnect(1); return 0; } } mServerListDialog->SetVisible(true); mLoginDialog->SetVisible(false); mCharacterSelectDialog->SetVisible(false); gInterface->HideMsgBox(); mServerListDialog->ClearServers(); for(unsigned int i = 0; i < evt->mServers.Size(); ++i) mServerListDialog->AddServer(&evt->mServers[i]); mServerListDialog->mServerList->SetSelected(0); if(evt->mServers.Size()) RequestChannelList(evt->mServers[0].mID); } break; case NET_PAK_CHANNEL_LIST: { PakChannelListEvent* evt = (PakChannelListEvent*)nevt; mServerListDialog->mChannelList->SetSelected(0); mServerListDialog->ClearChannels(); for(unsigned int i = 0; i < evt->mChannels.Size(); ++i) mServerListDialog->AddChannel(evt->mServer, &evt->mChannels[i]); } break; case NET_PAK_SELECT_SERVER: { PakSelectServerEvent* evt = (PakSelectServerEvent*)nevt; if(evt->mResult != SELECT_OK){ gInterface->ShowMsgBox(gServerSelectStrs[evt->mResult], MsgBox::BUTTON_OK); }else{ mUserID = evt->mUserID; mCurMsgBoxSrv = WS; gNetwork->Connect(WS, evt->mIP, evt->mPort, evt->mCryptSeed); gInterface->ShowMsgBox("Connecting...", MsgBox::BUTTON_CANCEL); } } break; case NET_PAK_SERVER_JOIN: { PakServerJoinEvent* evt = (PakServerJoinEvent*)nevt; if(evt->mResult != JOIN_OK){ gInterface->ShowMsgBox(gJoinResultStrs[evt->mResult], MsgBox::BUTTON_OK); gNetwork->Disconnect(evt->srvID); }else{ gNetwork->SetCryptKey(evt->srvID, evt->mKey); if(evt->srvID == WS){ gInterface->ShowMsgBox("Getting character list...", MsgBox::BUTTON_CANCEL); Packet pakout(0x712); gNetwork->SendPacket(WS, &pakout); }else if(evt->srvID == GS){ gInterface->ShowMsgBox("Joining game...", MsgBox::BUTTON_CANCEL); } } } break; case NET_PAK_CHARACTER_LIST: { PakCharacterListEvent* evt = (PakCharacterListEvent*)nevt; mServerListDialog->SetVisible(false); mLoginDialog->SetVisible(false); gInterface->HideMsgBox(); mCamera->SetPath(ANIM_MGR().Load("3DDATA\\TITLE\\CAMERA01_INSELECT01.ZMO")); mCamera->SetRepeatCount(1); mWaitCameraFinish = CAMERA_IN_SELECT_CHAR; static Vector3 AvatarPositions[] = { Vector3(5205.00f, 5205.00f, 1.0f), Vector3(5202.70f, 5206.53f, 1.0f), Vector3(5200.00f, 5207.07f, 1.0f), Vector3(5197.30f, 5206.53f, 1.0f), Vector3(5195.00f, 5205.00f, 1.0f), }; for(unsigned int i = 0; i < evt->mCharacters.Size(); ++i){ SelectAvatar* avatar = &mAvatars.Add(); PakCharacterListEvent::Character* chr = &evt->mCharacters[i]; avatar->mName = chr->mName; avatar->mLevel = chr->mLevel; avatar->mClass = chr->mClass; avatar->mDeleteTime = chr->mDeleteTime; avatar->mIsPlatinum = chr->mIsPlatinum; ToolTip* tip = new ToolTip(); avatar->mToolTip = tip; tip->AddLine(avatar->mName, 0, Colour::Yellow, ALIGN_CENTER); tip->AddLine(String("Level: %1").arg(avatar->mLevel)); switch(avatar->mClass) { case 0: { avatar->mClassName = "Visitor"; }break; case 111: { avatar->mClassName = "Soldier"; }break; case 121: { avatar->mClassName = "Knight"; }break; case 122: { avatar->mClassName = "Champion"; }break; case 211: { avatar->mClassName = "Muse"; }break; case 221: { avatar->mClassName = "Magician"; }break; case 222: { avatar->mClassName = "Cleric"; }break; case 311: { avatar->mClassName = "Hawker"; }break; case 321: { avatar->mClassName = "Raider"; }break; case 322: { avatar->mClassName = "Scout"; }break; case 411: { avatar->mClassName = "Dealer"; }break; case 421: { avatar->mClassName = "Bourgeois"; }break; case 422: { avatar->mClassName = "Artisan"; }break; } tip->AddLine(String("Class: %1").arg(avatar->mClassName)); Avatar* entity = new Avatar(); avatar->mEntity = entity; entity->SetGender(chr->mRace); entity->SetFaceStyle(chr->mItems[BP_FACE].mItemNo); entity->SetHairStyle(chr->mItems[BP_HAIR].mItemNo); entity->SetState(STATE_STOP); entity->SetItems(chr->mItems); entity->SetDirection(M_PI); entity->SetPosition(AvatarPositions[i]); entity->SetScale(1.5f); gScene->AddEntity(entity); } } break; case NET_PAK_GAME_SERVER_IP: { PakGameServerIPEvent* evt = (PakGameServerIPEvent*)nevt; mUserID = evt->mUserID; mCurMsgBoxSrv = GS; gNetwork->Connect(GS, evt->mIP, evt->mPort, evt->mCryptSeed); gInterface->ShowMsgBox("Connecting...", MsgBox::BUTTON_CANCEL); } break; case NET_PAK_PLAYER_DATA: { PakPlayerDataEvent* evt = (PakPlayerDataEvent*)nevt; printf("Join map %d Position: %f %f\n", evt->mData->mZone, evt->mData->mPosition); SAFE_DELETE(gPlayer); gPlayer = new Player(); gPlayer->SetName(evt->mName); gPlayer->SetGender(evt->mData->mGender); gPlayer->SetItems(evt->mData->mEquipment); gPlayer->SetFaceStyle(evt->mData->mBasicInfo.mFaceIDX); gPlayer->SetHairStyle(evt->mData->mBasicInfo.mHairIDX); gPlayer->SetPosition(evt->mData->mPosition); gStateManager->EnqueueState(new LoadState(evt->mData->mZone)); gStateManager->EnqueueState(new InGameState()); gInterface->HideMsgBox(); LeaveState(); } break; } return 0; }