void Detector::Update(long i_elpsed_time) { if (m_detector_state == DetectorState::DS_Active) { m_elapsed_time += i_elpsed_time; ProcessState(); } }
void Minion::Update() { ProcessState(); SetPosition(position); D3DXMatrixTranslation(&translate, position.x, position.y, position.z); D3DXMatrixScaling(&scale, scaleFactor, scaleFactor, scaleFactor); D3DXMatrixRotationY(&rotation, rotationAngle); world = scale*rotation*translate; }
void udLoopCaseAlgorithm::ProcessState(wxSFShapeBase *state) { wxASSERT(state); if(!state)return; // check whether the state is already processed if( m_lstProcessedElements.IndexOf(state) != wxNOT_FOUND )return; wxSFDiagramManager *pDiagManager = state->GetShapeManager(); udLanguage *pLang = m_pParentGenerator->GetActiveLanguage(); pLang->SingleLineCommentCmd(wxT("State ID: ") + m_pParentGenerator->MakeIDName(state)); // find state neighbours ShapeList lstNeighbours; pDiagManager->GetNeighbours(state, lstNeighbours, CLASSINFO(umlTransitionItem), wxSFShapeBase::lineSTARTING, sfDIRECT); // find next processable state if( !lstNeighbours.IsEmpty() && ( m_lstProcessedElements.IndexOf(lstNeighbours.GetFirst()->GetData()) == wxNOT_FOUND ) ) { m_pNextElement = lstNeighbours.GetFirst()->GetData(); } else m_pNextElement = NULL; // process given element udElementProcessor *pProcessor = GetElementProcessor(state->GetClassInfo()->GetClassName()); if(pProcessor) { pProcessor->ProcessElement(state); } else { pLang->SingleLineCommentCmd(wxString::Format(wxT( "!!! WARNING: UNSUPPORTED ELEMENT ('%s') !!!"), ((udProjectItem*)state->GetUserData())->GetName().c_str())); IPluginManager::Get()->Log(wxString::Format(wxT("WARNING: '%s' element is not supported by this algorithm."), ((udProjectItem*)state->GetUserData())->GetName().c_str())); } // set the state as processes m_lstProcessedElements.Append(state); m_pPrevElement = state; // process connected states ShapeList::compatibility_iterator node = lstNeighbours.GetFirst(); while(node) { wxSFShapeBase *pNext = node->GetData(); ProcessState( pNext ); node = node->GetNext(); } }
void CSearchingDialog::OnTimer(UINT nIDEvent) { switch (nIDEvent) { case SEARCH_TIMER: { ProcessState(); break; } default: { CBaseDialog::OnTimer(nIDEvent); break; } } }
//UpdateÇÔ¼ö //´Ù¸¥ ij¸¯ÅÍ¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù. State¸¦ UpdateÇÏ°í ÇöÀç state¿¡¼ º¯ÇÑ SRT¸¦ ¹Ý¿µ½ÃÅ´ void Player::Update() { rotationAngle = GameManager::GetCamera()->GetRotateY(); D3DXMatrixRotationY(&rotation, rotationAngle); //rotationÇà·ÄÀ» ProcessState¿¡¼ ¾²±â‹š¹®¿¡ ¹Ì¸® rotation¸¸ °è»êÇØÁØ´Ù. //postionÀÌ processState¿¡¼ ¹Ù²î±â ¶§¹®¿¡ TranslationÀ» ³ªÁß¿¡ ÇÑ´Ù. ProcessState(currentState); D3DXMatrixTranslation(&translate, position.x, position.y, position.z); D3DXMatrixScaling(&scale, scaleFactor, scaleFactor, scaleFactor); world = scale*rotation*translate; }
//Send a file to File Client bool CFileServer::SendFileToClient() { try { SendMessage(m_hWnd, WM_SETSENDING, 1, 0); CString strSendFilePath; CString strSendFileName; if(!m_strSendPath.IsEmpty()) strSendFilePath = m_strSendPath; else SendMessage(m_hWnd, WM_GETSENDPATH, 0, (LPARAM)&strSendFilePath); if(!m_strSendFileName.IsEmpty()) strSendFileName = m_strSendFileName; else SendMessage(m_hWnd, WM_GETFILENAMETOSEND, 0, (LPARAM)&strSendFileName); if(strSendFilePath.Right(1) != _T("\\")) strSendFilePath = strSendFilePath + _T("\\"); CString strFilePathName = strSendFilePath + strSendFileName; m_strSendPath = _T(""); m_strSendFileName = _T(""); ULONGLONG ullSize = 0; if (gl_mapllSize.find(m_hWnd) != gl_mapllSize.end()) { ullSize = gl_mapllSize[m_hWnd]; } FileState state = SendFile(m_pServerSocket->GetWorkingSocket(), m_hWnd, strFilePathName, ullSize); if (gl_pLogger) gl_pLogger->log_info("SendFile return %d", state); return ProcessState(state, m_hWnd); } catch(...) { if (gl_pLogger) gl_pLogger->log_info("CFileServer::SendFileToClient() unkown exception."); } return false; }
status_t AbstractProcess::Run() { { AutoLocker<BLocker> locker(&fLock); if (ProcessState() != PROCESS_INITIAL) { printf("cannot start process as it is not idle"); return B_NOT_ALLOWED; } if (fWasStopped) { printf("cannot start process as it was stopped"); return B_CANCELED; } fProcessState = PROCESS_RUNNING; } status_t runResult = RunInternal(); if (runResult != B_OK) printf("[%s] an error has arisen; %s\n", Name(), strerror(runResult)); AbstractProcessListener* listener; { AutoLocker<BLocker> locker(&fLock); fProcessState = PROCESS_COMPLETE; fErrorStatus = runResult; listener = fListener; } // this process may be part of a larger bulk-load process and // if so, the process orchestration needs to know when this // process has completed. if (listener != NULL) listener->ProcessExited(); return runResult; }
SKILL_STATE cActiveSkillObject::Update() { if( !GetOperator() ) { mState = SKILL_STATE_DESTROY; } if( mState == SKILL_STATE_DESTROY ) { return cSkillObject::Update(); } switch( mState ) { /// 시전중 case SKILL_STATE_CASTING: { CastingState(); } break; /// 발동중 case SKILL_STATE_PROCESS: { ProcessState(); } break; case SKILL_STATE_END: { EndState(); } break; case SKILL_STATE_DESTROY: break; } return cSkillObject::Update(); }
bool FractoriumEmberController<T>::Render() { m_Rendering = true; bool success = true; GLWidget* gl = m_Fractorium->ui.GLDisplay; RendererCL<T, float>* rendererCL = nullptr; eProcessAction qualityAction, action; //Quality is the only parameter we update inside the timer. //This is to allow the user to rapidly increase the quality spinner //without fully resetting the render. Instead, it will just keep iterating //where it last left off in response to an increase. T d = T(m_Fractorium->m_QualitySpin->value()); if (d < m_Ember.m_Quality)//Full restart if quality decreased. { m_Ember.m_Quality = d; qualityAction = eProcessAction::FULL_RENDER; } else if (d > m_Ember.m_Quality && ProcessState() == ACCUM_DONE)//If quality increased, keep iterating after current render finishes. { m_Ember.m_Quality = d; qualityAction = eProcessAction::KEEP_ITERATING; } else if (IsClose(d, m_Ember.m_Quality)) qualityAction = eProcessAction::NOTHING; if (qualityAction == eProcessAction::FULL_RENDER) Update([&] {});//Stop the current render, a full restart is needed. else if (qualityAction == eProcessAction::KEEP_ITERATING) m_ProcessActions.push_back(qualityAction);//Special, direct call to avoid resetting the render inside Update() because only KEEP_ITERATING is needed. action = CondenseAndClearProcessActions();//Combine with all other previously requested actions. if (m_Renderer->RendererType() == OPENCL_RENDERER) rendererCL = dynamic_cast<RendererCL<T, float>*>(m_Renderer.get()); //Force temporal samples to always be 1. Perhaps change later when animation is implemented. m_Ember.m_TemporalSamples = 1; //Take care of solo xforms and set the current ember and action. if (action != NOTHING) { int i, solo = m_Fractorium->ui.CurrentXformCombo->property("soloxform").toInt(); if (solo != -1) { m_TempOpacities.resize(m_Ember.TotalXformCount()); for (i = 0; i < m_Ember.TotalXformCount(); i++) { m_TempOpacities[i] = m_Ember.GetTotalXform(i)->m_Opacity; m_Ember.GetTotalXform(i)->m_Opacity = i == solo ? 1 : 0; } } m_Renderer->SetEmber(m_Ember, action); if (solo != -1) { for (i = 0; i < m_Ember.TotalXformCount(); i++) { m_Ember.GetTotalXform(i)->m_Opacity = m_TempOpacities[i]; } } } //Ensure sizes are equal and if not, update dimensions. if (SyncSizes()) { action = FULL_RENDER; return true; } //Determining if a completely new rendering process is being started. bool iterBegin = ProcessState() == NONE; if (iterBegin) { if (m_Renderer->RendererType() == CPU_RENDERER) m_SubBatchCount = m_Fractorium->m_Settings->CpuSubBatch(); else if (m_Renderer->RendererType() == OPENCL_RENDERER) m_SubBatchCount = m_Fractorium->m_Settings->OpenCLSubBatch(); m_Fractorium->m_ProgressBar->setValue(0); m_Fractorium->m_RenderStatusLabel->setText("Starting"); } //If the rendering process hasn't finished, render with the current specified action. if (ProcessState() != ACCUM_DONE) { //if (m_Renderer->Run(m_FinalImage, 0) == RENDER_OK)//Full, non-incremental render for debugging. if (m_Renderer->Run(m_FinalImage, 0, m_SubBatchCount, (iterBegin || m_Fractorium->m_Settings->ContinuousUpdate())) == RENDER_OK)//Force output on iterBegin or if the settings specify to always do it. { //The amount to increment sub batch while rendering proceeds is purely empirical. //Change later if better values can be derived/observed. if (m_Renderer->RendererType() == OPENCL_RENDERER) { if (m_SubBatchCount < (4 * m_Devices.size()))//More than 3 with OpenCL gives a sluggish UI. m_SubBatchCount += m_Devices.size(); } else { if (m_SubBatchCount < 5) m_SubBatchCount++; else if (m_SubBatchCount < 105)//More than 105 with CPU gives a sluggish UI. m_SubBatchCount += 25; } //Rendering has finished, update final stats. if (ProcessState() == ACCUM_DONE) { EmberStats stats = m_Renderer->Stats(); QString iters = ToString<qulonglong>(stats.m_Iters); QString scaledQuality = ToString(uint(m_Renderer->ScaledQuality())); string renderTime = m_RenderElapsedTimer.Format(m_RenderElapsedTimer.Toc()); m_Fractorium->m_ProgressBar->setValue(100); //Only certain stats can be reported with OpenCL. if (m_Renderer->RendererType() == OPENCL_RENDERER) { m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Total time: " + QString::fromStdString(renderTime) + "."); } else { double percent = double(stats.m_Badvals) / double(stats.m_Iters); QString badVals = ToString<qulonglong>(stats.m_Badvals); QString badPercent = QLocale::system().toString(percent * 100, 'f', 2); m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Bad values: " + badVals + " (" + badPercent + "%). Total time: " + QString::fromStdString(renderTime) + "."); } if (m_LastEditWasUndoRedo && (m_UndoIndex == m_UndoList.size() - 1))//Traversing through undo list, reached the end, so put back in regular edit mode. { m_EditState = REGULAR_EDIT; } else if (m_EditState == REGULAR_EDIT)//Regular edit, just add to the end of the undo list. { m_UndoList.push_back(m_Ember); m_UndoIndex = m_UndoList.size() - 1; m_Fractorium->ui.ActionUndo->setEnabled(m_UndoList.size() > 1); m_Fractorium->ui.ActionRedo->setEnabled(false); if (m_UndoList.size() >= UNDO_SIZE) m_UndoList.pop_front(); } else if (!m_LastEditWasUndoRedo && m_UndoIndex < m_UndoList.size() - 1)//They were anywhere but the end of the undo list, then did a manual edit, so clear the undo list. { Ember<T> ember(m_UndoList[m_UndoIndex]); ClearUndo(); m_UndoList.push_back(ember); m_UndoList.push_back(m_Ember); m_UndoIndex = m_UndoList.size() - 1; m_Fractorium->ui.ActionUndo->setEnabled(true); m_Fractorium->ui.ActionRedo->setEnabled(false); } m_LastEditWasUndoRedo = false; m_Fractorium->UpdateHistogramBounds();//Mostly of engineering interest. FillSummary();//Only update summary on render completion since it's not the type of thing the user needs real-time updates on. } //Update the GL window on start because the output will be forced. //Update it on finish because the rendering process is completely done. if (iterBegin || ProcessState() == ACCUM_DONE) { if (m_FinalImage.size() == m_Renderer->FinalBufferSize())//Make absolutely sure the correct amount of data is passed. gl->update(); //gl->repaint(); //m_Fractorium->update(); //m_Fractorium->ui.GLParentScrollArea->update(); //Uncomment for debugging kernel build and execution errors. //m_Fractorium->ui.InfoRenderingTextEdit->setText(QString::fromStdString(m_Fractorium->m_Wrapper.DumpInfo())); //if (rendererCL) //{ // string s = "OpenCL Kernels: \r\n" + rendererCL->IterKernel() + "\r\n" + rendererCL->DEKernel() + "\r\n" + rendererCL->FinalAccumKernel(); // // QMetaObject::invokeMethod(m_Fractorium->ui.InfoRenderingTextEdit, "setText", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(s))); //} } } else//Something went very wrong, show error report. { vector<string> errors = m_Renderer->ErrorReport(); success = false; m_FailedRenders++; m_Fractorium->m_RenderStatusLabel->setText("Rendering failed, see info tab. Try changing parameters."); m_Fractorium->ErrorReportToQTextEdit(errors, m_Fractorium->ui.InfoRenderingTextEdit); m_Renderer->ClearErrorReport(); if (m_FailedRenders >= 3) { m_Rendering = false; StopRenderTimer(true); m_Fractorium->m_RenderStatusLabel->setText("Rendering failed 3 or more times, stopping all rendering, see info tab. Try changing renderer types."); ClearFinalImages(); m_GLController->ClearWindow(); if (rendererCL) { //string s = "OpenCL Kernels: \r\n" + rendererCL->IterKernel() + "\r\n" + rendererCL->DEKernel() + "\r\n" + rendererCL->FinalAccumKernel(); rendererCL->ClearFinal(); //QMetaObject::invokeMethod(m_Fractorium->ui.InfoRenderingTextEdit, "setText", Qt::QueuedConnection, Q_ARG(const QString&, QString::fromStdString(s))); } } } } //Upon finishing, or having nothing to do, rest. if (ProcessState() == ACCUM_DONE) QThread::msleep(1); //QApplication::processEvents(); m_Rendering = false; return success; }
bool AbstractProcess::IsRunning() { return ProcessState() == PROCESS_RUNNING; }
void GameManager::Play() { MakeInteraction(); ProcessState(); }
void udLoopCaseAlgorithm::ProcessAlgorithm(udDiagramItem *src) { // test "prerequisites" wxASSERT(m_pParentGenerator); if(!m_pParentGenerator)return; wxASSERT(m_pParentGenerator->GetActiveLanguage()); if(!m_pParentGenerator->GetActiveLanguage())return; wxSFDiagramManager *pDiagManager = &src->GetDiagramManager(); udLanguage *pLang = m_pParentGenerator->GetActiveLanguage(); udSStateChartDiagramItem *pSCH = wxDynamicCast( src, udSStateChartDiagramItem ); if( ! pSCH ) return; bool fNonBlocking = pSCH->IsNonBlocking(); bool fHasFinalState = pDiagManager->Contains(CLASSINFO(umlFinalItem)); // get inital states ShapeList lstInitialStates; pDiagManager->GetShapes(CLASSINFO(umlInitialItem), lstInitialStates); pDiagManager->GetShapes(CLASSINFO(umlEntryItem), lstInitialStates); // create diagram function declaration if( !pSCH->IsInline() ) { udFunctionItem *pDeclFcn = IPluginManager::Get()->GetProject()->GetFunctionImplementedBy( pSCH ); if( pDeclFcn ) { pLang->WriteCodeBlocks( pDeclFcn->ToString( udCodeItem::cfDEFINITION, pLang ) ); } else { if( fHasFinalState ) pLang->FunctionDefCmd(wxT("STATE_T"), m_pParentGenerator->MakeValidIdentifier(pSCH->GetName()), wxEmptyString ); else pLang->FunctionDefCmd(pLang->GetDataTypeString(udLanguage::DT_VOID), m_pParentGenerator->MakeValidIdentifier(pSCH->GetName()), wxEmptyString ); } pLang->BeginCmd(); } if( !lstInitialStates.IsEmpty() ) { m_lstProcessedElements.Clear(); wxSFShapeBase *pHistory, *pTarget, *pInitial = lstInitialStates.GetFirst()->GetData(); // declare state variable pLang->SingleLineCommentCmd( wxT("set initial state") ); if( fNonBlocking ) pLang->VariableDeclAssignCmd( wxT("static STATE_T"), wxT("state"), m_pParentGenerator->MakeIDName(pInitial) ); else pLang->VariableDeclAssignCmd( wxT("STATE_T"), wxT("state"), m_pParentGenerator->MakeIDName(pInitial) ); // declare all history states and set history variables to proper values if( src->IsKindOf( CLASSINFO(udHStateChartDiagramItem) ) ) { ShapeList lstHistoryStates, lstOutTrans; pDiagManager->GetShapes( CLASSINFO( umlHistoryItem ), lstHistoryStates ); if( !lstHistoryStates.IsEmpty() ) pLang->SingleLineCommentCmd(wxT("set history states")); ShapeList::compatibility_iterator node = lstHistoryStates.GetFirst(); while( node ) { // find first processed state in a history level pHistory = node->GetData(); lstOutTrans.Clear(); pDiagManager->GetNeighbours( pHistory, lstOutTrans, CLASSINFO( umlTransitionItem ), wxSFShapeBase::lineSTARTING, sfDIRECT ); // there can be only one outcomming transition in hierarchical state with history if( !lstOutTrans.IsEmpty() ) { pTarget = lstOutTrans.GetFirst()->GetData(); if( fNonBlocking ) pLang->VariableDeclAssignCmd( wxT("static STATE_T"), pLang->MakeValidIdentifier( udLABEL::GetContent( pHistory, udLABEL::ltTITLE ) ).Lower(), m_pParentGenerator->MakeIDName(pTarget) ); else pLang->VariableDeclAssignCmd( wxT("STATE_T"), pLang->MakeValidIdentifier( udLABEL::GetContent( pHistory, udLABEL::ltTITLE ) ).Lower(), m_pParentGenerator->MakeIDName(pTarget) ); } node = node->GetNext(); } } pLang->NewLine(); // create infinite loop if( !fNonBlocking ) { pLang->InfiniteLoopCmd(); pLang->BeginCmd(); } // try to generate input action if set udFunctionItem *pInputAction = (udFunctionItem*) IPluginManager::Get()->GetProject()->GetProjectItem( CLASSINFO(udFunctionItem), pSCH->GetInputAction() ); if( pInputAction ) { pLang->SingleLineCommentCmd( wxT("Input action") ); if( !pInputAction->IsInline() ) pLang->WriteCodeBlocks( pInputAction->ToString( udCodeItem::cfCALL, pLang ) ); else { pLang->SingleLineCommentCmd( udGenerator::GetBeginCodeMark( pInputAction ) ); pLang->WriteCodeBlocks( pInputAction->GetCode() ); pLang->SingleLineCommentCmd( udGenerator::GetEndCodeMark( pInputAction ) ); } pLang->SingleLineCommentCmd( wxT("State machine") ); } pLang->SwitchCmd( wxT("state") ); pLang->BeginCmd(); // process diagram items (only one initial state is assumed) ProcessState( pInitial ); pLang->EndCmd(); if( !fNonBlocking ) pLang->EndCmd(); /*else if( !pSCH->IsInline() && fHasFinalState ) { pLang->NewLine(); pLang->ReturnCmd( wxT("state") ); }*/ } //pLang->ReturnCmd(pLang->NullValue()); if( !pSCH->IsInline() ) pLang->EndCmd(); }