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; }
public void AddBackSolider(WhichSide side, SolidersController sCtrl) { if (side == WhichSide.Left) { leftBackSoliders.Add(sCtrl); } else { rightBackSoliders.Add(sCtrl); } }
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); } }
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); } }
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); } }
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); } }
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++; } } } }
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++; } } }
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++; } } }
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++; } } }
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); }
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++; } } }
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); } } }
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; } }
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); }