Пример #1
0
    public void SetInfo(bool isWithFire, WarSceneController.WhichSide side, Vector3 positionStart, SolidersController soliderCtrl, GeneralController generalCtrl)
    {
        this.isWithFire  = isWithFire;
        this.side        = side;
        this.soliderCtrl = soliderCtrl;
        this.generalCtrl = generalCtrl;

        this.transform.localPosition = positionStart;
    }
Пример #2
0
 public void AddBackSolider(WhichSide side, SolidersController sCtrl)
 {
     if (side == WhichSide.Left)
     {
         leftBackSoliders.Add(sCtrl);
     }
     else
     {
         rightBackSoliders.Add(sCtrl);
     }
 }
Пример #3
0
    void Init()
    {
        transform.parent           = MagicController.Instance.magicRoot;
        transform.localPosition    = Vector3.zero;
        transform.localEulerAngles = Vector3.zero;
        transform.localScale       = Vector3.one;

        warCtrl        = MagicController.Instance.warCtrl;
        side           = MagicController.Instance.GetMagicSide();
        enemySide      = MagicController.Instance.GetMagicEnemySide();
        enemyCenterPos = warCtrl.GetArmyCentrePoint(enemySide);

        List <SolidersController> listSoldier = new List <SolidersController>();

        for (int i = 0; i < level; i++)
        {
            SolidersController sCtrl = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
            Vector3            pos;
            if (sCtrl != null && !listSoldier.Contains(sCtrl))
            {
                pos = sCtrl.transform.localPosition;
                listSoldier.Add(sCtrl);
            }
            else
            {
                if (!isHitGeneral && Random.Range(0, 100) < 40)
                {
                    isHitGeneral = true;
                    GeneralController gCtrl;
                    if (enemySide == WarSceneController.WhichSide.Left)
                    {
                        gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                    }
                    else
                    {
                        gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                    }
                    pos = gCtrl.transform.localPosition;
                }
                else
                {
                    pos    = enemyCenterPos;
                    pos.x += Random.Range(-180, 180);
                    pos.y += Random.Range(-100, 100);
                }
            }

            GameObject go = InstantiateOneGO(tornadoName, pos, Vector3.one, Vector3.zero);
            go.SetActive(false);
            listTornado.Add(go);
        }
    }
Пример #4
0
    void GenerateLightning()
    {
        for (int i = 0; i < level * 10; i++)
        {
            GameObject go = (GameObject)Instantiate(Resources.Load(prefabName));
            go.transform.parent           = transform;
            go.transform.localEulerAngles = WarSceneController.manEulerAngles;
            go.transform.localScale       = WarSceneController.manScaleRight;

            Vector3            pos   = Vector3.zero;
            SolidersController sCtrl = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
            if (sCtrl != null && !soliderHit.Contains(sCtrl))
            {
                pos = sCtrl.transform.localPosition;
                soliderHit.Add(sCtrl);
            }
            else
            {
                if (!hitGeneral && Random.Range(0, 100) < 20)
                {
                    hitGeneral = true;

                    if (MagicController.Instance.GetMagicEnemySide() == WarSceneController.WhichSide.Left)
                    {
                        gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                    }
                    else
                    {
                        gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                    }
                    pos = gCtrl.transform.localPosition;
                }
                else
                {
                    pos = new Vector3(armyCenterPoint.x + Random.Range(-150, 150),
                                      armyCenterPoint.y + Random.Range(-80, 80),
                                      5);
                }
            }
            pos.z = 5;
            go.transform.localPosition = pos;

            go.SetActive(false);
            listLightning.Add(go);
        }
    }
Пример #5
0
    void Init()
    {
        transform.parent           = MagicController.Instance.magicRoot;
        transform.localPosition    = Vector3.zero;
        transform.localEulerAngles = Vector3.zero;
        transform.localScale       = Vector3.one;

        warCtrl          = MagicController.Instance.warCtrl;
        side             = MagicController.Instance.GetMagicSide();
        enemySide        = MagicController.Instance.GetMagicEnemySide();
        enemyCenterPoint = warCtrl.GetArmyCentrePoint(enemySide);

        Vector3 scale;
        Vector3 juShiDownOff;
        Vector3 juShiBasePos;
        float   juShiXStep;

        if (side == WarSceneController.WhichSide.Left)
        {
            scale        = WarSceneController.manScaleLeft;
            juShiDownOff = juShiDownOffLeft;
            juShiBasePos = juShiBasePosLeft;
            juShiXStep   = juShiXStepLeft;
        }
        else
        {
            scale        = WarSceneController.manScaleRight;
            juShiDownOff = juShiDownOffRight;
            juShiBasePos = juShiBasePosRight;
            juShiXStep   = juShiXStepRight;
        }

        for (int i = 0; i < levelNum[level - 1]; i++)
        {
            int     col = i / 6;
            int     row = i % 6;
            Vector3 pos = new Vector3(juShiBasePos.x + juShiXStep * col,
                                      juShiBasePos.y + juShiYStep * row,
                                      juShiBasePos.z);
            GameObject go = InstantiateOneGO(juShiName, pos, scale, WarSceneController.manEulerAngles);
            listJuShi.Add(go);

            List <SolidersController> listSolidersAdded = new List <SolidersController>();

            SolidersController sCtrl = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
            if (sCtrl != null && !listSolidersAdded.Contains(sCtrl))
            {
                listSolidersAdded.Add(sCtrl);

                pos   = sCtrl.transform.localPosition;
                pos.z = 0;
                pos  += juShiDownOff;
            }
            else
            {
                if (!hitGeneral && Random.Range(0, 100) < 40)
                {
                    hitGeneral = true;
                    GeneralController gCtrl;
                    if (enemySide == WarSceneController.WhichSide.Left)
                    {
                        gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                    }
                    else
                    {
                        gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                    }
                    pos   = gCtrl.transform.localPosition;
                    pos.z = 0;
                    pos  += juShiDownOff;
                }
                else
                {
                    pos = new Vector3(enemyCenterPoint.x + Random.Range(-150, 150),
                                      enemyCenterPoint.y + Random.Range(-80, 80),
                                      -150);
                }
            }

            go = InstantiateOneGO(juShiDownName, pos, scale, WarSceneController.manEulerAngles);
            go.SetActive(false);
            go.GetComponent <MagicJuShiDown>().SetInfo(pos, pos - juShiDownOff, this);
            listJuShiDown.Add(go);
        }
    }
