Example #1
0
        public override void OnModeEnter(Mode mode)
        {
            MAnimal animal = mode.Animal;

            var pos = animal.Center;

            var AllColliders = Physics.OverlapSphere(pos, FindRadius, animal.HitLayer);

            Collider MinDistanceCol = null;
            float    Distance       = float.MaxValue;

            foreach (var col in AllColliders)
            {
                if (col.transform.root == animal.transform.root)
                {
                    continue;                                              //Don't Find yourself
                }
                var DistCol = Vector3.Distance(animal.Center, col.transform.position);

                if (Distance > DistCol)
                {
                    Distance       = DistCol;
                    MinDistanceCol = col;
                }
            }

            if (MinDistanceCol)
            {
                animal.StartCoroutine(MalbersTools.AlignLookAtTransform(animal.transform, MinDistanceCol.transform, AlignTime));
            }
        }
        /// <summary>
        /// Used for checking if the animal enables the action
        /// </summary>
        private void OnActionListener()
        {
            if (!oldAnimal)
            {
                return;                                        //Skip if there's no animal
            }
            if (ActionDelay > 0)
            {
                Invoke("OnActionEvent", ActionDelay);          //Invole the Event OnAction)
            }
            else
            {
                OnAction.Invoke(oldAnimal);                    //Invole the Event OnAction
            }

            if (Align && AlingPoint)
            {
                IEnumerator ICo = null;

                if (AlignLookAt)
                {
                    ICo = MalbersTools.AlignLookAtTransform(oldAnimal.transform, AlingPoint, AlignTime, AlignCurve);     //Align Look At the Zone
                }
                else
                {
                    ICo = MalbersTools.AlignTransformsC(oldAnimal.transform, AlingPoint, AlignTime, AlignPos, AlignRot, AlignCurve); //Aling Transform to another transform
                }

                StartCoroutine(ICo);
            }

            StartCoroutine(CheckForCollidersOff());
        }
Example #3
0
        private void PlayMode(MAnimalBrain brain)
        {
            switch (affect)
            {
            case Affected.Self:

                if (brain.Animal.Mode_TryActivate(modeID, AbilityID))
                {
                    if (lookAtAlign && brain.Target)
                    {
                        brain.StartCoroutine(MalbersTools.AlignLookAtTransform(brain.transform, brain.Target, alignTime));
                    }
                }
                break;

            case Affected.Target:
                if (brain.TargetAnimal && brain.TargetAnimal.Mode_TryActivate(modeID, AbilityID))
                {
                    if (lookAtAlign && brain.Target)
                    {
                        brain.StartCoroutine(MalbersTools.AlignLookAtTransform(brain.TargetAnimal.transform, brain.transform, alignTime));
                    }
                }
                break;

            default:
                break;
            }
        }
Example #4
0
        public void UsePickUpAnimations()
        {
            if (item.Align)
            {
                StartCoroutine(MalbersTools.AlignLookAtTransform(transform, item.transform, item.AlignTime));
                StartCoroutine(MalbersTools.AlignTransformRadius(transform, item.transform, item.AlignTime, item.AlignDistance));
            }

            // Debug.Log("UsePickUpAnimations");
            if (!animal.Mode_TryActivate(item.PickUpMode.ID, item.PickUpAbility)) //Means if the animal does not have a pick up Animation that calls the PickUP method then It will do it manually
            {
                PickUpItem();
            }
        }
Example #5
0
        public void UsePickUpAnimations()
        {
            if (item.Align)
            {
                StartCoroutine(MalbersTools.AlignLookAtTransform(transform, item.transform, item.AlignTime));
                StartCoroutine(MalbersTools.AlignTransformRadius(transform, item.transform, item.AlignTime, item.AlignDistance));
            }

            // Debug.Log(item.PickUpMode.ID+ "|||| "+ item.PickUpAbility);
            if (animal.Mode_TryActivate(item.PickUpMode.ID, item.PickUpAbility))
            {
                FocusedItem?.OnFocused.Invoke(false);
            }
            else
            {
                PickUpItem();
            }
        }
