Ejemplo n.º 1
0
void HelloPolycodeApp::handleEvent(Event *event) {

	if(event->getDispatcher() == core->getInput()) {
		InputEvent *inputEvent = (InputEvent*)event;		
		switch(event->getEventCode()) {
			case InputEvent::EVENT_KEYDOWN:
				switch (inputEvent->keyCode()) {
					case KEY_ESCAPE:
						client->Disconnect();
					break;
					case KEY_UP:
						clientData.thrusting = 1;
					break;				
					case KEY_LEFT:
						clientData.turning_state = TURNING_LEFT;
					break;
					case KEY_RIGHT:
						clientData.turning_state = TURNING_RIGHT;
					break;
				}
			break;
			case InputEvent::EVENT_KEYUP:
				switch (inputEvent->key) {
					case KEY_UP:
						clientData.thrusting = 0;						
					break;				
					case KEY_LEFT:
					case KEY_RIGHT:
						clientData.turning_state = NOT_TURNING;
					break;					
				}
			break;			
		}
		
	}

	if(event->getDispatcher() == client) {
		ClientEvent *clientEvent = (ClientEvent*) event;
		
		switch(clientEvent->getEventCode()) {
			case ClientEvent::EVENT_CLIENT_READY:
				Logger::log("Connected to server with client ID: %d!\n", client->getClientID());
			break;
			case ClientEvent::EVENT_SERVER_DISCONNECTED:
				core->Shutdown();
			break;
			case ClientEvent::EVENT_SERVER_DATA:
			{
				switch(clientEvent->dataType) {
					case PACKET_TYPE_SERVER_DATA:
					{
						ServerState *serverState = (ServerState*) clientEvent->data;
						for(int i=0; i < players.size(); i++) {
							ClientPlayer *clientPlayer = players[i];
							for(int j=0; j < MAX_PLAYERS; j++) {
								if(clientPlayer->clientID == serverState->players[j].clientID && serverState->players[j].state != 0) {
									clientPlayer->playerEntity->setPosition(serverState->players[j].posX, serverState->players[j].posY);
									clientPlayer->playerEntity->setRotation(serverState->players[j].angle);								
								}
							}							
						}
					}
					break;
					case PLAYER_JOIN:
					{
						ServerClientInfo *newClientInfo = (ServerClientInfo*) clientEvent->data;
						createClientPlayer(newClientInfo->clientID);
					}
					break;
					case SERVER_INFO:
					{
						ServerInfo *info = (ServerInfo*) clientEvent->data;
						motdLabel->setText(info->motd);
						ServerState *serverState = &info->initialServerState;
												
						// create initial players
						for(int j=0; j < MAX_PLAYERS; j++) {
							if(serverState->players[j].state != 0) {
								createClientPlayer(serverState->players[j].clientID);
							}
						}							
						
						
						client->sendReliableDataToServer(NULL, 0, CLIENT_READY);
					}
					break;
				}
			}
			break;
		}
	}
}