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);
        }
    }
 public void RemoveCaptain()
 {
     if (_Units.Count > 0)
     {
         _Captain = _Units[0];
         _Units.RemoveAt(0);
         return;
     }
     _Captain = null;
     _Army.ReloadDivisions();
 }
Exemple #3
0
    public void Recruit(UnitData unitData)
    {
        var unit = new GC_Unit();

        unit.Name = unitData.Name;
        unit.GenerateStats(unitData.Stats);

        _RecruitmentQueue.Enqueue(unit);
        if (_RecruitsPerTurn.Count == 0 || _RecruitsPerTurn[_RecruitsPerTurn.Count - 1] == MaxRecruits)
        {
            _RecruitsPerTurn.Add(0);
        }
        _RecruitsPerTurn[_RecruitsPerTurn.Count - 1]++;
    }
    public void AddUnit(GC_Unit unit)
    {
        if (_Units == null)
        {
            _Units = new List <GC_Unit>();
        }
        if (_Captain != null)
        {
            _Units.Add(unit);
        }
        else
        {
            _Captain = unit;
        }

        unit.Division = this;
    }
 public void RemoveUnit(GC_Unit unit)
 {
     _Units.Remove(unit);
     unit.Division = null;
 }
 public void SetCaptain(GC_Unit unit)
 {
     _Units.Add(_Captain);
     _Captain = unit;
     _Units.Remove(unit);
 }
Exemple #7
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);
        }
    }
 public void SetGeneral(GC_Unit general)
 {
     _General = general;
 }