Beispiel #1
0
    public static void DoRollDamage(Agent1 agent, AnimAttackData data, float range)
    {
        if (agent == null || data == null)
        {
            return;
        }
        if (agent.BlackBoard.motionType != MotionType.ROLL)
        {
            return;
        }

        Vector3 attackerDir = agent.Forward;
        Vector3 dirToTarget = Vector3.zero;

        for (int i = 0; i < Game1.Instance.AgentMgr.agents.Count; i++)
        {
            Agent1 target = Game1.Instance.AgentMgr.agents[i];
            if (target == null || target == agent ||
                target.BlackBoard.IsAlive == false || target.BlackBoard.IsKnockedDown)
            {
                continue;
            }

            if (target.BlackBoard.invulnerable ||
                (target.BlackBoard.damageOnlyFromBack && TransformTools.IsBehindTarget(agent.Transform, target.Transform) == false))
            {
                // 攻击无效
                ReceiveHitCompletelyBlocked(target, agent);
                HandleSound.PlaySoundBlocked();
                continue;
            }

            dirToTarget = target.Position - agent.Position;

            if (dirToTarget.sqrMagnitude < range * range)
            {
                //if (data.useImpuls)
                //{
                //    ReceiveImpuls(target, agent, dirToTarget.normalized * data.hitMomentum);
                //}
                ReceiveDamage(target, agent, WeaponType.BODY, data.hitDamage, data.hitMomentum);
                HandleSound.PlaySoundHit();
            }
        }
    }