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++; } } } }
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; } } } }