Пример #6
0
    void Init()
    {
        transform.parent           = MagicController.Instance.magicRoot;
        transform.localPosition    = Vector3.zero;
        transform.localEulerAngles = Vector3.zero;
        transform.localScale       = Vector3.one;

        warCtrl        = MagicController.Instance.warCtrl;
        side           = MagicController.Instance.GetMagicSide();
        enemySide      = MagicController.Instance.GetMagicEnemySide();
        enemyCenterPos = warCtrl.GetArmyCentrePoint(enemySide);

        Vector3 posGeneral;

        if (side == WarSceneController.WhichSide.Left)
        {
            posGeneral = warCtrl.leftGeneral.transform.localPosition;
        }
        else
        {
            posGeneral = warCtrl.rightGeneral.transform.localPosition;
        }
        yellowDragon = InstantiateOneGO(yellowDragonName, posGeneral, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
        yellowDragon.SetActive(false);

        particalGO = (GameObject)Instantiate(Resources.Load(particalName1));
        particalGO.transform.parent        = transform;
        particalGO.transform.localPosition = posGeneral;

        for (int i = 0; i < 10; i++)
        {
            Vector3 posUp = posGeneral;
            posUp.x += Random.Range(-30, 30);
            GameObject go = InstantiateOneGO(fireUpName, posUp, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
            go.SetActive(false);
            listFireUp.Add(go);

            go = InstantiateOneGO(fireDownName, Vector3.zero, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
            go.SetActive(false);
            listFireDown.Add(go);
            MagicFireDown      fireDownScript = go.GetComponent <MagicFireDown>();
            SolidersController sCtrl          = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
            Vector3            pos;
            if (sCtrl != null)
            {
                pos   = sCtrl.transform.localPosition;
                pos.z = -150;
            }
            else
            {
                if (!hitGeneral && Random.Range(0, 100) < 20)
                {
                    hitGeneral = true;
                    GeneralController gCtrl;
                    if (enemySide == WarSceneController.WhichSide.Left)
                    {
                        gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                    }
                    else
                    {
                        gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                    }
                    pos   = gCtrl.transform.localPosition;
                    pos.z = -150;
                }
                else
                {
                    pos = new Vector3(enemyCenterPos.x + Random.Range(-150, 150),
                                      enemyCenterPos.y + Random.Range(-80, 80),
                                      -150);
                }
            }

            fireDownScript.SetInfo(pos, this);

            go = InstantiateOneGO(fireExplodeName, Vector3.zero, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
            go.SetActive(false);
            listFireExplode.Add(go);
        }
    }
Пример #7
0
    void OnFormation5(int sType, int sNum, int kNum)
    {
        int num = sNum + kNum;

        int [] rowNum = new int[20];
        int[,] rows = new int[20, 3];

        while (num > 0)
        {
            for (int i = 0; i < 20; i++)
            {
                rowNum[i]++;
                num--;
                if (num == 0)
                {
                    break;
                }
            }
        }

        for (int i = 0; i < 20; i++)
        {
            int numCal = rowNum[i];
            int count  = 1;
            for (int j = 0; j < 2; j++)
            {
                if (numCal > count * count)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                count = 2;
            }
            for (int n = 0; n < 3; n++)
            {
                for (int m = 0; m < count; m++)
                {
                    rows[i, n]++;
                    numCal--;
                    if (numCal == 0)
                    {
                        break;
                    }
                }
                if (numCal == 0)
                {
                    break;
                }
            }
        }

        int     soliderIndex = 0;
        int     knightNum    = kNum;
        int     soliderNum   = sNum;
        Vector3 posBase      = Vector3.zero;

        Vector2[] off = new Vector2[20] {
            new Vector2(-3, 0), new Vector2(-3, 4), new Vector2(-3, -4), new Vector2(-3, 8), new Vector2(-3, -8),
            new Vector2(1, 0), new Vector2(1, 4), new Vector2(1, -4), new Vector2(1, 8), new Vector2(1, -8),
            new Vector2(5, 0), new Vector2(5, 4), new Vector2(5, -4), new Vector2(5, 8), new Vector2(5, -8),
            new Vector2(9, 0), new Vector2(9, 4), new Vector2(9, -4), new Vector2(9, 8), new Vector2(9, -8)
        };
        int   xBase  = -600;
        float xSpace = 3.5f * (int)WarSceneController.locationStepX;
        float ySpace = 2.5f * (int)WarSceneController.locationStepY;

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace = 3.5f * (int)WarSceneController.locationStepX;
            xBase  = -600;
        }
        else
        {
            xBase  = 600;
            xSpace = -3.5f * (int)WarSceneController.locationStepX;
        }

        for (int i = 0; i < 20; i++)
        {
            posBase = new Vector3(xBase + off[i].x * xSpace, off[i].y * ySpace, 0);

            for (int n = 0; n < 3; n++)
            {
                for (int m = 0; m < rows[i, n]; m++)
                {
                    Vector3 pos = Vector3.zero;
                    if (m % 2 == 0)
                    {
                        pos = new Vector3(posBase.x + n * xSpace, posBase.y - ySpace * m / 2, 0);
                    }
                    else
                    {
                        pos = new Vector3(posBase.x + n * xSpace, posBase.y + ySpace * ((int)(m + 1) / 2), 0);
                    }

                    if (soliderNum > 0)
                    {
                        soliderNum--;
                        SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                        warCtrl.AddSolider(side, sCtrl);
                        if (i < 4)
                        {
                            warCtrl.AddBackSolider(side, sCtrl);
                        }
                        else
                        {
                            warCtrl.AddFrontSolider(side, sCtrl);
                        }
                    }
                    else if (knightNum > 0)
                    {
                        knightNum--;
                        SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                        warCtrl.AddSolider(side, sCtrl);
                        if (i < 4)
                        {
                            warCtrl.AddBackSolider(side, sCtrl);
                        }
                        else
                        {
                            warCtrl.AddFrontSolider(side, sCtrl);
                        }
                    }
                    soliderIndex++;
                }
            }
        }
    }
Пример #8
0
    void OnFormation3(int sType, int sNum, int kNum)
    {
        int num      = sNum + kNum;
        int frontNum = Mathf.CeilToInt(num * 7 / 10f);
        int backNum  = Mathf.FloorToInt(num * 3 / 10f);
        int fRowNum  = 0;
        int bRowNum  = 0;

        int[] fRows = new int[5];
        int[] bRows = new int[3];

        fRowNum = Mathf.CeilToInt((float)frontNum / 14);
        for (int i = 0; i < fRowNum - 1; i++)
        {
            fRows[i] = 14;
        }
        if (fRowNum > 0)
        {
            fRows[fRowNum - 1] = frontNum % 14;
            if (fRows[fRowNum - 1] == 0)
            {
                fRows[fRowNum - 1] = 14;
            }
        }

        bRowNum = Mathf.CeilToInt((float)backNum / 14);
        for (int i = 0; i < bRowNum - 1; i++)
        {
            bRows[i] = 14;
        }
        if (bRowNum > 0)
        {
            bRows[bRowNum - 1] = backNum % 14;
            if (bRows[bRowNum - 1] == 0)
            {
                bRows[bRowNum - 1] = 14;
            }
        }

        int     soliderIndex = 0;
        int     knightNum    = kNum;
        int     soliderNum   = frontNum - knightNum;
        Vector3 posBase      = Vector3.zero;
        int     xSpace       = 4 * (int)WarSceneController.locationStepX;
        int     ySpace       = 3 * (int)WarSceneController.locationStepY;

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }

        for (int i = 0; i < fRowNum; i++)
        {
            for (int j = 0; j < fRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * (j / 2 + i), posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * (j / 2 + i), posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        soliderNum = backNum - knightNum;
        if (side == WarSceneController.WhichSide.Left)
        {
            posBase = new Vector3(-600 - 3 * xSpace, 0, 0);
        }
        else
        {
            posBase = new Vector3(600 - 3 * xSpace, 0, 0);
        }
        for (int i = 0; i < bRowNum; i++)
        {
            for (int j = 0; j < bRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * (j / 2 + i), posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * (j / 2 + i), posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }
    }
Пример #9
0
    void OnFormation2(int sType, int sNum, int kNum)
    {
        int num      = sNum + kNum;
        int frontNum = Mathf.CeilToInt(num * 4 / 10f);
        int backNum  = Mathf.FloorToInt(num * 6 / 10f);
        int fRowNum  = 0;
        int bRowNum1 = 0;
        int bRowNum2 = 0;

        int[] fRows  = new int[4];
        int[] bRows1 = new int[4];
        int[] bRows2 = new int[4];

        if (num == 1)
        {
            frontNum = 0;
        }

        if (frontNum <= 12)
        {
            fRowNum = frontNum / 4;
            if (fRowNum == 0)
            {
                if (frontNum % 4 > 0)
                {
                    fRowNum  = 1;
                    fRows[0] = frontNum;
                }
            }
            else if (fRowNum == 1)
            {
                fRows[0] = 4;
                if (frontNum % 4 > 0)
                {
                    fRowNum  = 2;
                    fRows[1] = frontNum % 4;
                }
            }
            else
            {
                fRows[0] = 4;
                fRows[1] = 4;
                fRows[2] = frontNum % 8;
                if (frontNum % 4 > 0)
                {
                    fRowNum++;
                }
            }
        }
        else
        {
            fRowNum = 4;
            int left = frontNum % 4;
            int row  = frontNum / 4;
            for (int i = 0; i < 4; i++)
            {
                if (i < left)
                {
                    fRows[i] = row + 1;
                }
                else
                {
                    fRows[i] = row;
                }
            }
        }

        int backNumCal = backNum + 1;
        int currRow    = 0;

        while (backNumCal > 0)
        {
            currRow = 0;
            while (currRow < 3 && bRows1[currRow] - bRows1[currRow + 1] > 2)
            {
                currRow++;
            }
            if (currRow == 3 && bRows1[2] - bRows1[3] <= 2)
            {
                currRow = 0;
            }
            if (currRow + 1 > bRowNum1)
            {
                bRowNum1 = currRow + 1;
            }
            bRows1[currRow]++;
            backNumCal--;
            if (backNumCal == 0)
            {
                break;
            }

            currRow = 0;
            while (currRow < 3 && bRows2[currRow] - bRows2[currRow + 1] > 2)
            {
                currRow++;
            }
            if (currRow == 3 && bRows2[2] - bRows2[3] <= 2)
            {
                currRow = 0;
            }
            if (currRow + 1 > bRowNum2)
            {
                bRowNum2 = currRow + 1;
            }
            bRows2[currRow]++;
            backNumCal--;
            if (backNumCal == 0)
            {
                break;
            }
        }

        int     soliderIndex = 0;
        int     knightNum    = kNum;
        int     soliderNum   = frontNum - knightNum;
        Vector3 posBase      = Vector3.zero;
        int     xSpace       = 4 * (int)WarSceneController.locationStepX;
        int     ySpace       = 4 * (int)WarSceneController.locationStepY;

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + 6 * xSpace, 0, 0);
        }
        else
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + 6 * xSpace, 0, 0);
        }

        for (int i = 0; i < fRowNum; i++)
        {
            for (int j = 0; j < fRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        soliderNum = (backNum + 1) / 2 + (backNum + 1) % 2 - knightNum;
        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }

        for (int i = 0; i < bRowNum1; i++)
        {
            for (int j = 0; j < bRows1[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600, 0, 0);
        }
        else
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600, 0, 0);
        }

        for (int i = 0; i < bRowNum2; i++)
        {
            for (int j = 0; j < bRows2[i]; j++)
            {
                if (i == 0 && j == 0)
                {
                    continue;
                }

                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                else
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }
    }
Пример #10
0
    void OnFormation1(int sType, int sNum, int kNum)
    {
        int num      = sNum + kNum;
        int frontNum = Mathf.CeilToInt(num * 7 / 10f);
        int backNum  = Mathf.FloorToInt(num * 3 / 10f);
        int fRowNum  = 0;
        int bRowNum  = 0;

        int[] fRows = new int[7];
        int[] bRows = new int[3];

        if (frontNum <= 12)
        {
            fRowNum = frontNum / 4;
            if (fRowNum == 0)
            {
                if (frontNum % 4 > 0)
                {
                    fRowNum  = 1;
                    fRows[0] = frontNum;
                }
            }
            else if (fRowNum == 1)
            {
                fRows[0] = 4;
                if (frontNum % 4 > 0)
                {
                    fRowNum  = 2;
                    fRows[1] = frontNum % 4;
                }
            }
            else
            {
                fRows[0] = 4;
                fRows[1] = 4;
                fRows[2] = frontNum % 8;
                if (frontNum % 4 > 0)
                {
                    fRowNum++;
                }
            }
        }
        else if (frontNum >= 49)
        {
            fRowNum = 7;
            int left = frontNum % 7;
            int row  = frontNum / 7;
            for (int i = 0; i < 7; i++)
            {
                if (i < left)
                {
                    fRows[i] = row + 1;
                }
                else
                {
                    fRows[i] = row;
                }
            }
        }
        else
        {
            for (int i = 4; i <= 7; i++)
            {
                if (i * i > frontNum && i * (i - 1) <= frontNum)
                {
                    fRowNum = i;
                    int left = frontNum % (i - 1);
                    int row  = frontNum / (i - 1);
                    for (int j = 0; j < i - 1; j++)
                    {
                        fRows[j] = row;
                    }
                    fRows[i - 1] = left;
                }
                else if (i * i <= frontNum && i * (i + 1) > frontNum)
                {
                    fRowNum = i;
                    int left = frontNum % i;
                    int row  = frontNum / i;
                    for (int j = 0; j < i; j++)
                    {
                        if (j < left)
                        {
                            fRows[j] = row + 1;
                        }
                        else
                        {
                            fRows[j] = row;
                        }
                    }
                }
            }
        }

        if (backNum <= 12)
        {
            bRowNum = backNum / 4;
            if (bRowNum == 0)
            {
                if (backNum % 4 > 0)
                {
                    bRowNum  = 1;
                    bRows[0] = backNum;
                }
            }
            else if (bRowNum == 1)
            {
                bRows[0] = 4;
                if (backNum % 4 > 0)
                {
                    bRowNum  = 2;
                    bRows[1] = backNum % 4;
                }
            }
            else
            {
                bRows[0] = 4;
                bRows[1] = 4;
                bRows[2] = backNum % 8;
                if (backNum % 4 > 0)
                {
                    bRowNum++;
                }
            }
        }
        else
        {
            bRowNum = 3;
            int left = backNum % 3;
            int row  = backNum / 3;
            for (int i = 0; i < 3; i++)
            {
                if (i < left)
                {
                    bRows[i] = row + 1;
                }
                else
                {
                    bRows[i] = row;
                }
            }
        }

        int     soliderIndex = 0;
        int     knightNum    = kNum;
        int     soliderNum   = frontNum - knightNum;
        Vector3 posBase      = Vector3.zero;
        int     xSpace       = 4 * (int)WarSceneController.locationStepX;
        int     ySpace       = 4 * (int)WarSceneController.locationStepY;

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }

        for (int i = 0; i < fRowNum; i++)
        {
            for (int j = 0; j < fRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }

        for (int i = 0; i < bRowNum; i++)
        {
            for (int j = 0; j < bRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * ((int)(j + 1) / 2), 0);
                }

                if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                else
                {
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }
    }
Пример #11
0
    SolidersController SetSolider(int soliderType, Vector3 pos, int index, bool isKnight)
    {
        string sName = "Soliders/";

        if (side == WarSceneController.WhichSide.Left)
        {
            sName += "Red/";
        }
        else
        {
            sName += "Green/";
        }

        if (!isKnight)
        {
            if (soliderType < 9)
            {
                sName += "Solider00" + (soliderType + 1);
            }
            else
            {
                sName += "Solider0" + (soliderType + 1);
            }
        }
        else
        {
            if (soliderType < 9)
            {
                sName += "Knight00" + (soliderType + 1);
            }
            else
            {
                sName += "Knight0" + (soliderType + 1);
            }
        }

        GameObject go = (GameObject)Instantiate(Resources.Load(sName));

        go.transform.parent = transform;

        if (isKnight && soliderType != 6)
        {
            Transform horse = (Transform)Instantiate(horsePrefab);
            horse.gameObject.AddComponent <SolidersHorse>();
            horse.gameObject.SetActive(false);
            horse.parent        = go.transform;
            horse.localPosition = Vector3.zero;
            horse.localScale    = Vector3.one;
        }

        go.transform.localPosition = pos;
        go.transform.eulerAngles   = WarSceneController.manEulerAngles;

        if (side == WarSceneController.WhichSide.Left)
        {
            go.transform.localScale = WarSceneController.manScaleLeft;
        }
        else
        {
            go.transform.localScale = WarSceneController.manScaleRight;
        }

        SolidersController soliderCtrl = go.AddComponent <SolidersController>();

        Transform mapFrame = GameObject.Find("Map").transform;
        Transform mapPoint = (Transform)Instantiate(mapPointPrefab);

        mapPoint.parent        = mapFrame;
        mapPoint.localPosition = Vector3.zero;

        soliderCtrl.SetMapPoint(mapPoint);
        soliderCtrl.SetSide(side);
        soliderCtrl.SetType(soliderType);
        soliderCtrl.SetIsKnight(isKnight);

        if (side == WarSceneController.WhichSide.Left)
        {
            soliderCtrl.SetIndex(-(index + 1));
        }
        else
        {
            soliderCtrl.SetIndex(index + 1);
        }

        return(soliderCtrl);
    }
Пример #12
0
    void OnFormation6(int sType, int sNum, int kNum)
    {
        int num      = sNum + kNum;
        int frontNum = Mathf.CeilToInt(num * 7 / 10f);
        int backNum  = Mathf.FloorToInt(num * 3 / 10f);
        int fRowNum  = 0;
        int bRowNum  = 0;

        int[] fRows = new int[3];
        int[] bRows = new int[3];

        if (backNum <= 2)
        {
            bRowNum  = 1;
            bRows[0] = backNum;
        }
        else if (backNum <= 4)
        {
            bRowNum  = 2;
            bRows[0] = 2;
            bRows[1] = backNum - bRows[0];
        }
        else
        {
            bRowNum  = 3;
            bRows[0] = backNum / 3;
            bRows[1] = backNum / 3;
            bRows[2] = backNum / 3;
            int mod = backNum % 3;
            if (mod == 2)
            {
                bRows[0]++;
                bRows[1]++;
            }
            else if (mod == 1)
            {
                bRows[0]++;
            }
        }

        if (frontNum <= 30)
        {
            fRowNum  = 1;
            fRows[0] = frontNum;
        }
        else if (frontNum <= 54)
        {
            fRowNum  = 2;
            fRows[0] = 30;
            fRows[1] = frontNum - 30;
        }
        else
        {
            fRowNum  = 3;
            fRows[0] = 30;
            fRows[1] = 24;
            fRows[2] = frontNum - 54;
        }

        int     soliderIndex = 0;
        int     knightNum    = kNum;
        int     soliderNum   = sNum;
        Vector3 posBase      = Vector3.zero;
        int     xSpace       = 4 * (int)WarSceneController.locationStepX;
        int     ySpace       = 4 * (int)WarSceneController.locationStepY;

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }

        for (int i = 0; i < bRowNum; i++)
        {
            for (int j = 0; j < bRows[i]; j++)
            {
                Vector3 pos = Vector3.zero;
                if (j % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y + ySpace * j / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * i, posBase.y - ySpace * ((int)(j + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddBackSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        if (side == WarSceneController.WhichSide.Left)
        {
            xSpace  = 4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(-600 + xSpace, 0, 0);
        }
        else
        {
            xSpace  = -4 * (int)WarSceneController.locationStepX;
            posBase = new Vector3(600 + xSpace, 0, 0);
        }
        if (fRows[0] < 5)
        {
            for (int i = 0; i < fRows[0]; i++)
            {
                Vector3 pos = Vector3.zero;
                if (i % 2 == 0)
                {
                    pos = new Vector3(posBase.x, posBase.y + ySpace * i / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x, posBase.y - ySpace * ((int)(i + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }
        else
        {
            int[] numTemp = new int[3];
            numTemp[0] = fRows[0] / 3;
            numTemp[1] = fRows[0] / 3;
            numTemp[2] = fRows[0] / 3;
            int m = fRows[0] % 3;
            if (m == 1)
            {
                numTemp[0]++;
            }
            else if (m == 2)
            {
                numTemp[1]++;
                numTemp[2]++;
            }

            for (int i = 0; i < numTemp[0]; i++)
            {
                Vector3 pos = Vector3.zero;
                if (i % 2 == 0)
                {
                    pos = new Vector3(posBase.x, posBase.y + ySpace * i / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x, posBase.y - ySpace * ((int)(i + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }

            for (int i = 0; i < numTemp[1]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 1) * xSpace, posBase.y - ySpace * numTemp[0] / 2, 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }

            for (int i = 0; i < numTemp[2]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 1) * xSpace, posBase.y + ySpace * ((int)(numTemp[0] - 1) / 2), 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        if (fRowNum >= 2)
        {
            int temp = fRows[1];
            if (temp > 8)
            {
                temp = 8;
            }
            for (int i = 0; i < temp; i++)
            {
                Vector3 pos = Vector3.zero;
                if (i % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace, posBase.y + ySpace * i / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace, posBase.y - ySpace * ((int)(i + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }

            int[] sideTemp = new int[2];
            sideTemp[0] = (fRows[1] - 8) / 2;
            sideTemp[1] = (fRows[1] - 8) / 2;
            if ((fRows[1] - 8) % 2 == 1)
            {
                sideTemp[0]++;
            }
            for (int i = 0; i < sideTemp[0]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 2) * xSpace, posBase.y - ySpace * 4, 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
            for (int i = 0; i < sideTemp[1]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 2) * xSpace, posBase.y + ySpace * 3, 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }

        if (fRowNum >= 3)
        {
            int temp = fRows[2];
            if (temp > 6)
            {
                temp = 6;
            }
            for (int i = 0; i < temp; i++)
            {
                Vector3 pos = Vector3.zero;
                if (i % 2 == 0)
                {
                    pos = new Vector3(posBase.x + xSpace * 2, posBase.y + ySpace * i / 2, 0);
                }
                else
                {
                    pos = new Vector3(posBase.x + xSpace * 2, posBase.y - ySpace * ((int)(i + 1) / 2), 0);
                }

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }

            int[] sideTemp = new int[2];
            sideTemp[0] = (fRows[2] - 6) / 2;
            sideTemp[1] = (fRows[2] - 6) / 2;
            if ((fRows[2] - 6) % 2 == 1)
            {
                sideTemp[0]++;
            }
            for (int i = 0; i < sideTemp[0]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 3) * xSpace, posBase.y - ySpace * 3, 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
            for (int i = 0; i < sideTemp[1]; i++)
            {
                Vector3 pos = Vector3.zero;
                pos = new Vector3(posBase.x + (i + 3) * xSpace, posBase.y + ySpace * 2, 0);

                if (soliderNum > 0)
                {
                    soliderNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, false);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                else if (knightNum > 0)
                {
                    knightNum--;
                    SolidersController sCtrl = SetSolider(sType, pos, soliderIndex, true);
                    warCtrl.AddSolider(side, sCtrl);
                    warCtrl.AddFrontSolider(side, sCtrl);
                }
                soliderIndex++;
            }
        }
    }
Пример #13
0
    void Init()
    {
        transform.parent           = MagicController.Instance.magicRoot;
        transform.localPosition    = Vector3.zero;
        transform.localEulerAngles = Vector3.zero;
        transform.localScale       = Vector3.one;

        warCtrl   = MagicController.Instance.warCtrl;
        side      = MagicController.Instance.GetMagicSide();
        enemySide = MagicController.Instance.GetMagicEnemySide();

        Vector3 posGeneral;

        if (side == WarSceneController.WhichSide.Left)
        {
            posGeneral = warCtrl.leftGeneral.transform.localPosition;
        }
        else
        {
            posGeneral = warCtrl.rightGeneral.transform.localPosition;
        }

        float angle = 2 * Mathf.PI / (level * 4);

        for (int i = 0; i < level * 4; i++)
        {
            Vector3 pos = posGeneral;
            pos.x += radius * Mathf.Cos(angle * (i + 0.5f));
            pos.y += radius * Mathf.Sin(angle * (i + 0.5f));
            pos.z  = -50;
            GameObject go = InstantiateOneGO(swordUpName, pos, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
            go.SetActive(false);
            listSwordUp.Add(go);
        }

        List <SolidersController> listSoldier = new List <SolidersController>();

        for (int i = 0; i < level; i++)
        {
            SolidersController sCtrl = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
            Vector3            pos;
            if (sCtrl != null && !listSoldier.Contains(sCtrl))
            {
                pos   = sCtrl.transform.localPosition;
                pos.z = -150;
                listSoldier.Add(sCtrl);
            }
            else
            {
                GeneralController gCtrl;
                if (enemySide == WarSceneController.WhichSide.Left)
                {
                    gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                }
                else
                {
                    gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                }
                pos   = gCtrl.transform.localPosition;
                pos.z = -150;
            }
            GameObject go = InstantiateOneGO(swordDownMainName, pos, WarSceneController.manScaleRight * 3f, WarSceneController.manEulerAngles);
            go.SetActive(false);
            go.GetComponent <MagicSwordDonwMain>().SetInfo(this);
            listSwordDownMain.Add(go);

            for (int j = 0; j < 8; j++)
            {
                Vector3 posDown = pos;
                posDown.x += Random.Range(-50, 50);
                posDown.y += Random.Range(-50, 50);
                go         = InstantiateOneGO(swordDownName, posDown, WarSceneController.manScaleRight, WarSceneController.manEulerAngles);
                go.SetActive(false);
                listSwordDown.Add(go);
            }
        }
    }
Пример #14
0
    void Init()
    {
        transform.parent           = MagicController.Instance.magicRoot;
        transform.localPosition    = Vector3.zero;
        transform.localEulerAngles = Vector3.zero;
        transform.localScale       = Vector3.one;

        float   xStep         = 0;
        Vector3 arrowOff      = Vector3.zero;
        Vector3 arrowDownOff  = Vector3.zero;
        Vector3 posBase       = Vector3.zero;
        Vector3 scale         = Vector3.zero;
        string  archerName    = "";
        string  arrowUpName   = "";
        string  arrowDownName = "";

        WarSceneController.WhichSide side      = MagicController.Instance.GetMagicSide();
        WarSceneController.WhichSide enemySide =
            (side == WarSceneController.WhichSide.Left) ? WarSceneController.WhichSide.Right : WarSceneController.WhichSide.Left;

        if (side == WarSceneController.WhichSide.Left)
        {
            xStep        = this.manXStepLeft;
            arrowOff     = this.arrowOffLeft;
            arrowDownOff = this.arrowDownOffLeft;
            posBase      = this.manBasePosLeft;
            scale        = WarSceneController.manScaleLeft;

            if (!isWithFire)
            {
                archerName = this.archerNameLeft;
            }
            else
            {
                archerName = this.fireArcherNameLeft;
            }
        }
        else
        {
            xStep        = this.manXStepRight;
            arrowOff     = this.arrowOffRight;
            arrowDownOff = this.arrowDownOffRight;
            posBase      = this.manBasePosRight;
            scale        = WarSceneController.manScaleRight;

            if (!isWithFire)
            {
                archerName = this.archerNameRight;
            }
            else
            {
                archerName = this.fireArcherNameRight;
            }
        }

        if (!isWithFire)
        {
            arrowUpName   = this.arrowUpName;
            arrowDownName = this.arrowDownName;
        }
        else
        {
            arrowUpName   = this.fireArrowUpName;
            arrowDownName = this.fireArrowDownName;
        }

        this.enemyCenterPoint = MagicController.Instance.warCtrl.GetArmyCentrePoint(enemySide);
        List <SolidersController> listSolidersAdded = new List <SolidersController>();

        for (int i = 0; i < level; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                GameObject archerGO = InstantiateOneGO(archerName, posBase, scale);
                archerGO.GetComponent <MGArcherCtrl>().SetInfo(i * 10 + j, isWithFire, Random.Range(1f, 1.5f), this);

                GameObject arrowUpGO = InstantiateOneGO(arrowUpName, posBase + arrowOff, scale);
                arrowUpGO.SetActive(false);
                listArrowUp.Add(arrowUpGO);
                arrowUpGO.GetComponent <MGArrowUpCtrl>().SetInfo(side);

                GameObject arrowDownGO = InstantiateOneGO(arrowDownName, Vector3.zero, scale);
                arrowDownGO.SetActive(false);
                listArrowDown.Add(arrowDownGO);

                Vector3            pos;
                SolidersController sCtrl = MagicController.Instance.warCtrl.GetRandomSolider(enemySide);
                if (sCtrl != null && !listSolidersAdded.Contains(sCtrl))
                {
                    listSolidersAdded.Add(sCtrl);

                    pos   = sCtrl.transform.localPosition;
                    pos.z = 0;
                    pos  += arrowDownOff;
                    arrowDownGO.GetComponent <MGArrowDownCtrl>().SetInfo(isWithFire, side, pos, sCtrl, null);
                }
                else
                {
                    if (!hitGeneral && Random.Range(0, 100) < 20)
                    {
                        hitGeneral = true;
                        GeneralController gCtrl;
                        if (enemySide == WarSceneController.WhichSide.Left)
                        {
                            gCtrl = MagicController.Instance.warCtrl.leftGeneral;
                        }
                        else
                        {
                            gCtrl = MagicController.Instance.warCtrl.rightGeneral;
                        }
                        pos   = gCtrl.transform.localPosition;
                        pos.z = 0;
                        pos  += arrowDownOff;
                        arrowDownGO.GetComponent <MGArrowDownCtrl>().SetInfo(isWithFire, side, pos, null, gCtrl);
                    }
                    else
                    {
                        pos = new Vector3(enemyCenterPoint.x + Random.Range(-150, 150),
                                          enemyCenterPoint.y + Random.Range(-80, 80),
                                          -150);
                        arrowDownGO.GetComponent <MGArrowDownCtrl>().SetInfo(isWithFire, side, pos, null, null);
                    }
                }

                posBase.y += this.manYStep;
            }
            posBase.x += xStep;
            posBase.y -= this.manYStep * 10;
        }
    }
Пример #15
0
    void GenerateOneSoldier(int soliderType, Vector3 pos, bool isKnight)
    {
        string sName = "Soliders/";

        if (side == WarSceneController.WhichSide.Left)
        {
            sName += "Red/";
        }
        else
        {
            sName += "Green/";
        }

        if (!isKnight)
        {
            if (soliderType < 9)
            {
                sName += "Solider00" + (soliderType + 1);
            }
            else
            {
                sName += "Solider0" + (soliderType + 1);
            }
        }
        else
        {
            if (soliderType < 9)
            {
                sName += "Knight00" + (soliderType + 1);
            }
            else
            {
                sName += "Knight0" + (soliderType + 1);
            }
        }

        GameObject go = (GameObject)Instantiate(Resources.Load(sName));

        go.transform.parent = soldierRoot;

        if (isKnight)
        {
            Transform horsePrefab;
            if (side == WarSceneController.WhichSide.Left)
            {
                horsePrefab = horsePrefabLeft;
            }
            else
            {
                horsePrefab = horsePrefabRight;
            }
            Transform horse = (Transform)Instantiate(horsePrefab);
            horse.gameObject.AddComponent <SolidersHorse>();
            horse.gameObject.SetActive(false);
            horse.parent        = go.transform;
            horse.localPosition = Vector3.zero;
            horse.localScale    = Vector3.one;
        }

        go.transform.localPosition = pos;
        go.transform.eulerAngles   = WarSceneController.manEulerAngles;

        if (side == WarSceneController.WhichSide.Left)
        {
            go.transform.localScale = WarSceneController.manScaleLeft;
        }
        else
        {
            go.transform.localScale = WarSceneController.manScaleRight;
        }

        SolidersController soliderCtrl = go.AddComponent <SolidersController>();

        Transform mapFrame = GameObject.Find("Map").transform;
        Transform mapPointPrefab;

        if (side == WarSceneController.WhichSide.Left)
        {
            mapPointPrefab = mapPointPrefabLeft;
        }
        else
        {
            mapPointPrefab = mapPointPrefabRight;
        }
        Transform mapPoint = (Transform)Instantiate(mapPointPrefab);

        mapPoint.parent        = mapFrame;
        mapPoint.localPosition = Vector3.zero;

        soliderCtrl.SetMapPoint(mapPoint);
        soliderCtrl.SetSide(side);
        soliderCtrl.SetType(soliderType);
        soliderCtrl.SetIsKnight(isKnight);

        if (side == WarSceneController.WhichSide.Left)
        {
            soliderCtrl.SetIndex(-Random.Range(100, 10000));
        }
        else
        {
            soliderCtrl.SetIndex(Random.Range(100, 10000));
        }

        listSolider.Add(soliderCtrl);
        MagicController.Instance.warCtrl.AddSolider(side, soliderCtrl);
        MagicController.Instance.warCtrl.AddBackSolider(side, soliderCtrl);
    }