void Workspace::RecordBTAgentMapping(const char* relativePath, Agent* agent) { BEHAVIAC_UNUSED_VAR(relativePath); BEHAVIAC_UNUSED_VAR(agent); #if BEHAVIAC_ENABLE_HOTRELOAD if (!ms_allBehaviorTreeTasks) { ms_allBehaviorTreeTasks = BEHAVIAC_NEW AllBehaviorTreeTasks_t; } AllBehaviorTreeTasks_t::iterator it = ms_allBehaviorTreeTasks->find(relativePath); if (it == ms_allBehaviorTreeTasks->end()) { (*ms_allBehaviorTreeTasks)[relativePath] = BTItem_t(); } BTItem_t& btItems = (*ms_allBehaviorTreeTasks)[relativePath]; bool bFound = false; for (behaviac::vector<Agent*>::iterator it1 = btItems.agents.begin(); it1 != btItems.agents.end(); ++it1) { Agent* a = (*it1); if (agent == a) { bFound = true; break; } } if (!bFound) { btItems.agents.push_back(agent); } #endif//BEHAVIAC_ENABLE_HOTRELOAD }
BehaviorTreeTask* Workspace::CreateBehaviorTreeTask(const char* relativePath) { BEHAVIAC_ASSERT(behaviac::StringUtils::FindExtension(relativePath) == 0, "no extention to specify"); BEHAVIAC_ASSERT(IsValidPath(relativePath)); BehaviorTrees_t::iterator it = m_behaviortrees.find(relativePath); const BehaviorTree* bt = 0; if (it != m_behaviortrees.end()) { bt = it->second; } else { bool bOk = (Workspace::Load(relativePath)); if (bOk) { BehaviorTrees_t::iterator it1 = m_behaviortrees.find(relativePath); if (it1 != m_behaviortrees.end()) { bt = it1->second; } } } if (bt) { BehaviorTask* task = bt->CreateAndInitTask(); BEHAVIAC_ASSERT(BehaviorTreeTask::DynamicCast(task)); BehaviorTreeTask* behaviorTreeTask = (BehaviorTreeTask*)task; #if BEHAVIAC_ENABLE_HOTRELOAD if (behaviac::Config::IsHotReload()) { if (!m_allBehaviorTreeTasks) { m_allBehaviorTreeTasks = BEHAVIAC_NEW AllBehaviorTreeTasks_t; } AllBehaviorTreeTasks_t::iterator it1 = m_allBehaviorTreeTasks->find(relativePath); if (it1 == m_allBehaviorTreeTasks->end()) { (*m_allBehaviorTreeTasks)[relativePath] = BTItem_t(); } BTItem_t& btItems = (*m_allBehaviorTreeTasks)[relativePath]; bool isAdded = false; for (uint32_t i = 0; i < btItems.bts.size(); ++i) { if (btItems.bts[i] == behaviorTreeTask) { isAdded = true; break; } } if (!isAdded) { btItems.bts.push_back(behaviorTreeTask); } } #endif//BEHAVIAC_ENABLE_HOTRELOAD return behaviorTreeTask; } return 0; }