예제 #1
0
	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
	}
예제 #2
0
    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;
    }