bool EnvironmentModule::HandleEvent(event_category_id_t category_id, event_id_t event_id, Foundation::EventDataInterface* data) { if(category_id == framework_event_category_) { HandleFrameworkEvent(event_id, data); } else if(category_id == resource_event_category_) { HandleResouceEvent(event_id, data); } else if(category_id == network_in_event_category_) { HandleNetworkEvent(event_id, data); } else if (category_id == network_state_event_category_) { if (event_id == ProtocolUtilities::Events::EVENT_SERVER_CONNECTED) { if (GetFramework()->GetDefaultWorldScene().get()) { CreateEnvironment(); CreateTerrain(); CreateWater(); //CreateEnvironment(); CreateSky(); } } if (event_id == ProtocolUtilities::Events::EVENT_SERVER_DISCONNECTED) { if(postprocess_dialog_) postprocess_dialog_->DisableAllEffects(); ReleaseTerrain(); ReleaseWater(); ReleaseEnvironment(); ReleaseSky(); firstTime_ = true; } } else if(category_id == input_event_category_) { HandleInputEvent(event_id, data); } return false; }
void Stage3Object::LayerInit() { auto factory = CObjectFactory::getInstance(); auto mgr = CDataManager::getInstance(); auto profile = m_pLayerData->m_pPlayer->getActorProfile(); for (auto itr = mgr->getBoxData()->begin(); itr != mgr->getBoxData()->end(); itr++) { auto box = factory->CreateBox(this, m_pLayerData->m_pWorld, profile, *itr); m_pLayerData->m_arrObject.push_back(box); } for (auto itr = mgr->getMirageData()->begin(); itr != mgr->getMirageData()->end(); itr++) { auto mirage = factory->CreateMirage(this, m_pLayerData->m_pWorld, profile, *itr); m_pLayerData->m_arrObject.push_back(mirage); } for (auto itr = mgr->getWaterData()->begin(); itr != mgr->getWaterData()->end(); itr++) { auto water = factory->CreateWater(this, profile, *itr); m_pLayerData->m_arrObject.push_back(water); } for (auto itr = mgr->getSandData()->begin(); itr != mgr->getSandData()->end(); itr++) { auto sand = factory->CreateSand(this, m_pLayerData->m_pWorld, *itr); CObjectManager::getInstance()->getSandArray()->InsertObject(sand); } for (auto itr = mgr->getWindBoxData()->begin(); itr != mgr->getWindBoxData()->end(); itr++) { auto windBox = factory->CreateWindBox(this, m_pLayerData->m_pWorld, profile, *itr); m_pLayerData->m_arrObject.push_back(windBox); m_arrWindBox.push_back(windBox); } for (auto itr = mgr->getGroundData()->begin(); itr != mgr->getGroundData()->end(); itr++) { factory->CreateGround(this, m_pLayerData->m_pWorld, *itr); } scheduleUpdate(); }
void EngineActions::AddDefaultEntities() { // Add non-editable entities. m_treenityMain->GetEditor()->InitializeTools(m_world); ECS::Entity* skybox = m_treenityMain->GetWorldSystem()->CreateSkyBox(); CreateFreeFlyingCamera(); // Add editable entities. ECS::Entity* sun = m_treenityMain->GetWorldSystem()->CreateSun(); CreateTestSpawnpoint(); CreateWater(); m_treenityMain->ProcessWorldMessages(); m_world->GetEntityManager()->CleanUp(); m_treenityMain->GetEditor()->RenameEntity(sun, "Sun"); m_treenityMain->GetEditor()->RenameEntity(m_testSpawnpoint, "Test Spawnpoint"); m_treenityMain->GetEditor()->RenameEntity(m_water, "Water"); }
bool EnvironmentModule::HandleNetworkEvent(event_id_t event_id, Foundation::EventDataInterface* data) { ProtocolUtilities::NetworkEventInboundData *netdata = checked_static_cast<ProtocolUtilities::NetworkEventInboundData *>(data); assert(netdata); switch(event_id) { case RexNetMsgLayerData: { if(terrain_.get()) { static int count = 0; bool kill_event = terrain_->HandleOSNE_LayerData(netdata); if (environment_editor_) environment_editor_->UpdateTerrain(); return kill_event; } } case RexNetMsgGenericMessage: { ProtocolUtilities::NetInMessage &msg = *netdata->message; std::string methodname = ProtocolUtilities::ParseGenericMessageMethod(msg); if (methodname == "RexPostP") { OgreRenderer::Renderer *renderer = framework_->GetService<OgreRenderer::Renderer>(); if (renderer) { StringVector vec = ProtocolUtilities::ParseGenericMessageParameters(msg); //Since postprocessing effect was enabled/disabled elsewhere, we have to notify the dialog about the event. //Also, no need to put effect on from the CompositionHandler since the dialog will notify CompositionHandler when //button is checked if (postprocess_dialog_) { QString effect_name = renderer->GetCompositionHandler()->MapNumberToEffectName(vec.at(0)).c_str(); bool enabled = true; if (vec.at(1) == "False") enabled = false; postprocess_dialog_->EnableEffect(effect_name,enabled); } } } else if(methodname == "RexSky" && sky_.get()) { return GetSkyHandler()->HandleRexGM_RexSky(netdata); } else if (methodname == "RexWaterHeight") { msg.ResetReading(); msg.SkipToFirstVariableByName("Parameter"); // Variable block begins, should have currently (at least) 1 instances. size_t instance_count = msg.ReadCurrentBlockInstanceCount(); if (instance_count < 1) return false; if (water_.get() != 0) { std::string message = msg.ReadString(); // Convert to float. try { float height = boost::lexical_cast<float>(message); water_->SetWaterHeight(height); } catch(boost::bad_lexical_cast&) { } } } else if (methodname == "RexDrawWater") { msg.ResetReading(); msg.SkipToFirstVariableByName("Parameter"); // Variable block begins, should have currently (at least) 1 instances. size_t instance_count = msg.ReadCurrentBlockInstanceCount(); if (instance_count < 1 ) return false; std::string message = msg.ReadString(); bool draw = ParseBool(message); if (draw) if (water_.get()) water_->CreateWaterGeometry(); else CreateWater(); else water_->RemoveWaterGeometry(); } else if (methodname == "RexFog") { StringVector parameters = ProtocolUtilities::ParseGenericMessageParameters(msg); if ( parameters.size() < 5) return false; // may have , instead of . so replace ReplaceCharInplace(parameters[0], ',', '.'); ReplaceCharInplace(parameters[1], ',', '.'); ReplaceCharInplace(parameters[2], ',', '.'); ReplaceCharInplace(parameters[3], ',', '.'); ReplaceCharInplace(parameters[4], ',', '.'); float fogStart = 0.0, fogEnd = 0.0, fogC_r = 0.0, fogC_g = 0.0, fogC_b = 0.0; try { fogStart = boost::lexical_cast<float>(parameters[0]); fogEnd = boost::lexical_cast<float>(parameters[1]); fogC_r = boost::lexical_cast<float>(parameters[2]); fogC_g = boost::lexical_cast<float>(parameters[3]); fogC_b = boost::lexical_cast<float>(parameters[4]); } catch(boost::bad_lexical_cast&) { return false; } if (environment_ != 0) { // Adjust fog. QVector<float> color; color<<fogC_r<<fogC_g<<fogC_b; environment_->SetWaterFog(fogStart, fogEnd, color); } } else if (methodname == "RexAmbientL") { /** * Deals RexAmbientLight message. **/ StringVector parameters = ProtocolUtilities::ParseGenericMessageParameters(msg); if ( parameters.size() < 3) return false; // may have , instead of . so replace ReplaceCharInplace(parameters[0], ',', '.'); ReplaceCharInplace(parameters[1], ',', '.'); ReplaceCharInplace(parameters[2], ',', '.'); const QChar empty(' '); StringVector sun_light_direction = SplitString(parameters[0].c_str(), empty.toAscii() ); StringVector sun_light_color = SplitString(parameters[1].c_str(), empty.toAscii()); StringVector ambient_light_color = SplitString(parameters[2].c_str(), empty.toAscii()); if ( environment_ != 0 ) { environment_->SetSunDirection(environment_->ConvertToQVector<float>(sun_light_direction)); environment_->SetSunColor(environment_->ConvertToQVector<float>(sun_light_color)); environment_->SetAmbientLight(environment_->ConvertToQVector<float>(ambient_light_color)); } } } case RexNetMsgSimulatorViewerTimeMessage: { if (environment_!= 0) return environment_->HandleSimulatorViewerTimeMessage(netdata); break; } case RexNetMsgRegionHandshake: { bool kill_event = HandleOSNE_RegionHandshake(netdata); if (environment_editor_) environment_editor_->UpdateTerrainTextureRanges(); return kill_event; } case RexNetMsgRegionInfo: { if (waiting_for_regioninfomessage_) { currentWorldStream_->SendTextureCommitMessage(); waiting_for_regioninfomessage_ = false; } } } return false; }
//---------------------------------------------------------------------------- void Castle::CreateScene () { mScene = new0 Node(); mTrnNode = new0 Node(); mScene->AttachChild(mTrnNode); mWireState = new0 WireState(); mRenderer->SetOverrideWireState(mWireState); CreateLights(); CreateEffects(); CreateTextures(); CreateSharedMeshes(); CreateWallTurret02(); CreateWallTurret01(); CreateWall02(); CreateWall01(); CreateQuadPatch01(); CreateMainGate01(); CreateMainGate(); CreateExterior(); CreateFrontHall(); CreateFrontRamp(); CreateDrawBridge(); CreateCylinder02(); CreateBridge(); CreateLargePort(); CreateSmallPort(1); CreateSmallPort(2); CreateRope(1); CreateRope(2); int i; for (i = 1; i <= 7; ++i) { CreateWoodShield(i); } for (i = 1; i <= 17; ++i) { CreateTorch(i); } for (i = 1; i <= 3; ++i) { CreateKeg(i); } for (i = 2; i <= 37; ++i) { CreateBarrel(i); } for (i = 1; i <= 48; ++i) { CreateDoorFrame(i); } for (i = 49; i <= 60; ++i) { CreateDoorFramePivotTrn(i); } CreateDoorFrame(61); CreateDoorFrameScalePivotTrn(62); CreateDoorFrameScalePivotTrn(63); for (i = 64; i <= 68; ++i) { CreateDoorFrame(i); } for (i = 69; i <= 78; ++i) { CreateDoorFramePivotTrn(i); } CreateDoorFrame(79); CreateDoorFrameScalePivotTrn(80); CreateDoorFrameScalePivotTrn(81); CreateDoorFramePivotTrn(82); CreateDoorFramePivotTrn(83); CreateDoorFramePivotTrn(73); CreateBunk(1); for (i = 4; i <= 20; ++i) { CreateBunk(i); } for (i = 1; i <= 36; ++i) { CreateBench(i); } for (i = 1; i <= 9; ++i) { CreateTable(i); } for (i = 1; i <= 4; ++i) { CreateBarrelRack(i); } for (i = 1; i <= 36; ++i) { CreateChest(i); } for (i = 1; i <= 3; ++i) { CreateCeilingLight(i); } for (i = 1; i <= 7; ++i) { CreateSquareTable(i); } for (i = 1; i <= 27; ++i) { CreateSimpleChair(i); } for (i = 1; i <= 42; ++i) { CreateMug(i); } for (i = 1; i <= 9; ++i) { CreateDoor(i); } CreateTerrain(); CreateSkyDome(); CreateWater(); CreateWater2(); }