Esempio n. 1
0
    public void InnerResult(int triggerTime, Vector3 forward, Vector3 pos, XSkillData data, IHitHoster hitted = null)
    {
        nHotID = triggerTime;

        if (hitted == null)
        {
            pos           += XCommon.singleton.VectorToQuaternion(host.Transform.forward) * new Vector3(data.Result[triggerTime].Offset_X, 0, data.Result[triggerTime].Offset_Z);
            nResultForward = forward;
            for (int i = 0, max = host.Hits.Length; i < max; i++)
            {
                var hit = host.Hits[i];
                if (IsHurtEntity(hit, triggerTime))
                {
                    continue;
                }
                Vector3 dir = hit.RadiusCenter - pos;
                dir.y = 0;
                float distance = dir.magnitude;
                if (distance > hit.Attr.radius)
                {
                    distance -= hit.Attr.radius;
                }
                if (dir.sqrMagnitude == 0)
                {
                    dir = forward;
                }
                dir.Normalize();

                if (data.IsInField(triggerTime, pos, forward, hit.RadiusCenter, Vector3.Angle(forward, dir), distance))
                {
                    Vector3 vHitDir = data.Result[triggerTime].Affect_Direction == XResultAffectDirection.AttackDir ? (hit.RadiusCenter - pos).normalized : host.Attribute.GetRotateTo();
                    AddHurtTarget(data, hit, triggerTime);
                    hit.Begin(host, data.Hit[triggerTime], vHitDir, data.Logical.AttackOnHitDown);
                }
            }
        }
        else
        {
            Vector3 vHitDir = data.Result[triggerTime].Affect_Direction == XResultAffectDirection.AttackDir ? hitted.RadiusCenter - pos : host.Attribute.GetRotateTo();
            vHitDir.y = 0;
            vHitDir.Normalize();
            hitted.Begin(host, data.Hit[triggerTime], vHitDir, data.Logical.AttackOnHitDown);
        }
    }