virtual void load(const char* instance, behaviac::vector<behaviac::string>& paramStrs) { BEHAVIAC_ASSERT(paramStrs.size() == 1); behaviac::StringUtils::StringCopySafe(kInstanceNameMax, _instance, instance); _param0 = AgentMeta::TParseProperty<IList >(paramStrs[0].c_str()); }
//[property] WorldState::WorldState int WorldState::time->185606213 //[property] Ship::Ship_2_3 long GameObject::age->91291 //[property] Ship::Ship_2_3 bool par_a->true void Workspace::ParseProperty(const behaviac::vector<behaviac::string>& tokens) { BEHAVIAC_UNUSED_VAR(tokens); #if !BEHAVIAC_RELEASE const behaviac::string& agentName = tokens[1]; Agent* pAgent = Agent::GetAgent(agentName.c_str()); //pAgent could be 0 if (pAgent && tokens.size() == 4) { //const behaviac::string& varTypeName = tokens[2]; const behaviac::string& varNameValue = tokens[3]; behaviac::string::size_type posb = varNameValue.find("->"); BEHAVIAC_ASSERT(posb != behaviac::string::npos); if (posb != behaviac::string::npos) { behaviac::string::size_type size = behaviac::string::npos; //varNameValue is the last one with '\n' behaviac::string::size_type pose = varNameValue.find('\n'); if (pose != behaviac::string::npos) { size = pose - posb - 1; } behaviac::string varName = varNameValue.substr(0, posb); behaviac::string varValue = varNameValue.substr(posb + 2, size); if (pAgent) { pAgent->SetVariableFromString(varName.c_str(), varValue.c_str()); }//end of if (pAgent) } } #endif }
EBTStatus Selector::SelectorUpdate(Agent* pAgent, EBTStatus childStatus, int& activeChildIndex, behaviac::vector<BehaviorTask*>& children) { EBTStatus s = childStatus; int childSize = (int)children.size(); for (;;) { BEHAVIAC_ASSERT(activeChildIndex < childSize); if (s == BT_RUNNING) { BehaviorTask* pBehavior = children[activeChildIndex]; if (this->CheckIfInterrupted(pAgent)) { return BT_FAILURE; } s = pBehavior->exec(pAgent); } // If the child fails, or keeps running, do the same. if (s != BT_FAILURE) { return s; } // Hit the end of the array, job done! ++activeChildIndex; if (activeChildIndex >= childSize) { return BT_FAILURE; } s = BT_RUNNING; } }