This commit is contained in:
aozhiwei 2023-10-31 17:27:44 +08:00
parent 18fe92b789
commit 1609fc8055
4 changed files with 15 additions and 7 deletions

View File

@ -48,7 +48,7 @@
</node> </node>
<node class="ReferencedBehavior" id="2"> <node class="ReferencedBehavior" id="2">
<property ReferenceBehavior="const string &quot;task/MobaMode&quot;" /> <property ReferenceBehavior="const string &quot;task/MobaMode&quot;" />
<property Task="Self.HeroAgent::MobaMode(0,0)" /> <property Task="Self.HeroAgent::MobaMode(0,0,{x=0;y=0;z=0;})" />
</node> </node>
<node class="ReferencedBehavior" id="3"> <node class="ReferencedBehavior" id="3">
<property ReferenceBehavior="const string &quot;task/ChiJiMode&quot;" /> <property ReferenceBehavior="const string &quot;task/ChiJiMode&quot;" />

View File

@ -5,12 +5,13 @@
<pars> <pars>
<par name="_$local_task_param_$_0" type="int" value="0" /> <par name="_$local_task_param_$_0" type="int" value="0" />
<par name="_$local_task_param_$_1" type="int" value="0" /> <par name="_$local_task_param_$_1" type="int" value="0" />
<par name="_$local_task_param_$_2" type="glm::vec3" value="{x=0;y=0;z=0;}" />
</pars> </pars>
<node class="Task" id="0"> <node class="Task" id="0">
<property Prototype="Self.HeroAgent::MobaMode(0,0)" /> <property Prototype="Self.HeroAgent::MobaMode(0,0)" />
<property IsHTN="false" /> <property IsHTN="false" />
<node class="IfElse" id="1"> <node class="IfElse" id="1">
<node class="True" id="2" /> <node class="False" id="2" />
<node class="Noop" id="3" /> <node class="Noop" id="3" />
<node class="IfElse" id="6"> <node class="IfElse" id="6">
<node class="Condition" id="7"> <node class="Condition" id="7">
@ -34,7 +35,7 @@
<property Opr="Self.BaseAgent::GetTickCount()" /> <property Opr="Self.BaseAgent::GetTickCount()" />
</node> </node>
<node class="Parallel" id="9"> <node class="Parallel" id="9">
<property ChildFinishPolicy="CHILDFINISH_LOOP" /> <property ChildFinishPolicy="CHILDFINISH_ONCE" />
<property ExitPolicy="EXIT_NONE" /> <property ExitPolicy="EXIT_NONE" />
<property FailurePolicy="FAIL_ON_ONE" /> <property FailurePolicy="FAIL_ON_ONE" />
<property SuccessPolicy="SUCCEED_ON_ONE" /> <property SuccessPolicy="SUCCEED_ON_ONE" />
@ -64,7 +65,7 @@
<property Operator="Equal" /> <property Operator="Equal" />
<property Opl="int Self.HeroAgent::_$local_task_param_$_0" /> <property Opl="int Self.HeroAgent::_$local_task_param_$_0" />
<property Opr2="const int 0" /> <property Opr2="const int 0" />
<property Phase="Enter" /> <property Phase="Both" />
</attachment> </attachment>
<node class="Sequence" id="16"> <node class="Sequence" id="16">
<node class="IfElse" id="15"> <node class="IfElse" id="15">

View File

@ -77,10 +77,12 @@ bool BaseAgent::PreEnterCoroutine(int co_id, behaviac::EBTStatus& status)
} }
auto& co = itr->second; auto& co = itr->second;
if (co->status != behaviac::BT_RUNNING) { if (co->status != behaviac::BT_RUNNING) {
#ifdef DEBUG
abort(); abort();
#endif }
return true; if (co->IsAbort()) {
list_del_init(&co->entry);
coroutines_hash_.erase(itr);
return false;
} }
co->status = co->runing_cb(co.get()); co->status = co->runing_cb(co.get());
status = co->status; status = co->status;
@ -94,6 +96,7 @@ bool BaseAgent::PreEnterCoroutine(int co_id, behaviac::EBTStatus& status)
void BaseAgent::CheckCoroutineEvent() void BaseAgent::CheckCoroutineEvent()
{ {
int co_id = -1; int co_id = -1;
bool has_abort_co = false;
{ {
list_head* pos = nullptr; list_head* pos = nullptr;
list_head* next = nullptr; list_head* next = nullptr;
@ -188,6 +191,9 @@ void BaseAgent::AbortCoroutine(int co_id)
if (!itr->second->IsAbort()) { if (!itr->second->IsAbort()) {
itr->second->Abort(GetRoom()->GetFrameNo()); itr->second->Abort(GetRoom()->GetFrameNo());
itr->second->runing_cb(itr->second.get()); itr->second->runing_cb(itr->second.get());
itr->second->runing_cb = nullptr;
list_del_init(&itr->second->entry);
coroutines_hash_.erase(itr);
} }
} }
} }

View File

@ -13,6 +13,7 @@ class BtCoroutine
long long sleep_end_frameno = 0; long long sleep_end_frameno = 0;
int sleep_time = 0; int sleep_time = 0;
list_head entry; list_head entry;
long long abort_exec_times = 0;
long long abort_frameno = 0; long long abort_frameno = 0;
behaviac::EBTStatus status = behaviac::BT_RUNNING; behaviac::EBTStatus status = behaviac::BT_RUNNING;