public void Attack(ANavAgent pTarget) { if (m_bBuilding) { return; } bool bFound; float fStopDist = m_fAttackRange + m_fRadius + pTarget.m_fRadius; //TODO Get Shoot Pos /* * Vector2 vPos = m_pOwner.GetShootPos(pTarget.m_vLastPos, m_fRadius, fStopDist, * (fStopDist - pTarget.m_fRadius) * 0.5f + pTarget.m_fRadius, * m_iAvoidenceLayer.value, out bFound); */ //MoveTo(vPos, true, fStopDist, pTarget); }
private Stack <Vector2> GetAPath(Vector2 vTarget, ANavAgent pTarget, out EPathRes result) { result = EPathRes.EPR_Done; return(null); /* * if (m_pUnit is APawn) * { * if (!(m_pUnit as APawn).IsGroundPawn()) * { * //这货是飞的 * result = EPathFindingConst.PathFound; * bStraight = true; * return new[] { m_vLastPos, vTarget }; * } * } * * if (!m_pOwner.EdgeCheckWithAgent(m_vLastPos, vTarget, this, pTarget)) * { * result = EPathFindingConst.PathFound; * bStraight = true; * * return new[] { m_vLastPos, vTarget }; * } * * bStraight = false; * if (null != StaticInfo.m_pBattle * && null != StaticInfo.m_pBattle.m_pGrid * && null != StaticInfo.m_pBattle.m_pGrid.m_pNav * && m_pOwner == StaticInfo.m_pBattle.m_pGrid.m_pNav * && StaticInfo.m_pBattle.m_bBattleStarted * //&& false * ) * { * Vector2[] ret = StaticInfo.m_pBattle.m_pGrid.AStarFindPathFromToV(m_vLastPos, vTarget, out result); * if (null == ret || ret.Length < 2) * { * ret = new[] { m_vLastPos, (vTarget - m_vLastPos) * 0.1f + m_vLastPos }; * } * return ret; * } * * return m_pOwner.PortalFindPathWithAgent(this, pTarget, m_vLastPos, vTarget, out result); */ }
public void MoveTo(Vector2 vPos, bool bAttack = false, float fStopDist = 0.01f, ANavAgent pTarget = null) { EPathRes result = EPathRes.EPR_NoPath; if (m_bBuilding) { return; } if (null != m_pOwner) { Stack <Vector2> path = GetAPath(vPos, pTarget, out result); if (EPathRes.EPR_NoPath == result) { m_Task.m_eProgress = EPathProgress.EPP_GiveUp; m_Task.m_vPathFound = null; m_Task.m_vTargetPoint = vPos; m_Task.m_bAttack = bAttack; //for attack, change to hold m_Task.m_fBlockTime = 0.0f; m_Task.m_fNotMoveTime = 0.0f; m_Task.m_fStopDistance = fStopDist; //for range attack m_Task.m_pTarget = pTarget; m_Task.m_fWalkTime = 0.0f; m_Task.m_pOwner = this; } else { m_Task.m_eProgress = EPathProgress.EPP_Walking; m_Task.m_vPathFound = path; m_Task.m_vTargetPoint = vPos; m_Task.m_bAttack = bAttack; m_Task.m_fBlockTime = 0.0f; m_Task.m_fNotMoveTime = 0.0f; m_Task.m_fStopDistance = fStopDist; m_Task.m_pTarget = pTarget; m_Task.m_fWalkTime = 0.0f; m_Task.m_pOwner = this; } } return; }