Esempio n. 1
0
 public void onAnimatedHitBoxCreated(MonoAnimatedHitboxDetect hitBox, ConfigEntityAttackPattern attackPattern)
 {
     if (this.onAnimatedHitBoxCreatedCallBack != null)
     {
         this.onAnimatedHitBoxCreatedCallBack(hitBox, attackPattern);
     }
 }
 private void onAnimatedHitBoxCreated(MonoAnimatedHitboxDetect hitBox, ConfigEntityAttackPattern attackPattern)
 {
     if ((attackPattern is AnimatedColliderDetect) || (attackPattern is TargetLockedAnimatedColliderDetect))
     {
         if (attackPattern is AnimatedColliderDetect)
         {
             AnimatedColliderDetect detect = attackPattern as AnimatedColliderDetect;
             if (!detect.brokenEnemyDragged)
             {
                 return;
             }
         }
         else if (attackPattern is TargetLockedAnimatedColliderDetect)
         {
             TargetLockedAnimatedColliderDetect detect2 = attackPattern as TargetLockedAnimatedColliderDetect;
             if (!detect2.brokenEnemyDragged)
             {
                 return;
             }
         }
         if (hitBox.entryName == this.config.ColliderEntryName)
         {
             hitBox.enemyEnterCallback = (Action <MonoAnimatedHitboxDetect, Collider>)Delegate.Combine(hitBox.enemyEnterCallback, new Action <MonoAnimatedHitboxDetect, Collider>(this.HitBoxTriggerEnterCallback));
             hitBox.destroyCallback    = (Action <MonoAnimatedHitboxDetect>)Delegate.Combine(hitBox.destroyCallback, new Action <MonoAnimatedHitboxDetect>(this.onAnimatedHitBoxDestroy));
             this._draggedEnemyList.Add(new Tuple <MonoAnimatedHitboxDetect, HashSet <BaseAbilityActor> >(hitBox, new HashSet <BaseAbilityActor>()));
             this._touchedEnemyList.Add(new Tuple <MonoAnimatedHitboxDetect, HashSet <uint> >(hitBox, new HashSet <uint>()));
         }
     }
 }
Esempio n. 3
0
        public static void CylinderCollisionDetectAttack(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, LayerMask layerMask)
        {
            CylinderCollisionDetect detect = (CylinderCollisionDetect)patternConfig;
            Vector3 cylinderCenterPoint    = attacker.XZPosition + ((Vector3)(attacker.FaceDirection * detect.CenterZOffset));
            List <CollisionResult> results = CollisionDetectPattern.CylinderCollisionDetectBySphere(attacker.XZPosition, cylinderCenterPoint, detect.Radius, detect.Height, layerMask);

            TestAndActHit(attackName, patternConfig, attacker, results);
        }
Esempio n. 4
0
        public static void RectCollisionDetectAttack(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, LayerMask layerMask)
        {
            RectCollisionDetect    detect         = (RectCollisionDetect)patternConfig;
            Vector3                recCenterPoint = new Vector3(attacker.XZPosition.x, attacker.XZPosition.y + detect.CenterYOffset, attacker.XZPosition.z);
            List <CollisionResult> results        = CollisionDetectPattern.RectCollisionDetectByRay(recCenterPoint, detect.OffsetZ, attacker.FaceDirection, detect.Width, detect.Distance, layerMask);

            TestAndActHit(attackName, patternConfig, attacker, results);
        }
Esempio n. 5
0
        public static void FanCollisionDetectAttack(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, LayerMask layerMask)
        {
            FanCollisionDetect     detect         = (FanCollisionDetect)patternConfig;
            Vector3                fanCenterPoint = new Vector3(attacker.XZPosition.x, (attacker.XZPosition.y + detect.CenterYOffset) + (!detect.FollowRootNodeY ? 0f : attacker.GetAttachPoint("RootNode").transform.position.y), attacker.XZPosition.z);
            List <CollisionResult> results        = CollisionDetectPattern.MeleeFanCollisionDetectBySphere(fanCenterPoint, detect.OffsetZ, attacker.FaceDirection, detect.Radius * (1f + attacker.Evaluate(detect.RadiusRatio)), detect.FanAngle, detect.MeleeRadius, detect.MeleeFanAngle, layerMask);

            TestAndActHit(attackName, patternConfig, attacker, results);
        }
