Пример #1
0
    private bool FindTarget()
    {
        List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList();
        List <Collider2D> availableTargets = new List <Collider2D>();

        foreach (Collider2D en in hit)
        {
            if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <ShipHumanoid>().whatAmI, whatUnitsToTarget) == true)
            {
                availableTargets.Add(en);
            }
        }

        /*for (int i = 0; i < availableTargets.Count; i++)
         * {
         *  Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude);
         * }*/

        availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList();
        if (availableTargets.Count > 0)
        {
            target = availableTargets[0].transform;

            return(true);
        }

        /*if (hit != null)
         * {
         *  target = hit.transform;
         *  return true;
         * }*/

        return(false);
    }
Пример #2
0
    protected bool FindTarget()
    {
        List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList();
        List <Collider2D> availableTargets = new List <Collider2D>();

        foreach (Collider2D en in hit)
        {
            try
            {
                if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <UnitHumanoid>().type, whatUnitsToTarget) == true)
                {
                    if ((en.transform.position - transform.position).magnitude <= targetCheckRadius && en.gameObject.activeInHierarchy)
                    {
                        availableTargets.Add(en);
                    }
                }
            }
            catch (System.Exception e)
            {
                Debug.Log(e);
                Debug.Log(hit + " | " + hit.Count);

                foreach (var obj in hit)
                {
                    Debug.Log(obj.name);
                }
            }
        }



        /*for (int i = 0; i < availableTargets.Count; i++)
         * {
         *  Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude);
         * }*/

        if (availableTargets.Count > 0)
        {
            availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList();

            target       = availableTargets[0].transform;
            targRb       = target.GetComponent <Rigidbody2D>();
            targHumanoid = target.GetComponent <UnitHumanoid>();

            return(true);
        }

        /*if (hit != null)
         * {
         *  target = hit.transform;
         *  return true;
         * }*/

        return(false);
    }
Пример #3
0
    public static bool CheckIfUnitIsInMask(UnitType unitLayer, UnitLayerMask mask)
    {
        if (CheckIfMaskHasMultiples(mask.mask) == true)
        {
            Debug.LogError("Mask has doubles");
            Debug.Break();
        }

        int layer    = 1 << (int)unitLayer;
        int maskTest = GetMask(mask.mask);

        int check = maskTest & layer;

        //Debug.Log("Layer: " + System.Convert.ToString(layer, 2).PadLeft(4, '0') + " Mask: " + System.Convert.ToString(maskTest, 2).PadLeft(4, '0') + " Check: " + System.Convert.ToString(check, 2).PadLeft(4, '0'));

        if (check > 0)
        {
            return(true);
        }

        return(false);
    }
Пример #4
0
 private void Test()
 {
     Debug.Log(UnitLayerMask.CheckIfUnitIsInMask(UnitType.Ship, whatUnitsToTarget));
 }
Пример #5
0
    protected bool FindTarget(float addTime = 0f)
    {
        if (Time.time > findTargetTimer)
        {
            List <Collider2D> hit = (Physics2D.OverlapCircleAll(transform.position, targetCheckRadius, whatIsTarget)).ToList();
            List <Collider2D> availableTargets = new List <Collider2D>();

            foreach (Collider2D en in hit)
            {
                if (en)
                {
                    try
                    {
                        if (UnitLayerMask.CheckIfUnitIsInMask(en.GetComponent <UnitHumanoid>().type, whatUnitsToTarget) == true)
                        {
                            if ((en.transform.position - transform.position).magnitude <= targetCheckRadius && en.gameObject.activeInHierarchy)
                            {
                                availableTargets.Add(en);
                            }
                        }
                    }
                    catch (System.Exception e)
                    {
                        Debug.Log(e);
                        Debug.Log(hit + " | " + hit.Count);

                        foreach (var obj in hit)
                        {
                            Debug.Log(obj.name);
                        }
                    }
                }
            }


            /*for (int i = 0; i < availableTargets.Count; i++)
             * {
             *  Debug.Log(" Index: " + i + " Name: " + hit[i].name + " Dist: " + (hit[i].transform.position - transform.position).magnitude);
             * }*/



            if (availableTargets.Count > 0)
            {
                Collider2D targetBase;
                if (targetBase = availableTargets.Find(obj => obj.GetComponent <Base>()))
                {
                    availableTargets.Remove(targetBase);
                }

                availableTargets = availableTargets.OrderBy(en => Mathf.Abs((en.transform.position - transform.position).magnitude)).ToList();

                if (targetBase)
                {
                    availableTargets.Add(targetBase);
                    Debug.Log("found base + base is target: " + availableTargets[availableTargets.Count - 1]);
                }

                target       = availableTargets[0].transform;
                targRb       = target.GetComponent <Rigidbody2D>();
                targHumanoid = target.GetComponent <UnitHumanoid>();

                foreach (WeaponBase wep in weapons)
                {
                    if (!wep.target)
                    {
                        if (UnitLayerMask.CheckIfUnitIsInMask(targHumanoid.type, wep.whatUnitsCanBeTargetted))
                        {
                            wep.target = target;
                        }
                    }
                }

                return(true);
            }

            /*if (hit != null)
             * {
             *  target = hit.transform;
             *  return true;
             * }*/

            findTargetTimer = targetCheckDelay + Time.time + addTime;
            return(false);
        }
        else
        {
            return(false);
        }
    }