void HelloPolycodeApp::createClientPlayer(int clientID) { ClientPlayer *player = new ClientPlayer(); player->clientID = clientID; ScreenEntity *playerEntity = new ScreenEntity(); playerEntity->setPositionMode(ScreenEntity::POSITION_CENTER); ScreenShape *playerBody = new ScreenShape(ScreenShape::SHAPE_CIRCLE, 30,30,3); playerBody->setRotation(-90.0); playerEntity->addChild(playerBody); playerEntity->setPosition(640/2,480/2); gameScreen->addChild(playerEntity); player->playerEntity = playerEntity; player->state = 0; players.push_back(player); }
HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) { core = new POLYCODE_CORE(view, 640,480,false,false,0,0,90); CoreServices::getInstance()->getResourceManager()->addArchive("Resources/default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); screen = new PhysicsScreen(0.5, 50); lastEntity = NULL; for(int i=0; i < 50; i++) { ScreenShape *shape = new ScreenShape(ScreenShape::SHAPE_RECT, 30,15); shape->setRotation(rand() % 360); shape->setPosition(rand() % 640, rand() % 480); screen->addCollisionChild(shape, PhysicsScreenEntity::ENTITY_RECT); } }
HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) { core = new POLYCODE_CORE(view, 640,480,false,false,0,0,90); PhysicsScreen *screen = new PhysicsScreen(10, 60); ScreenShape *shape = new ScreenShape(ScreenShape::SHAPE_RECT, 600,30); shape->setColor(0.0,0.0,0.0,1.0); shape->setPosition(640/2, 400); screen->addPhysicsChild(shape, PhysicsScreenEntity::ENTITY_RECT, true); for(int i=0; i < 200; i++) { shape = new ScreenShape(ScreenShape::SHAPE_RECT, 20,5); shape->setRotation(rand() % 360); shape->setPosition(rand() % 640, rand() % 300); screen->addPhysicsChild(shape, PhysicsScreenEntity::ENTITY_RECT, false); } }
HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) : EventHandler() { core = new POLYCODE_CORE(view, 640,480,false,false,0,0,90); CoreServices::getInstance()->getResourceManager()->addArchive("Resources/default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); screen = new PhysicsScreen(10, 60); ScreenShape *shape = new ScreenShape(ScreenShape::SHAPE_RECT, 600,30); shape->setColor(0.0,0.0,0.0,1.0); shape->setPosition(640/2, 400); screen->addPhysicsChild(shape, PhysicsScreenEntity::ENTITY_RECT, true); for(int i=0; i < 50; i++) { shape = new ScreenShape(ScreenShape::SHAPE_RECT, 20,5); shape->setRotation(rand() % 360); shape->setPosition(rand() % 640, rand() % 300); screen->addPhysicsChild(shape, PhysicsScreenEntity::ENTITY_RECT, false); } collisionSound = new Sound("Resources/hit.wav"); screen->addEventListener(this, PhysicsScreenEvent::EVENT_NEW_SHAPE_COLLISION); }
void HelloPolycodeApp::handleEvent(Event *event) { for(int i=0; i < players.size(); i++) { if(event->getDispatcher() == players[i]->client) { ServerClientEvent *clientEvent = (ServerClientEvent*) event; Player *player = players[i]; switch(clientEvent->getEventCode()) { case ServerClientEvent::EVENT_CLIENT_DATA: switch(clientEvent->dataType) { case CLIENT_READY: { ServerClientInfo info = player->getClientInfo(); server->sendReliableDataToAllClients((char*)&info, sizeof(ServerClientInfo), PLAYER_JOIN); } break; case PLAYER_SHOOT: { } break; case PACKET_TYPE_CLIENT_DATA: ClientData *clientData = (ClientData*) clientEvent->data; player->turning_state = clientData->turning_state; player->thrusting = clientData->thrusting; break; } break; } } } if(event->getDispatcher() == server) { ServerEvent *serverEvent = (ServerEvent*) event; switch(serverEvent->getEventCode()) { case ServerEvent::EVENT_CLIENT_DISCONNECTED: { for(int i=0;i<players.size();i++) { if(players[i]->client == serverEvent->client) { Player *player = players[i]; players.erase(players.begin()+i); gameScreen->removeChild(player->playerEntity); delete player->playerEntity; delete player; } } } break; case ServerEvent::EVENT_CLIENT_CONNECTED: { Player *newPlayer = new Player(); newPlayer->position.x = 640/2; newPlayer->position.y = 480/2; newPlayer->client = serverEvent->client; newPlayer->client->addEventListener(this, ServerClientEvent::EVENT_CLIENT_DATA); ScreenEntity *playerEntity = new ScreenEntity(); playerEntity->setPositionMode(ScreenEntity::POSITION_CENTER); ScreenShape *playerBody = new ScreenShape(ScreenShape::SHAPE_CIRCLE, 30,30,3); playerBody->setRotation(-90.0); playerEntity->addChild(playerBody); playerEntity->setPosition(640/2,480/2); gameScreen->addChild(playerEntity); newPlayer->playerEntity = playerEntity; players.push_back(newPlayer); printf("Player connected\n"); serverInfo.initialServerState = serverState; server->sendReliableDataToClient(newPlayer->client, (char*) &serverInfo, sizeof(ServerInfo), SERVER_INFO); } break; } } }