示例#1
0
    public Rigidbody GetNearUnit(UnitMechanics unit, Vector3 current_position)
    {
        Rigidbody        near_position = null;
        List <Transform> current_list;

        current_list = (unit is EarthUnit) ? mars_units : earth_units;
        if (current_list.Count == 0)
        {
            return(near_position);
        }

        //работа с листом проверка дистанции
        float      current_distance = Mathf.Infinity;
        float      distance         = 0f;
        RaycastHit hit;

        for (int i = 0; i < current_list.Count; ++i)
        {
            distance = (current_position - current_list[i].localPosition).sqrMagnitude;
            if (distance < current_distance &&
                Physics.Raycast(new Ray(current_position + Vector3.up * 5f, (current_list[i].localPosition - current_position)), out hit, 40f) &&
                hit.collider.CompareTag("Unit"))
            {
                near_position    = current_list[i].GetComponent <Rigidbody>();
                current_distance = distance;
            }
        }
        return(near_position);
    }
示例#2
0
    //получение ui для юнита
    public Transform GetUnitUI(UnitMechanics unit)
    {
        Transform ui;

        if (unit is EarthUnit)
        {
            ui = Instantiate(units_ui[0], unit.transform.position, Quaternion.Euler(90f, 0f, 0f),
                             GameObject.FindGameObjectWithTag("Scene Canvas").transform.Find("Units UI")).transform;

            EventTrigger.Entry entry = new EventTrigger.Entry
            {
                eventID = EventTriggerType.PointerDown
            };
            entry.callback.AddListener(delegate { PlayerSelectUnit(unit); });
            ui.GetComponent <EventTrigger>().triggers.Add(entry);
        }
        else
        {
            //пока назначение UI для юнита
            ui = Instantiate(units_ui[1], unit.transform.position, Quaternion.Euler(90f, 0f, 0f),
                             GameObject.FindGameObjectWithTag("Scene Canvas").transform.Find("Units UI")).transform;
        }
        ui.position = new Vector3(transform.position.x, 0.2f, transform.position.z);

        SetupUnitUI(ui);
        return(ui);
    }
示例#3
0
 //+++
 public void CheckSelectedUnit(UnitMechanics unit)
 {
     if (selected_unit == null)
     {
         return;
     }
     if (selected_unit == unit)
     {
         PlayerDeselectUnit();
     }
 }
示例#4
0
 //отметка занятых точек
 public void PointIsBooked(UnitMechanics unit, Transform point)
 {
     if (unit == null)
     {
         point.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0.4f);
     }
     else
     {
         point.GetComponent <Image>().color = new Color(0f, 1f, 0f, 0.4f);
     }
 }
示例#5
0
 public void ResetUnitList(UnitMechanics unit)
 {
     if (unit is EarthUnit)
     {
         earth_units.Remove(unit.transform);
     }
     else
     {
         mars_units.Remove(unit.transform);
     }
 }
示例#6
0
 //выбор юнита при нажатие на UI элемент - событие PointerDown
 public void PlayerSelectUnit(UnitMechanics unit)//+++
 {
     if (unit.UnitIsMoving())
     {
         return;
     }
     if (selected_unit != null)
     {
         PlayerDeselectUnit();
     }
     selected_unit = unit as EarthUnit;
     selector_ui.transform.position = unit.transform.localPosition + Vector3.up * 1f;
     //selector_ui.transform.localPosition += Vector3.up * 30f;//смещение по оси Y в зависимости от камеры
     selector_ui.SetActive(true);
     ChangeAvatarImage(unit.unit_type);
 }
示例#7
0
    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Unit"))
        {
            UnitMechanics current_unit = other.GetComponent <UnitMechanics>();
            if (current_unit is EarthUnit)
            {
                earth_units.Remove(current_unit.transform);
            }
            else
            {
                mars_units.Remove(current_unit.transform);
            }

            current_unit.RegistrationZone(null);
        }
    }
示例#8
0
    //возврат в пул объекта
    public void ReturnObjectInPool(Rigidbody obj, byte code_pool)
    {
        //стд. действия со всеми объектами
        obj.velocity        = Vector3.zero;
        obj.angularVelocity = Vector3.zero;
        obj.position        = Vector3.zero;
        obj.gameObject.SetActive(false);

        if (obj.CompareTag("Bullet"))
        {
            obj.transform.SetParent(pool_bullet);
            obj.GetComponent <TrailRenderer>().enabled = false;
        }
        else
        {
            UnitMechanics current_unit = obj.GetComponent <UnitMechanics>();
            Transform     current_pool = (current_unit is MarsUnit) ? pool_mars_units : pool_earth_units;
            switch (code_pool)
            {
            //!!!Пока реализуется только 1-ый пул!!!
            case (1):    //пул солдатов
                current_unit.transform.SetParent(current_pool.GetChild(code_pool - 1));
                break;

            case (2):    //пул офицеров
                break;

            case (3):    //пул лег. тех.
                break;

            case (4):    //пул танков
                break;

            case (5):    //пул пво
                break;

            default:
                break;
            }
            obj.useGravity = true;
        }
    }
示例#9
0
 public void RefreshCaptureZone(UnitMechanics unit)
 {
     if (unit is MarsUnit && capture != 0)
     {
         if (capture > 0)
         {
             capture -= 5;
         }
         else
         {
             capture = 0;
         }
         if (capture == 0)
         {
             transform.GetChild(0).gameObject.SetActive(false);
             for (int i = 0; i < zone_points.Length; ++i)
             {
                 zone_points[i].SetPointImage(null);
             }
         }
         player_controller.RefreshZoneFlag(zone_ui, (float)capture / 100);
     }
 }
示例#10
0
 //занять точку
 public void SetUnitInPoint(UnitMechanics unit)
 {
     current_unit = unit;
 }
示例#11
0
 //конструктор
 public PointInfo(Transform position)
 {
     point_position = position.position;
     current_unit   = null;
 }