Example #1
0
    public void SetArmyVictory()
    {
        state    = ArmyState.Victory;
        timeTick = 0;

        CalcDirection();
    }
Example #2
0
    public void SetArmyEscape()
    {
        state    = ArmyState.Escape;
        timeTick = 0;

        CalcDirection();
    }
Example #3
0
    public void InitArmyInfo(ArmyInfo ai)
    {
        armyInfo          = ai;
        armyInfo.armyCtrl = GetComponent <ArmyController>();

        SetArmyKingFlag();

        if (armyInfo.cityTo != -1)
        {
            if (pathfinding == null)
            {
                pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>();
            }
            SetRoute(pathfinding.GetRoute(armyInfo.pos, armyInfo.cityTo));
        }

        state    = (ArmyState)armyInfo.state;
        timeTick = armyInfo.timeTick;

        if (state == ArmyState.Garrison)
        {
            exSprite          moveSprite = GetComponent <exSprite>();
            exSpriteAnimation moveAnim   = GetComponent <exSpriteAnimation>();
            moveAnim.Stop();

            int frame = armyInfo.direction;
            if (frame == -1)
            {
                frame = 0;
            }
            moveAnim.SetFrame("ArmyGarrison", frame);

            Vector3 pos = flagPos[3 + frame];
            if (!armyInfo.isFlipped)
            {
                pos.x = -pos.x;
            }
            else
            {
                isHFlipped = true;
                moveSprite.HFlip();

                exSprite    flagSprite = flagCtrl.GetComponent <exSprite>();
                BoxCollider flagCol    = flagCtrl.GetComponent <BoxCollider>();
                flagSprite.HFlip();
                flagCol.center = new Vector3(-flagCol.center.x, flagCol.center.y, flagCol.center.z);
            }

            flagCtrl.localPosition = pos;
        }
        else
        {
            CalcDirection();
        }
    }
Example #4
0
        Squad GetOrCreateSquad(ArmyState army)
        {
            var firstFreeSquad = army.Squads.FirstOrDefault(s => s.Free);

            if (firstFreeSquad == null)
            {
                var newSquad = new Squad();
                army.Squads.Add(newSquad);
                return(newSquad);
            }
            return(firstFreeSquad);
        }
Example #5
0
    public void SetArmyGarrison()
    {
        state = ArmyState.Garrison;

        if (animName != "")
        {
            exSpriteAnimation moveAnim = GetComponent <exSpriteAnimation>();
            moveAnim.Stop();

            int frame = -1;

            if (animName == animNames[0] || animName == animNames[3] || animName == animNames[6])
            {
                frame = 0;
            }
            else if (animName == animNames[1] || animName == animNames[4] || animName == animNames[7])
            {
                frame = 1;
            }
            else if (animName == animNames[2] || animName == animNames[5] || animName == animNames[8])
            {
                frame = 2;
            }

            moveAnim.SetFrame("ArmyGarrison", frame);

            Vector3 pos = flagPos[3 + frame];

            if (!isHFlipped)
            {
                pos.x = -pos.x;
            }
            flagCtrl.localPosition = pos;

            animName = "";
        }
    }
Example #6
0
    public void SetArmyRunning()
    {
        state = ArmyState.Running;

        CalcDirection();
    }
