Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CellSystem_F : MonoBehaviour
- {
- // Скрипт управляет 1й полоской ячеек . По вертикали.
- // Ячейки самостоятельны. Скрипт только расставляет их
- // Содержит префабы всех ячеек и их шансы на выпадание
- public GlobalCellSystem_F globalCell;
- // Массив ячеек, которые появятся в столбик
- public CellCreature_F[] cellSaveMassive = new CellCreature_F[6];
- // Ключи для включения пересчета ячеек (Когда надо добавить уничтоженную)
- public bool recalculateCell = true;
- public bool recalculateDelay = false;
- // Ключ для создания столбца ячеек в первом кадре
- bool calculateCellStart = true;
- void CalculateStart ()
- {
- Vector3 thisPosition = Vector3.zero;
- thisPosition = new Vector3(thisPosition.x, thisPosition.y, 0);
- for(int i = 0; i < 6; i++)
- {
- CellCreature_F new_cell = CreateCell(Vector3.zero);
- cellSaveMassive[i] = new_cell;
- new_cell.transform.parent = this.transform;
- new_cell.transform.localPosition = thisPosition;
- thisPosition.y += 1.4f;
- new_cell.index = i;
- }
- recalculateCell = false;
- }
- private CellCreature_F CreateCell(Vector3 thisPosition)
- {
- int random = Random.Range(1,101);
- int perGrass = globalCell.perGrass;
- int perTree = perGrass + globalCell.perTree;
- int perTrash = perTree + globalCell.perTrash;
- CellCreature_F new_cell;
- if(random <= perGrass) {
- switch(Random.Range (0,4))
- {
- default:
- case 0: new_cell = Instantiate(globalCell.cell_grass_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 0; break;
- case 1: new_cell = Instantiate(globalCell.cell_grass_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 0; break;
- case 2: new_cell = Instantiate(globalCell.cell_grass_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 0; break;
- case 3: new_cell = Instantiate(globalCell.cell_grass_4, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 0; break;
- }
- }
- else if(random <= perTree) {
- switch(Random.Range (0,4))
- {
- default:
- case 0: new_cell = Instantiate(globalCell.cell_tree_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_drovosec) {
- case 0: new_cell.health = 5; break;
- case 1: new_cell.health = 4; break; // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 3; break; }
- new_cell.IDcell = 1;
- break;
- case 1: new_cell = Instantiate(globalCell.cell_tree_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_drovosec) {
- case 0: new_cell.health = 5; break;
- case 1: new_cell.health = 4; break; // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 3; break; }
- new_cell.IDcell = 1;
- break;
- case 2: new_cell = Instantiate(globalCell.cell_tree_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_drovosec) {
- case 0: new_cell.health = 5; break;
- case 1: new_cell.health = 4; break; // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 3; break; }
- new_cell.IDcell = 1;
- break;
- case 3: new_cell = Instantiate(globalCell.cell_tree_4, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_drovosec) {
- case 0: new_cell.health = 5; break;
- case 1: new_cell.health = 4; break; // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 3; break; }
- new_cell.IDcell = 1;
- break;
- }
- }
- else if(random <= perTrash) {
- switch(Random.Range (0,3))
- {
- default:
- case 0: new_cell = Instantiate(globalCell.cell_trash_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 2; break;
- case 1: new_cell = Instantiate(globalCell.cell_trash_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 2; break;
- case 2: new_cell = Instantiate(globalCell.cell_trash_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F; new_cell.IDcell = 2; break;
- }
- }
- else
- {
- switch(Random.Range (0,3))
- {
- default:
- case 0: new_cell = Instantiate(globalCell.cell_berry_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_sobYagod) {
- case 0: new_cell.health = 7; break;
- case 1: new_cell.health = 6; break; // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 5; break;
- case 3: new_cell.health = 4; break; }
- new_cell.IDcell = 3;
- break;
- case 1: new_cell = Instantiate(globalCell.cell_berry_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_sobYagod) {
- case 0: new_cell.health = 7; break;
- case 1: new_cell.health = 6; break; // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 5; break;
- case 3: new_cell.health = 4; break; }
- new_cell.IDcell = 3;
- break;
- case 2: new_cell = Instantiate(globalCell.cell_berry_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
- switch(DATAForest.recruit_sobYagod) {
- case 0: new_cell.health = 7; break;
- case 1: new_cell.health = 6; break; // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
- case 2: new_cell.health = 5; break;
- case 3: new_cell.health = 4; break; }
- new_cell.IDcell = 3;
- break;
- }
- }
- return new_cell;
- }
- void Update ()
- {
- if(calculateCellStart) {CalculateStart(); calculateCellStart = false;}
- if(recalculateCell)
- {
- int id = 0;
- int id_detect = -1;
- int numNewBlock = 0;
- for(int i = 0; i < 6; i++)
- {
- if(cellSaveMassive[i] != null) {cellSaveMassive[i].index = id; id++;}
- else
- {
- if(id_detect == -1)
- {
- id_detect = i;
- }
- numNewBlock++;
- }
- }
- // Узнаем, остались ли еще блоки сверху или нет (сгорает-крестики, не сгорает-нолики. Пример столбца = О О Х Х Х О - вот шестой блок остался)
- //print ("NumNewBlock = " + numNewBlock);
- //print ("id_detect = " + id_detect);
- for(int y = id_detect; y < 5; y++)
- {
- if(y+numNewBlock < 6)
- {
- //print("y = " + y);
- //print("y + numNewBlock = " + (y+numNewBlock));
- cellSaveMassive[y] = cellSaveMassive[y+numNewBlock];
- }
- }
- int delta = 6 - numNewBlock;
- // Создаем новый блок / новые блоки
- for(int j = delta; j < 6; j++)
- {
- CellCreature_F new_cell = CreateCell(Vector3.zero);
- cellSaveMassive[j] = new_cell;
- new_cell.transform.parent = this.transform;
- new_cell.transform.localPosition = new Vector3(0, 8.4f, 0);
- new_cell.index = j;
- new_cell.newBorn = true;
- }
- recalculateCell = false;
- }
- if(recalculateDelay)
- {
- recalculateDelay = false;
- recalculateCell = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement