Exemplo n.º 1
0
    void Update()
    {
        using (StreamWriter writer = File.CreateText("Count.txt"))
        {
            //Debug.Log(VDU);
            writer.WriteLine(VDU);
        }



        /// Пересчитываем время с последнего тактического шага
        mainStatic.t = Time.time - mainStatic.t0;


        if (mainStatic.t > mainStatic.TACTICPERIOD)
        {
            TactUpdate.makeTacticUpdate();

            mainStatic.arrowCount = 0;
        }

        else
        {
            // добавляем стрелу
            if (mainStatic.arrowCount < ArrowBuff.archBuf.Count)
            {
                if (ArrowBuff.archBuf[mainStatic.arrowCount].time < mainStatic.t)
                {
                    /*Debug.Log("+++++");
                     * Debug.Log(mainStatic.arrowCount);
                     * Debug.Log(ArrowBuff.archBuf.Count);
                     * Debug.Log(ArrowBuff.archBuf[mainStatic.arrowCount].stPos);
                     * Debug.Log(ArrowBuff.archBuf[mainStatic.arrowCount].speed);
                     * Debug.Log(ArrowBuff.archBuf[mainStatic.arrowCount].forw);*/
                    mainStatic.arr.Add(Instantiate(arrow,
                                                   ArrowBuff.archBuf[mainStatic.arrowCount].stPos,
                                                   ArrowBuff.archBuf[mainStatic.arrowCount].forw).GetComponent <ArrowControl>());

                    /*GameObject gg = Instantiate(arrow,
                     *  ArrowBuff.archBuf[mainStatic.arrowCount].stPos,
                     *  ArrowBuff.archBuf[mainStatic.arrowCount].forw);
                     * //gg.AddComponent<ArrowControl>();
                     *
                     * mainStatic.arr.Add(gg.GetComponent<ArrowControl>() as ArrowControl);
                     */
                    //mainStatic.arr[(mainStatic.arr.Count - 1)].
                    //    put(ArrowBuff.archBuf[mainStatic.arrowCount].speed, ArrowBuff.archBuf[mainStatic.arrowCount].forw);
                    mainStatic.arr[(mainStatic.arr.Count - 1)].speed =
                        ArrowBuff.archBuf[mainStatic.arrowCount].speed;
                    mainStatic.arr[(mainStatic.arr.Count - 1)].forw = ArrowBuff.archBuf[mainStatic.arrowCount].forw;
                    mainStatic.arrowCount++;
                }
            }

            // Вызываем смерти
            if (mainStatic.deathcount < DeadBuff.deathBuf.Count)
            {
                //// Если время смерти пришло
                if (DeadBuff.deathBuf[mainStatic.deathcount].time < mainStatic.t)
                {
                    /*Debug.Log("-----");
                     * Debug.Log(DeadBuff.deathBuf[mainStatic.deathcount].regNum);
                     * Debug.Log(DeadBuff.deathBuf[mainStatic.deathcount].solNum);
                     * Debug.Log(mainStatic.regiment_stat[
                     *     (DeadBuff.deathBuf[mainStatic.deathcount].regNum)
                     *         ].
                     *         soldiers.Count);*/

                    Destroy(mainStatic.regiment_stat[
                                (DeadBuff.deathBuf[mainStatic.deathcount].regNum)
                            ].
                            soldiers[DeadBuff.deathBuf[mainStatic.deathcount].solNum].getObject());

                    /*      mainStatic.regiment_stat[
                     *       (DeadBuff.deathBuf[mainStatic.deathcount].regNum)
                     *           ].
                     *           soldiers.RemoveAt(DeadBuff.deathBuf[mainStatic.deathcount].solNum);*/

                    Vector3 tpos = mainStatic.regiment_stat[
                        (DeadBuff.deathBuf[mainStatic.deathcount].regNum)
                                   ].soldiers[
                        (DeadBuff.deathBuf[mainStatic.deathcount].solNum)
                                   ].transform.position;

                    tpos.y = 0.24f;

                    Quaternion a = mainStatic.regiment_stat[DeadBuff.deathBuf[mainStatic.deathcount].regNum].
                                   soldiers[DeadBuff.deathBuf[mainStatic.deathcount].solNum].transform.rotation;
                    // Добавить тело
                    mainStatic.deads[mainStatic.deathnumber] = Instantiate(test_dead_inf, tpos,
                                                                           Quaternion.identity * a * Quaternion.Euler(-90, 0, 0)).GetComponent <unit200>();

                    // Уменьшаем число солдат в полку
                    mainStatic.regiment_stat[DeadBuff.deathBuf[mainStatic.deathcount].regNum].soldier_count--;

                    VDU++;

                    // Передвинуть счетчик смерти на следующего
                    mainStatic.deathcount++;
                }
            }
        }
    }
Exemplo n.º 2
0
    public static void makeTacticUpdate()
    {
        if (b > 1)
        {
            mainStatic.regiment_stat[0].countTypes();
            mainStatic.regiment_stat[0].typeSpecification = 0;
            mainStatic.regiment_stat[0].rebuilding(2);
            mainStatic.updateRegimentPosition(0);

            b = 0;
        }
        else
        {
            for (int i = 0; i < mainStatic.regiment_stat.Count; i++)
            {
                for (int r = 0; r < mainStatic.regiment_stat[i].officers.Count; r++)
                {
                    OfficerStatement.MakeOfficerStatement(i, r);
                }
            }
        }
        // Очищаем массив со смертями на всяк пожарный
        DeadBuff.Delete();
        ArrowBuff.Delete();

        // счетчик смерти на 0
        mainStatic.deathcount = 0;

        // Удаляем пустые места от убитых солдат + проверка на стойкость
        for (int i = 0; i < mainStatic.regiment_stat.Count; i++)
        {
            int t = 0;
            while (t < mainStatic.regiment_stat[i].soldiers.Count)
            {
                if (mainStatic.regiment_stat[i].soldiers[t] == null)
                {
                    mainStatic.regiment_stat[i].soldiers.RemoveAt(t);
                }
                else
                {
                    t++;
                }
            }

            for (int j = 0; j < mainStatic.regiment_stat[i].soldiers.Count; j++)
            {
                mainStatic.regiment_stat[i].soldiers[j].numSoldier = j;
            }


            //// Все драки прекращаются.
            //mainStatic.regiment_stat[i].stateFighting = false;

            /* Debug.Log("ST");
             * Debug.Log(mainStatic.regiment_stat[i].soldier_count);
             * Debug.Log(mainStatic.regiment_stat[i].prim_soldier_count);
             */
            /// Прохождение теста на панику
            if (mainStatic.regiment_stat[i].soldier_count < (mainStatic.regiment_stat[i].prim_soldier_count / 2))
            {
                mainStatic.regiment_stat[i].statePanic    = true;
                mainStatic.regiment_stat[i].stateFighting = false;
                Debug.Log("PANIC");

                // В какую сторону побежит?
                // Направление в которое побежит
                Vector3 PanicTarget = new Vector3(0, 0, 0);

                for (int s = 0; s < mainStatic.regiment_stat[i].figthMas.Count; s++)
                {
                    if (mainStatic.regiment_stat[mainStatic.regiment_stat[i].figthMas[s]].command != mainStatic.regiment_stat[i].command)
                    {
                        //Debug.Log(PanicTarget);
                        PanicTarget += (mainStatic.regiment_stat[i].regPosition - mainStatic.regiment_stat[mainStatic.regiment_stat[i].figthMas[s]].regPosition).normalized;
                    }
                }
                PanicTarget = PanicTarget.normalized;
                //Debug.Log(PanicTarget);
                float x = PanicTarget.x; float y = PanicTarget.y; float z = PanicTarget.z;

                // Считаем угол между двумя векторами
                if (x >= 0 && z >= 0)
                {
                    mainStatic.regiment_stat[i].angle = Mathf.Acos(z) + 3.1415f / 2;
                }
                if (x > 0 && z < 0)
                {
                    mainStatic.regiment_stat[i].angle = -Mathf.Acos(z) + 3.1415f + 3.1415f / 2;
                }
                if (x <= 0 && z <= 0)
                {
                    mainStatic.regiment_stat[i].angle = Mathf.Acos(z) + 3.1415f + 3.1415f / 2;
                }
                if (x < 0 && z > 0)
                {
                    mainStatic.regiment_stat[i].angle = -Mathf.Acos(-z) + 3.1415f * 2 + 3.1415f / 2;
                }
            }
            if (mainStatic.regiment_stat[i].statePanic == true)
            {
                mainStatic.makeRegimentMove(i, 6.0f);
                mainStatic.updateRegimentPosition(i);
            }

            for (int h = 0; h < mainStatic.regiment_stat.Count; h++)
            {
                mainStatic.regiment_stat[h].figthMas.Clear();
            }
            //mainStatic.regiment_stat[i].figthMas.Clear();
        }

        UpdateEnReg();

        mainStatic.addMeshForBattle();
        mainStatic.dellMeshForBattle();

        // Формируем в каждом полку fightMas в котором содержатся номера полков, которые участвуют с ним в одной схватке
        // Для кажого списка
        for (int y = 0; y < mainStatic.regiment_stat.Count; y++)
        {
            mainStatic.regiment_stat[y].figthMas.Clear();
        }

        for (int y = 0; y < mainStatic.listFigReg.Count; y++)
        {
            // Для каждого элемента в списке одной схватке
            for (int r = 0; r < mainStatic.listFigReg[y].M.Count; r++)
            {
                // Сравнить с каждым другим
                for (int w = 0; w < mainStatic.listFigReg[y].M.Count; w++)
                {
                    if (r != w)
                    {
                        mainStatic.regiment_stat[mainStatic.listFigReg[y].M[r]].
                        figthMas.Add(mainStatic.listFigReg[y].M[w]);
                    }
                }
            }
        }


        /// Раздел в котором добавляем точки для навигации солдат во время боя
        /// Каждый период если полк сражается

        for (int t = 0; t < mainStatic.regiment_stat.Count; t++)
        {
            if (mainStatic.regiment_stat[t].stateFighting == true)
            {
                for (int i = 0; i < mainStatic.regiment_stat[t].figthMas.Count; i++)
                {
                    if (mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].command != mainStatic.regiment_stat[t].command)
                    {
                        mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].make_position();
                        mainStatic.regiment_stat[t].targPos.Clear();

                        Vector3 v3 = new Vector3(0, 0, 0);
                        /// Для клина и каре отдельно!
                        if (mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].regFirstLine < 6 && mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].regLastLine < 8)
                        {
                            v3 = mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[0]
                                 + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[1]
                                 + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[2]
                                 + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[3];
                            v3 = v3 / 4;

                            if (mainStatic.regiment_stat[t].command == 1)
                            {
                                Debug.Log("HUD");
                            }
                            mainStatic.regiment_stat[t].targPos.Add(v3);
                        }
                        else
                        {
                            Vector3 v5 = mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[0]
                                         + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[1]
                                         + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[2]
                                         + mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[3];
                            v5 /= 4;
                            mainStatic.regiment_stat[t].targPos.Add(v5);

                            /// Сдвигаемся на 6 в сторону, если там есть солдат,
                            bool  fl = true;
                            float j  = 6;
                            while (fl == true)
                            {
                                if (j < mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].regFirstLine / 2)
                                {
                                    v3 = v5 + j * mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].regDistanseLine * (mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[1] - mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[0]).normalized;
                                    mainStatic.regiment_stat[t].targPos.Add(v3);
                                    v3 = v5 - j * mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].regDistanseLine * (mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[1] - mainStatic.regiment_stat[mainStatic.regiment_stat[t].figthMas[i]].Position_Reg[0]).normalized;
                                    mainStatic.regiment_stat[t].targPos.Add(v3);

                                    if (mainStatic.regiment_stat[t].command == 1)
                                    {
                                        Debug.Log("HUD2");
                                    }
                                    j += 6;
                                }
                                else
                                {
                                    fl = false;
                                }
                            }
                        }
                    }
                }
            }
        }



        // Найти сражающиеся полки и для каждого солдата участника вызвать атаку
        for (int t = 0; t < mainStatic.regiment_stat.Count; t++)
        {
            if (mainStatic.regiment_stat[t].stateFighting == true)
            {
                for (int r = 0; r < mainStatic.regiment_stat[t].soldiers.Count; r++)
                {
                    mainStatic.regiment_stat[t].soldiers[r].at();
                }
            }
        }

        // Сортируем смерти по времени исполения
        DeadBuff.mySort();

        // Сортируем стрелы по времени
        ArrowBuff.mySort();

        // Удалим повторяющиеся
        mainStatic.t0 = Time.time;

        for (int t = 0; t < mainStatic.regiment_stat.Count; t++)
        {
            if (mainStatic.regiment_stat[t].stateFighting == false)
            {
                if (mainStatic.regiment_stat[t].orderForw == true)
                {
                    mainStatic.makeRegimentMove(t, 1.0f);
                    mainStatic.updateRegimentPosition(t);
                    mainStatic.regiment_stat[t].orderForw = false;
                }

                if (mainStatic.regiment_stat[t].orderBack == true)
                {
                    mainStatic.makeRegimentMove(t, -1.0f);
                    mainStatic.updateRegimentPosition(t);
                    mainStatic.regiment_stat[t].orderBack = false;
                }

                if (mainStatic.regiment_stat[t].orderRotW == true)
                {
                    mainStatic.makeRegimentRotation(t, +.3f);
                    mainStatic.updateRegimentPosition(t);
                    mainStatic.regiment_stat[t].orderRotW   = false;
                    mainStatic.regiment_stat[t].delta_angle = 0;
                }
                if (mainStatic.regiment_stat[t].orderRotL == true)
                {
                    mainStatic.makeRegimentRotation(t, -.3f);
                    mainStatic.updateRegimentPosition(t);
                    mainStatic.regiment_stat[t].orderRotL   = false;
                    mainStatic.regiment_stat[t].delta_angle = 0;
                }
                if (mainStatic.regiment_stat[t].archTotewer == true)
                {
                    mainStatic.regiment_stat[t].archerAt(t, TactUpdate.nearestReg(t), true);
                    mainStatic.regiment_stat[t].archTotewer = false;
                }
                if (mainStatic.regiment_stat[t].archAlone == true)
                {
                    mainStatic.regiment_stat[t].archerAt(t, TactUpdate.nearestReg(t), false);
                    mainStatic.regiment_stat[t].archAlone = false;
                }
            }
        }
    }