Example #6
0
        /// <summary>
        /// Used for checking if the animal enables the action
        /// </summary>
        private void OnActionListener()
        {
            if (!oldAnimal)
            {
                return;                                            //Skip if there's no animal
            }
            StartCoroutine(OnActionDelay(ActionDelay, oldAnimal)); //Invoke the Event OnAction

            if (Align && AlingPoint)
            {
                IEnumerator ICo = null;

                Vector3 AlingPosition = AlingPoint.position;

                if (AlingPoint2)                //In case there's
                {
                    AlingPosition = MalbersTools.ClosestPointOnLine(AlingPoint.position, AlingPoint2.position, oldAnimal.transform.position);
                }

                if (AlignLookAt)
                {
                    ICo = MalbersTools.AlignLookAtTransform(oldAnimal.transform, AlingPoint, AlignTime, AlignCurve);                //Align Look At the Zone
                    StartCoroutine(ICo);
                }
                else
                {
                    if (AlignPos)
                    {
                        StartCoroutine(MalbersTools.AlignTransform_Position(oldAnimal.transform, AlingPosition, AlignTime, AlignCurve));
                    }
                    if (AlignRot)
                    {
                        StartCoroutine(MalbersTools.AlignTransform_Rotation(oldAnimal.transform, AlingPoint.rotation, AlignTime, AlignCurve));
                    }
                }
            }
            StartCoroutine(CheckForCollidersOff());
        }
Example #7
0
        /// <summary>Aligns the Animal to the Align points of the Zone</summary>
        public virtual void AlignAnimal()
        {
            if (Align && AlingPoint && CurrentAnimal != null)
            {
                IEnumerator ICo = null;

                if (AlignLookAt)
                {
                    ICo = MalbersTools.AlignLookAtTransform(CurrentAnimal.transform, AlingPoint, AlignTime, AlignCurve);                //Align Look At the Zone
                    StartCoroutine(ICo);
                }
                else
                {
                    if (AlignPos)
                    {
                        Vector3 AlingPosition = AlingPoint.position;

                        if (AlingPoint2)                //In case there's a line ... move to the closest point between the two transforms
                        {
                            AlingPosition = MalbersTools.ClosestPointOnLine(AlingPoint.position, AlingPoint2.position, CurrentAnimal.transform.position);
                        }

                        if (DoubleSided)
                        {
                            Vector3 AlingPosOpposite = transform.InverseTransformPoint(AlingPosition);
                            AlingPosOpposite.z *= -1;
                            AlingPosOpposite    = transform.TransformPoint(AlingPosOpposite);

                            var Distance1 = Vector3.Distance(CurrentAnimal.transform.position, AlingPosition);
                            var Distance2 = Vector3.Distance(CurrentAnimal.transform.position, AlingPosOpposite);

                            if (Distance2 < Distance1)
                            {
                                StartCoroutine(MalbersTools.AlignTransform_Position(CurrentAnimal.transform, AlingPosOpposite, AlignTime, AlignCurve));
                            }
                            else
                            {
                                StartCoroutine(MalbersTools.AlignTransform_Position(CurrentAnimal.transform, AlingPosition, AlignTime, AlignCurve));
                            }
                        }
                        else
                        {
                            StartCoroutine(MalbersTools.AlignTransform_Position(CurrentAnimal.transform, AlingPosition, AlignTime, AlignCurve));
                        }
                    }
                    if (AlignRot)
                    {
                        Quaternion Side1     = AlingPoint.rotation;
                        Quaternion AnimalRot = CurrentAnimal.transform.rotation;

                        if (DoubleSided)
                        {
                            Quaternion Side2 = AlingPoint.rotation * Quaternion.Euler(0, 180, 0);

                            var Side1Angle = Quaternion.Angle(AnimalRot, Side1);
                            var Side2Angle = Quaternion.Angle(AnimalRot, Side2);

                            StartCoroutine(MalbersTools.AlignTransform_Rotation(CurrentAnimal.transform, Side1Angle < Side2Angle ? Side1 : Side2, AlignTime, AlignCurve));
                        }
                        else
                        {
                            StartCoroutine(MalbersTools.AlignTransform_Rotation(CurrentAnimal.transform, Side1, AlignTime, AlignCurve));
                        }
                    }
                }
            }
        }
Example #8
0
 private void StartAligning(Vector3 TargetCenter)
 {
     Debug.DrawLine(animal.Center, TargetCenter, Color.red, 3f);
     StartCoroutine(MalbersTools.AlignLookAtTransform(animal.transform, TargetCenter, AlignTime));
 }