private void ExecuteChilds(AgentObjectBlackBoard blackBoard, SelectAgentObjInfo selectObjInfo) { blackBoard.selectAgentObjInfo = selectObjInfo; int count = m_lstChild.Count; for (int i = 0; i < count; i++) { m_lstChild[i].OnTick(blackBoard); } blackBoard.selectAgentObjInfo.Reset(); }
protected override void OnSelectChild(AgentObjectBlackBoard blackBoard, List <AgentObject> lst, ref List <SelectAgentObjInfo> result) { if (lst.Count == 0) { return; } AgentObject host = blackBoard.host; TSVector lastPosition = host.lastPosition; TSVector lastForward = host.lastForward; if (!string.IsNullOrEmpty(m_cLastPosToCurPosData.hangPoint)) { blackBoard.host.GetHangPoint(m_cLastPosToCurPosData.hangPoint, host.lastPosition, host.lastForward, out lastPosition, out lastForward); } TSVector curPosition = host.curPosition; TSVector curForward = host.curForward; if (!string.IsNullOrEmpty(m_cLastPosToCurPosData.hangPoint)) { blackBoard.host.GetHangPoint(m_cLastPosToCurPosData.hangPoint, host.curPosition, host.curForward, out curPosition, out curForward); } //检测lastPosition到curPosition这条之间碰撞到的代理 for (int i = 0; i < lst.Count; i++) { var agentObj = lst[i]; if (agentObj.gameCollider != null) { TSVector hitPoint; if (agentObj.gameCollider.CheckLine(lastPosition, curPosition - lastPosition, out hitPoint)) { SelectAgentObjInfo info = new SelectAgentObjInfo(); info.agentObj = agentObj; info.hitPoint = hitPoint; TSVector direct = agentObj.gameCollider.center - curPosition;; if (direct.IsZero()) { direct = curForward; } info.hitDirect = direct; result.Add(info); } } } }