Esempio n. 1
0
bool CStateBase::ChangeState(const string& s)
{
	if(!m_CurState.empty()) LeaveState(m_CurState);
	
	m_CurState = s;
	
	EnterState(m_CurState);
	return true;
}
Esempio n. 2
0
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;
  }
}
Esempio n. 3
0
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;
}