Esempio n. 6
0
        public static void CylinderCollisionDetectTargetLockedAttack(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, LayerMask layerMask)
        {
            Vector3 xZPosition;
            CylinderCollisionDetectTargetLocked locked = (CylinderCollisionDetectTargetLocked)patternConfig;

            if ((attacker.AttackTarget != null) && attacker.AttackTarget.IsActive())
            {
                xZPosition = attacker.AttackTarget.XZPosition;
            }
            else
            {
                xZPosition = attacker.XZPosition;
            }
            List <CollisionResult> results = CollisionDetectPattern.CylinderCollisionDetectBySphere(attacker.XZPosition, xZPosition, locked.Radius * (1f + attacker.Evaluate(locked.RadiusRatio)), locked.Height, layerMask);

            TestAndActHit(attackName, patternConfig, attacker, results);
        }
Esempio n. 7
0
        public static void TestAndActHit(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, List <CollisionResult> results)
        {
            AttackResult.HitCollsion collsion4;
            List <CollisionResult>   list = FilterRealAttackeesByBodyParts(attackName, patternConfig, attacker, results);

            switch (Singleton <RuntimeIDManager> .Instance.ParseCategory(attacker.GetRuntimeID()))
            {
            case 3:
                foreach (CollisionResult result in list)
                {
                    BaseMonoEntity entity = result.entity;
                    if (((entity != null) && (entity.GetRuntimeID() != attacker.GetRuntimeID())) && (entity.IsActive() || (Singleton <RuntimeIDManager> .Instance.ParseCategory(entity.GetRuntimeID()) == 4)))
                    {
                        switch (Singleton <RuntimeIDManager> .Instance.ParseCategory(entity.GetRuntimeID()))
                        {
                        case 3:
                        case 4:
                        case 6:
                        case 7:
                            if (Singleton <LevelManager> .Instance.gameMode.IsEnemy(attacker.GetRuntimeID(), entity.GetRuntimeID()))
                            {
                                goto Label_0103;
                            }
                            break;
                        }
                    }
                    continue;
Label_0103:
                    collsion4          = new AttackResult.HitCollsion();
                    collsion4.hitDir   = result.hitForward;
                    collsion4.hitPoint = result.hitPoint;
                    AttackResult.HitCollsion hitCollision = collsion4;
                    SendHitEvent(attacker.GetRuntimeID(), entity.GetRuntimeID(), attackName, hitCollision, null, false, MPEventDispatchMode.CheckRemoteMode);
                }
                return;

            case 4:
                foreach (CollisionResult result2 in list)
                {
                    BaseMonoEntity entity2 = result2.entity;
                    if (((entity2 != null) && (entity2.GetRuntimeID() != attacker.GetRuntimeID())) && entity2.IsActive())
                    {
                        switch (Singleton <RuntimeIDManager> .Instance.ParseCategory(entity2.GetRuntimeID()))
                        {
                        case 3:
                        case 4:
                        case 6:
                            if (Singleton <LevelManager> .Instance.gameMode.IsEnemy(attacker.GetRuntimeID(), entity2.GetRuntimeID()))
                            {
                                goto Label_021F;
                            }
                            break;
                        }
                    }
                    continue;
Label_021F:
                    collsion4          = new AttackResult.HitCollsion();
                    collsion4.hitDir   = result2.hitForward;
                    collsion4.hitPoint = result2.hitPoint;
                    AttackResult.HitCollsion collsion2 = collsion4;
                    SendHitEvent(attacker.GetRuntimeID(), entity2.GetRuntimeID(), attackName, collsion2, null, false, MPEventDispatchMode.CheckRemoteMode);
                }
                return;

            case 7:
                foreach (CollisionResult result3 in list)
                {
                    BaseMonoEntity entity3 = result3.entity;
                    if (((entity3 != null) && (entity3.GetRuntimeID() != attacker.GetRuntimeID())) && entity3.IsActive())
                    {
                        switch (Singleton <RuntimeIDManager> .Instance.ParseCategory(entity3.GetRuntimeID()))
                        {
                        case 3:
                        case 4:
                        case 6:
                            if (Singleton <LevelManager> .Instance.gameMode.IsEnemy(attacker.GetRuntimeID(), entity3.GetRuntimeID()))
                            {
                                goto Label_033F;
                            }
                            break;
                        }
                    }
                    continue;
Label_033F:
                    collsion4          = new AttackResult.HitCollsion();
                    collsion4.hitDir   = result3.hitForward;
                    collsion4.hitPoint = result3.hitPoint;
                    AttackResult.HitCollsion collsion3 = collsion4;
                    SendHitEvent(attacker.GetRuntimeID(), entity3.GetRuntimeID(), attackName, collsion3, null, false, MPEventDispatchMode.CheckRemoteMode);
                }
                return;
            }
            throw new Exception("Invalid Type or State!");
        }