Example #7
0
    void AttackCity(int cIdx)
    {
        CityInfo cInfo = Informations.Instance.GetCityInfo(cIdx);

        int result   = 0;
        int selfIdx  = 0;
        int enemyIdx = 0;

        if (cInfo.king != -1)
        {
            if (cInfo.king == Controller.kingIndex)
            {
                strCtrl.SetWarDialogue(cIdx, armyInfo);
                return;
            }
            else if (armyInfo.king == Controller.kingIndex)
            {
                strCtrl.SetWarDialogue(armyInfo, cIdx);
                return;
            }
        }
        else
        {
            result = 1;
        }

        while (result == 0)
        {
            GeneralInfo selfGeneral  = Informations.Instance.GetGeneralInfo(armyInfo.generals[selfIdx]);
            GeneralInfo enemyGeneral = Informations.Instance.GetGeneralInfo(cInfo.generals[enemyIdx]);

            int power1 = selfGeneral.level * 5 + selfGeneral.knightCur * 6 + selfGeneral.soldierCur * 3 + selfGeneral.strength * 2 + selfGeneral.healthCur + selfGeneral.manaCur / 2 + Random.Range(0, 20);
            int power2 = enemyGeneral.level * 5 + enemyGeneral.knightCur * 6 + enemyGeneral.soldierCur * 3 + enemyGeneral.strength * 2 + enemyGeneral.healthCur + enemyGeneral.manaCur / 2 + cInfo.defense / 10 + Random.Range(0, 20);

            if (power1 > power2)
            {
                WarResult(selfGeneral, enemyGeneral, power2);
                enemyIdx++;
            }
            else
            {
                WarResult(enemyGeneral, selfGeneral, power1);
                selfIdx++;
            }

            if (selfIdx >= armyInfo.generals.Count)
            {
                result = 2;
            }
            else if (enemyIdx >= cInfo.generals.Count)
            {
                result = 1;
            }
        }

        if (result == 1)
        {
            for (int i = 0; i < armyInfo.generals.Count; i++)
            {
                Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).prisonerIdx = -1;
                Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).city        = cIdx;
                Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).escape      = 0;
                CheckIsLevelUp(Informations.Instance.GetGeneralInfo(armyInfo.generals[i]));
            }

            int count = cInfo.generals.Count;
            for (int i = count - 1; i >= 0; i--)
            {
                if (Informations.Instance.GetGeneralInfo(cInfo.generals[i]).prisonerIdx == armyInfo.king)
                {
                    cInfo.prisons.Add(cInfo.generals[i]);
                    Informations.Instance.GetKingInfo(cInfo.king).generals.Remove(cInfo.generals[i]);

                    if (cInfo.generals[i] == Informations.Instance.GetKingInfo(cInfo.king).generalIdx)
                    {
                        SetKingOver(cInfo.king);
                    }

                    cInfo.generals.RemoveAt(i);
                }
            }

            count = cInfo.generals.Count;
            if (count > 0)
            {
                SetEscapeFromCity(cIdx);
            }

            //cInfo.generals.Clear();
            cInfo.generals.AddRange(armyInfo.generals);
            cInfo.prefect = armyInfo.commander;

            for (int i = 0; i < cInfo.prisons.Count; i++)
            {
                Informations.Instance.GetGeneralInfo(cInfo.prisons[i]).prisonerIdx = armyInfo.king;
            }

            for (int i = 0; i < armyInfo.prisons.Count; i++)
            {
                Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).city = cIdx;
            }

            cInfo.prisons.AddRange(armyInfo.prisons);
            cInfo.money += armyInfo.money;

            Informations.Instance.armys.Remove(armyInfo);
            Destroy(armyInfo.armyCtrl.gameObject);

            if (cInfo.king != -1)
            {
                KingInfo kInfo = Informations.Instance.GetKingInfo(cInfo.king);
                kInfo.cities.Remove(cIdx);
            }

            cInfo.king = armyInfo.king;
            cityFlagsCtrl.SetFlag(cIdx);
            Informations.Instance.GetKingInfo(armyInfo.king).cities.Add(cIdx);
        }
        else if (result == 2)
        {
            for (int i = 0; i < cInfo.generals.Count; i++)
            {
                Informations.Instance.GetGeneralInfo(cInfo.generals[i]).prisonerIdx = -1;
                CheckIsLevelUp(Informations.Instance.GetGeneralInfo(cInfo.generals[i]));
            }

            int count = armyInfo.generals.Count;
            for (int i = count - 1; i >= 0; i--)
            {
                int gIdx = armyInfo.generals[i];
                if (Informations.Instance.GetGeneralInfo(gIdx).prisonerIdx == cInfo.king)
                {
                    if (gIdx == Informations.Instance.GetKingInfo(armyInfo.king).generalIdx)
                    {
                        SetKingOver(armyInfo.king);
                    }

                    cInfo.prisons.Add(gIdx);
                    Informations.Instance.GetGeneralInfo(gIdx).city = cIdx;

                    Informations.Instance.GetKingInfo(armyInfo.king).generals.Remove(gIdx);
                    armyInfo.generals.RemoveAt(i);
                }
            }

            if (armyInfo.generals.Count == 0)
            {
                for (int i = 0; i < armyInfo.prisons.Count; i++)
                {
                    Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).prisonerIdx = cInfo.king;
                    Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).city        = cIdx;
                }

                cInfo.prisons.AddRange(armyInfo.prisons);
                armyInfo.prisons.Clear();

                cInfo.money += armyInfo.money;

                state = ArmyState.Escape;
                Destroy(armyInfo.armyCtrl.gameObject);
                Informations.Instance.armys.Remove(armyInfo);
            }
            else
            {
                FindArmyCommander();

                int tmp = armyInfo.cityTo;
                armyInfo.cityTo   = armyInfo.cityFrom;
                armyInfo.cityFrom = tmp;

                if (pathfinding == null)
                {
                    pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>();
                }

                SetRoute(pathfinding.GetRoute(transform.position, armyInfo.cityTo));

                armyInfo.armyCtrl.SetArmyEscape();
            }
        }
    }