private void Start()
    {
        GC_Army army = new GC_Army();

        if (gameObject.CompareTag("Town"))
        {
            var town = GetComponent <Town>();
            army = town.GetGarrison();
        }
        else if (gameObject.CompareTag("Army"))
        {
            if (GetComponent <OverworldArmy>().Army == null)
            {
                GetComponent <OverworldArmy>().Army = new GC_Army();
            }

            army = GetComponent <OverworldArmy>().Army;
        }

        foreach (var data in _Units)
        {
            var div = new GC_Division();
            for (int i = 0; i < data.Value; i++)
            {
                var unit = new GC_Unit();
                unit.Name = data.Key;
                unit.GenerateStats(UnitDatabase.Instance.GetUnit(data.Key).Stats);
                div.AddUnit(unit);
            }
            army.AddDivision(div);
        }
    }
示例#2
0
 public void AddDivision(GC_Division division)
 {
     if (_Divisions == null)
     {
         _Divisions = new List <GC_Division>();
     }
     _Divisions.Add(division);
     division.SetArmy(this);
 }
示例#3
0
    void Update()
    {
        if (Input.GetButtonDown("LMClick"))
        {
            _IsMouseDown = true;
            var pointerEventData = new PointerEventData(_EventSystem);
            pointerEventData.position = Input.mousePosition;

            var results = new List <RaycastResult>();
            _EventSystem.RaycastAll(pointerEventData, results);
            bool unitIsCommander   = false;
            bool somethingHappened = false;

            foreach (var result in results)
            {
                var obj = result.gameObject;
                if (obj.CompareTag("TownMenuArmyMovable"))
                {
                    _SelectedUnit         = obj.GetComponent <TownMenuArmyDivUnit>().ConnectedUnit;
                    _CurrentGrabbedObject = Instantiate(UnitTemplate, _Canvas);
                    _CurrentGrabbedObject.transform.Find("Name").GetComponent <Text>().text = _SelectedUnit.Name;
                    somethingHappened = true;

                    if (!Player.Instance.IsUnitStatsScreenOpen)
                    {
                        SceneManager.LoadScene("GC_UnitStats", LoadSceneMode.Additive);
                        Player.Instance.IsUnitStatsScreenOpen = true;
                    }
                    UnitStatsLoader.UnitToLoad = _SelectedUnit;
                    UnitStatsLoader.Reload();
                }
                if (obj.CompareTag("TownMenuArmyCommander"))
                {
                    unitIsCommander       = true;
                    _SelectedUnit         = obj.GetComponent <TownMenuArmyDivUnit>().ConnectedUnit;
                    _CurrentGrabbedObject = Instantiate(UnitTemplate, _Canvas);
                    _CurrentGrabbedObject.transform.Find("Name").GetComponent <Text>().text = _SelectedUnit.Name;
                    somethingHappened = true;

                    if (!Player.Instance.IsUnitStatsScreenOpen)
                    {
                        SceneManager.LoadScene("GC_UnitStats", LoadSceneMode.Additive);
                        Player.Instance.IsUnitStatsScreenOpen = true;
                    }
                    UnitStatsLoader.UnitToLoad = _SelectedUnit;
                    UnitStatsLoader.Reload();
                }
                if (obj.CompareTag("TownMenuArmyGeneral"))
                {
                    if (!Player.Instance.IsUnitStatsScreenOpen)
                    {
                        SceneManager.LoadScene("GC_UnitStats", LoadSceneMode.Additive);
                        Player.Instance.IsUnitStatsScreenOpen = true;
                    }
                    UnitStatsLoader.UnitToLoad = _CurrentArmy.GetGeneral();
                    UnitStatsLoader.Reload();
                }
            }
            foreach (var result in results)
            {
                var obj = result.gameObject;
                if (obj.CompareTag("TownMenuArmyInteract"))
                {
                    var div = obj.GetComponent <TownMenuArmyDivision>().ConnectedDivision;
                    if (!unitIsCommander)
                    {
                        div.RemoveUnit(_SelectedUnit);
                    }
                    else
                    {
                        div.RemoveCaptain();
                    }

                    if (div.GetCaptain() != null)
                    {
                        _DefaultDiv = div;
                    }
                    somethingHappened = true;
                }
            }
            if (somethingHappened)
            {
                TownMenuArmyLoader.Reload();
            }
        }
        if (Input.GetButtonUp("LMClick") && _IsMouseDown)
        {
            _IsMouseDown = false;

            if (_CurrentGrabbedObject)
            {
                var pointerEventData = new PointerEventData(_EventSystem);
                pointerEventData.position = Input.mousePosition;

                var results = new List <RaycastResult>();
                _EventSystem.RaycastAll(pointerEventData, results);
                bool hitBackground = false;

                foreach (var result in results)
                {
                    var obj = result.gameObject;
                    if (obj.CompareTag("TownMenuArmyInteract"))
                    {
                        obj.GetComponent <TownMenuArmyDivision>().ConnectedDivision.AddUnit(_SelectedUnit);
                        _SelectedUnit = null;
                        _DefaultDiv   = null;
                        Destroy(_CurrentGrabbedObject);
                        TownMenuArmyLoader.Reload();

                        return;
                    }
                    if (obj.CompareTag("TownMenuArmyGeneral"))
                    {
                        if (_CurrentArmy.GetGeneral() != null)
                        {
                            var div = new GC_Division();
                            div.AddUnit(_CurrentArmy.GetGeneral());
                            _CurrentArmy.AddDivision(div);
                        }
                        _CurrentArmy.SetGeneral(_SelectedUnit);
                        _SelectedUnit = null;
                        _DefaultDiv   = null;
                        Destroy(_CurrentGrabbedObject);
                        TownMenuArmyLoader.Reload();

                        return;
                    }
                    if (obj.CompareTag("TownMenuArmyCommander"))
                    {
                        var div = obj.GetComponent <TownMenuArmyDivUnit>().ConnectedUnit.Division;
                        div.AddUnit(_SelectedUnit);
                        div.SetCaptain(_SelectedUnit);

                        _SelectedUnit = null;
                        _DefaultDiv   = null;
                        Destroy(_CurrentGrabbedObject);
                        TownMenuArmyLoader.Reload();

                        return;
                    }
                    if (obj.CompareTag("Background"))
                    {
                        var div = new GC_Division();
                        div.AddUnit(_SelectedUnit);
                        _CurrentArmy.AddDivision(div);
                        hitBackground = true;
                    }
                }

                if (!hitBackground)
                {
                    if (_DefaultDiv != null)
                    {
                        _DefaultDiv.AddUnit(_SelectedUnit);
                    }
                    else
                    {
                        var div = new GC_Division();
                        div.AddUnit(_SelectedUnit);
                        _CurrentArmy.AddDivision(div);
                    }
                }

                Destroy(_CurrentGrabbedObject);
                _SelectedUnit = null;
                _DefaultDiv   = null;
                TownMenuArmyLoader.Reload();
            }
        }

        if (_IsMouseDown && _CurrentGrabbedObject)
        {
            _CurrentGrabbedObject.transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
        }
    }