Esempio n. 8
0
        private static List <CollisionResult> FilterRealAttackeesByBodyParts(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, List <CollisionResult> results)
        {
            ConfigEntityAttackPattern pattern = patternConfig;
            Dictionary <BaseMonoEntity, List <CollisionResult> > dictionary = new Dictionary <BaseMonoEntity, List <CollisionResult> >();
            List <CollisionResult> list = new List <CollisionResult>();

            foreach (CollisionResult result in results)
            {
                BaseMonoEntity entity = result.entity;
                if (entity != null)
                {
                    if (entity is MonoBodyPartEntity)
                    {
                        BaseMonoEntity owner = ((MonoBodyPartEntity)entity).owner;
                        if (!dictionary.ContainsKey(owner))
                        {
                            dictionary[owner] = new List <CollisionResult>();
                        }
                        dictionary[owner].Add(result);
                    }
                    else
                    {
                        list.Add(result);
                    }
                }
            }
            List <CollisionResult> list3 = new List <CollisionResult>();

            foreach (CollisionResult result2 in list)
            {
                if (!dictionary.ContainsKey(result2.entity))
                {
                    list3.Add(result2);
                }
            }
            foreach (BaseMonoEntity entity3 in dictionary.Keys)
            {
                CollisionResult result3 = null;
                if (((pattern is FanCollisionDetect) || (pattern is CylinderCollisionDetect)) || ((pattern is CylinderCollisionDetectTargetLocked) || (pattern is RectCollisionDetect)))
                {
                    Vector3 b = new Vector3();
                    if (pattern is RectCollisionDetect)
                    {
                        RectCollisionDetect detect        = (RectCollisionDetect)pattern;
                        Vector3             vector2       = new Vector3(attacker.XZPosition.x, 0f, attacker.XZPosition.z);
                        Vector3             faceDirection = attacker.FaceDirection;
                        faceDirection.y = 0f;
                        b = vector2 + ((Vector3)(detect.OffsetZ * faceDirection.normalized));
                    }
                    else
                    {
                        b = attacker.XZPosition;
                    }
                    float maxValue = float.MaxValue;
                    foreach (CollisionResult result4 in dictionary[entity3])
                    {
                        float num2 = Vector3.Distance(result4.entity.XZPosition, b);
                        if (num2 < maxValue)
                        {
                            result3  = result4;
                            maxValue = num2;
                        }
                    }
                }
                else
                {
                    result3 = dictionary[entity3][0];
                }
                CollisionResult item = new CollisionResult(entity3, result3.hitPoint, result3.hitForward);
                list3.Add(item);
            }
            return(list3);
        }
Esempio n. 9
0
 public static void AnimatedColliderDetectAttack(string attackName, ConfigEntityAttackPattern patternConfig, IAttacker attacker, LayerMask layerMask)
 {