示例#1
0
void OnlineRaceLogic::onRaceStart(
		const CL_Pointf &p_carPosition,
		const CL_Angle &p_carRotation
)
{
	cl_log_event(LOG_RACE, "race is starting");

	Car &car = Game::getInstance().getPlayer().getCar();

	car.reset();

	car.setPosition(p_carPosition);
	car.setAngle(p_carRotation);

	car.setLocked(true);

	// reset progress data
	getProgress().reset(car);

	// send current state
	CL_NetGameEvent serialData("");
	car.serialize(&serialData);

	Net::CarState carState;
	carState.setSerializedData(serialData);

	m_client->sendCarState(carState);

	// FIXME: where to store lap count?
	startRace(3, CL_System::get_time() + RACE_START_DELAY);
}
bool CTournamentRace::onEvent(IIrrOdeEvent *pEvent) {
  bool bRet=false;
  printf("CTournamentRace::onEvent\n");

  if (!m_pNetAdapter->isServer() && pEvent->getType()==eNetServerMessage) {
    CEventServerMessage *p=(CEventServerMessage *)pEvent;
    switch (p->getCode()) {
      case eNetStartRace: startRace(); break;
      case eNetBackToStart: m_iSelect=m_iReturnState; break;
    }
  }

  return bRet;
}
bool CTournamentRace::OnEvent (const SEvent &event) {
  bool bRet=false;

  if (event.EventType==EET_KEY_INPUT_EVENT && !event.KeyInput.PressedDown) {
	  if (event.KeyInput.Key==KEY_ESCAPE && !event.KeyInput.PressedDown) {
      if (m_pSndEngine) m_pSndEngine->play2D("data/sounds/menuback.ogg");
      m_iSelect=m_iReturnState;

      if (m_pNetAdapter) {
        CEventServerMessage cMsg(eNetBackToStart);
        m_pNetAdapter->sendPacket(&cMsg);
      }

	    bRet=true;
	  }

	  if (event.KeyInput.Key==KEY_RETURN && (!m_pNetAdapter || m_pNetAdapter->isServer())) bRet=startRace();
  }

  if (event.EventType==EET_GUI_EVENT) {
    if (event.GUIEvent.EventType==EGET_TAB_CHANGED && m_pSndEngine) m_pSndEngine->play2D("data/sounds/menuchange.ogg");
    if (event.GUIEvent.EventType==EGET_BUTTON_CLICKED) {
      u32 id=event.GUIEvent.Caller->getID();

      if (id==1 && (!m_pNetAdapter || m_pNetAdapter->isServer())) bRet=startRace();

      if (id==2) {
        m_pSndEngine->play2D("data/sounds/menuback.ogg");
        m_iSelect=m_iReturnState;

        if (m_pNetAdapter) {
          CEventServerMessage cMsg(eNetBackToStart);
          m_pNetAdapter->sendPacket(&cMsg);
        }

        bRet=true;
      }

      if (id==3) {
        m_pSndEngine->play2D("data/sounds/menuchange.ogg");
        m_iSelect=1;
        bRet=true;
      }
    }
  }

  return bRet;
}
示例#4
0
文件: Server.cpp 项目: bercik/gear
void ServerImpl::onVoteSystemFinished()
{
	// voting finished, send event
	VoteEnd voteEnd;
	voteEnd.setResult(m_voteSystem.getResult());

	sendToAll(voteEnd.buildEvent());

	// check if I should take action
	if (m_voteSystem.getResult() == VOTE_PASSED) {
		switch (m_voteSystem.getType()) {
			case VOTE_RESTART_RACE:
				startRace();
				break;

			default:
				assert(0 && "unknown VoteType");
		}
	}
}