Exemplo n.º 1
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++;
            }
        }
    }