hsBool plUpdatableClient::Init() { if (plClient::Init()) { GetResMgr()->ForceLoadDirectory(fDataPath, true); // Page in the SceneViewer now that our key is ready GetResMgr()->PageInSceneViewer(); return true; } return false; }
StoneMine::StoneMine(IHoeScene * scn) : SourceBuilding(scn, v_build), m_stone(EBS_Stone) { SetModel((IHoeModel*)GetResMgr()->ReqResource(model_STONEMINE)); m_stone.SetOwner(this); CRR::Get()->Register(&m_stone); m_stone.SetPriority(EBSP_TimeWork); m_stone.SetNum(101); }
//----------------------------------------------------------------------------- MBOOL ResourceLockImp:: SetMode(ECamAdapter Type) { MBOOL Result = MTRUE; // Mutex::Autolock lock(mLock); // MY_LOGD("Type(%d)",Type); // if(mUser <= 0) { MY_LOGE("No user"); Result = MFALSE; goto EXIT; } // if(mpResMgr != NULL) { RES_MGR_DRV_MODE_STRUCT rResMode; GetResMgr(Type, rResMode); mpResMgr->SetMode(&rResMode); } // EXIT: return Result; }
plNetMessage* plNetClientStreamRecorder::IGetNextMessage() { plNetMessage* msg = nil; if (!IsQueueEmpty() && GetNextMessageTimeDelta() <= 0 ) { msg = plNetMessage::ConvertNoRef(GetResMgr()->ReadCreatableVersion(fRecordStream)); // msg->SetPeeked(true); // Fix the flags on game messages, so we won't get an assert later plNetMsgGameMessage* gameMsg = plNetMsgGameMessage::ConvertNoRef(msg); if (gameMsg) { plMessage* plMsg = gameMsg->GetContainedMsg(GetResMgr()); plNetClientApp::GetInstance()->UnInheritNetMsgFlags(plMsg); // write message (and label) to ram stream hsRAMStream stream; GetResMgr()->WriteCreatable(&stream, plMsg); // put stream in net msg wrapper gameMsg->StreamInfo()->CopyStream(&stream); // gameMsg->StreamInfo()->SetStreamType(plMsg->ClassIndex()); // type of game msg } double nextPlaybackTime = fRecordStream->ReadLEDouble(); if (nextPlaybackTime < fNextPlaybackTime) fBetweenAges = true; fNextPlaybackTime = nextPlaybackTime; // If this was the last message, stop playing back if (fRecordStream->AtEnd()) { fRecordStream->Close(); delete fRecordStream; fRecordStream = nil; } } return msg; }
void plNetClientStreamRecorder::RecordMsg(plNetMessage* msg, double secs) { if (!fRecordStream) return; if (IProcessRecordMsg(msg,secs)) { fRecordStream->WriteLEDouble(secs - fPlaybackTimeOffset); GetResMgr()->WriteCreatableVersion(fRecordStream, msg); ILogMsg(msg); } }
bool ConsoleDialog::Load(IHoe3DEngine *eng) { engine = eng; m_fontcolor = 0xffcf0000; font = (IHoeFont *)eng->Create("font 'resource/font.ttf' 12"); if (!font) return false; background = (IHoePicture*)GetResMgr()->ReqResource(model_CONSOLE_BACK); if (!background) return false; return true; }
Sugar::Sugar(IHoeScene * scn) : FactoryBuilding(scn, v_recept, v_build), m_cane(EBS_Cane),m_sugar(EBS_Sugar) { SetModel((IHoeModel*)GetResMgr()->ReqResource(model_SUGAR)); //m_w.SetOwner(this); m_cane.SetOwner(this); m_sugar.SetOwner(this); m_part.emitor = (IHoeParticleEmitor*)GetEngine()->Create("particle"); m_part.pos.Set(-14.f, 23.f, 10.f); GetCtrl()->Link(THoeSubObject::Particle, &m_part); m_it.Start(v_idiottime, true); m_cooker.SetUsage(&v_coalusage); CRR::Get()->Register(&m_sugar); }
hsBool plUpdatableClient::Shutdown() { if (fDirty && fDataPath) { char oldCwd[MAX_PATH]; getcwd(oldCwd, sizeof(oldCwd)); // Even bigger hack char tempCrap[MAX_PATH]; strcpy(tempCrap, fDataPath); tempCrap[strlen(tempCrap)-strlen("dat\\")] = '\0'; chdir(tempCrap); GetResMgr()->WriteSceneViewer(); chdir(oldCwd); } return plClient::Shutdown(); }
void plNetClientStreamRecorder::ILogMsg(plNetMessage* msg, const char* preText) { if (msg->ClassIndex() == CLASS_INDEX_SCOPED(plNetMsgGameMessage)) { plNetMsgGameMessage* gameMsg = plNetMsgGameMessage::ConvertNoRef(msg); fLog->AddLineF("%s%s(%s)", preText, msg->ClassName(), plFactory::GetNameOfClass(gameMsg->StreamInfo()->GetStreamType())); if (gameMsg->StreamInfo()->GetStreamType() == CLASS_INDEX_SCOPED(plNotifyMsg)) { plNotifyMsg* notifyMsg = plNotifyMsg::ConvertNoRef(gameMsg->GetContainedMsg(GetResMgr())); int numEvents = notifyMsg->GetEventCount(); for (int i = 0; i < numEvents; i++) { const char* eventName = ""; proEventData* event = notifyMsg->GetEventRecord(i); switch (event->fEventType) { case proEventData::kCollision: eventName = "Collision"; break; case proEventData::kPicked: eventName = "Picked"; break; case proEventData::kControlKey: eventName = "ControlKey"; break; case proEventData::kVariable: eventName = "Variable"; break; case proEventData::kFacing: eventName = "Facing"; break; case proEventData::kContained: eventName = "Contained"; break; case proEventData::kActivate: eventName = "Activate"; break; case proEventData::kCallback: eventName = "Callback"; break; case proEventData::kResponderState: eventName = "ResponderState"; break; case proEventData::kMultiStage: eventName = "MultiStage"; break; case proEventData::kSpawned: eventName = "Spawned"; break; case proEventData::kClickDrag: eventName = "ClickDrag"; break; } fLog->AddLineF("\t%s", eventName); } hsRefCnt_SafeUnRef(notifyMsg); } } else if (plNetMsgSDLState* sdlMsg = plNetMsgSDLState::ConvertNoRef(msg)) { hsReadOnlyStream stream(sdlMsg->StreamInfo()->GetStreamLen(), sdlMsg->StreamInfo()->GetStreamBuf()); char* descName=nil; int ver; if (plStateDataRecord::ReadStreamHeader(&stream, &descName, &ver)) { fLog->AddLineF("%s%s(%s)", preText, msg->ClassName(), descName); int i; plStateDataRecord sdRec(descName, ver); sdRec.Read(&stream, 0); plStateDataRecord::SimpleVarsList vars; sdRec.GetDirtyVars(&vars); for (i = 0; i < vars.size(); i++) { fLog->AddLineF("\t%s", vars[i]->GetVarDescriptor()->GetName()); } plStateDataRecord::SDVarsList sdVars; sdRec.GetDirtySDVars(&sdVars); for (i = 0; i < sdVars.size(); i++) { fLog->AddLineF("\t%s", sdVars[i]->GetSDVarDescriptor()->GetName()); } } delete [] descName; } else fLog->AddLineF("%s%s", preText, msg->ClassName()); }
bool plNetClientStreamRecorder::IIsValidMsg(plNetMessage* msg) { if (plNetMsgGameMessage* gameMsg = plNetMsgGameMessage::ConvertNoRef(msg)) { int16_t type = gameMsg->StreamInfo()->GetStreamType(); // // These messages will be regenerated if they are for the local avatar, // so don't dispatch them in that case. // if (type == CLASS_INDEX_SCOPED(plLinkEffectsTriggerMsg)) { plLinkEffectsTriggerMsg* linkMsg = plLinkEffectsTriggerMsg::ConvertNoRef(gameMsg->GetContainedMsg(GetResMgr())); if (plNetClientApp::GetInstance()) { bool isLocal = (linkMsg->GetLinkKey() == plNetClientApp::GetInstance()->GetLocalPlayerKey()); hsRefCnt_SafeUnRef(linkMsg); if (isLocal) { ILogMsg(msg, "IGNORING "); return false; } } } else if (type == CLASS_INDEX_SCOPED(plLoadAvatarMsg)) { plLoadAvatarMsg* loadAvMsg = plLoadAvatarMsg::ConvertNoRef(gameMsg->GetContainedMsg(GetResMgr())); if (plNetClientApp::GetInstance()) { bool isLocal = (loadAvMsg->GetCloneKey() == plNetClientApp::GetInstance()->GetLocalPlayerKey()); hsRefCnt_SafeUnRef(loadAvMsg); if (isLocal) { ILogMsg(msg, "IGNORING "); return false; } } } } ILogMsg(msg); return true; }
void plUpdatableClient::IGetUpdate() { // If the semaphore is signaled an update is ready if (fUpdateSignal && fUpdateSignal->Wait(0)) { hsNamedPipeStream s; s.Open(fPipeName, "r"); #ifdef LOG_SCENEVIWER fLog->Clear(); static int numUpdates = 0; numUpdates++; fLog->AddLineF(plStatusLog::kBlue, "SceneViewer Update #%d", numUpdates); #endif // LOG_SCENEVIWER uint8_t type = s.ReadByte(); if (type == ClientUpdate::kShutdown) { #ifdef LOG_SCENEVIWER fLog->AddLine("Client shutdown"); #endif // LOG_SCENEVIWER PostMessage(GetWindowHandle(), WM_SYSCOMMAND, SC_CLOSE, 0); } else if (type == ClientUpdate::kUpdate) { fDirty = true; IEnableProxies(false); int i; // // Delete the deleted keys // int numDeleted = s.ReadSwap32(); std::vector<plKey*> delKeys; delKeys.reserve(numDeleted); for (i = 0; i < numDeleted; i++) { plUoid uoid; uoid.Read(&s); plKey *key = hsgResMgr::ResMgr()->FindKey(uoid); hsAssert(key, "Key to delete not found"); if (key) { #ifdef LOG_SCENEVIWER fLog->AddLineF("Remove: %s", key->GetName()); #endif // LOG_SCENEVIWER GetResMgr()->RemoveObject(key, false); delKeys.push_back(key); } } GetResMgr()->DelayLoad(true); // // Read in the changed spans // hsStatusMessage("ReadChangedSpans\n"); GetResMgr()->ReadChangedSpans(&s); // // Read in the new keys and objects // int numNew = s.ReadSwap32(); for (i = 0; i < numNew; i++) { plCreatable *cre = GetResMgr()->ReadCreatable(&s); hsKeyedObject *ko = hsKeyedObject::ConvertNoRef(cre); #ifdef LOG_SCENEVIWER if (ko) fLog->AddLineF("Read: %s", ko->GetKey()->GetName()); else fLog->AddLine("Read: (null)"); #endif // LOG_SCENEVIWER } GetResMgr()->DelayLoad(false); // Clear out any objects that were never reloaded (really deleted) for (i = 0; i < delKeys.size(); i++) { plKey *key = delKeys[i]; if (!key->ObjectIsLoaded()) { #ifdef LOG_SCENEVIWER fLog->AddLineF("Key deleted: %s", key->GetName()); #endif // LOG_SCENEVIWER GetResMgr()->RemoveObject(key); } } IEnableProxies(true); } s.Close(); } }