Advertisement
Guest User

Untitled

a guest
Oct 13th, 2015
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.96 KB | None | 0 0
  1. public class CellSystem_F : MonoBehaviour
  2. {
  3.     // Скрипт управляет 1й полоской ячеек . По вертикали.
  4.     // Ячейки самостоятельны. Скрипт только расставляет их
  5.    
  6.     // Содержит префабы всех ячеек и их шансы на выпадание
  7.     public GlobalCellSystem_F globalCell;
  8.    
  9.     // Массив ячеек, которые появятся в столбик
  10.     public CellCreature_F[] cellSaveMassive = new CellCreature_F[6];
  11.    
  12.     // Ключи для включения пересчета ячеек (Когда надо добавить уничтоженную)
  13.     public bool recalculateCell = true;
  14.     public bool recalculateDelay = false;
  15.    
  16.     // Ключ для создания столбца ячеек в первом кадре
  17.     bool calculateCellStart = true;
  18.    
  19.     void CalculateStart ()
  20.     {
  21.         Vector3 thisPosition = Vector3.zero;
  22.        
  23.         thisPosition = new Vector3(thisPosition.x, thisPosition.y, 0);
  24.        
  25.         for(int i = 0; i < 6; i++)
  26.         {
  27.             CellCreature_F new_cell = CreateCell(Vector3.zero);
  28.            
  29.             cellSaveMassive[i] = new_cell;
  30.            
  31.             new_cell.transform.parent = this.transform;
  32.             new_cell.transform.localPosition = thisPosition;
  33.             thisPosition.y += 1.4f;
  34.                        
  35.             new_cell.index = i;
  36.         }
  37.         recalculateCell = false;
  38.     }
  39.    
  40.     private CellCreature_F CreateCell(Vector3 thisPosition)
  41.     {
  42.         int random = Random.Range(1,101);
  43.        
  44.         int perGrass = globalCell.perGrass;
  45.         int perTree = perGrass + globalCell.perTree;
  46.         int perTrash = perTree + globalCell.perTrash;
  47.    
  48.         CellCreature_F new_cell;
  49.         if(random <= perGrass) {
  50.             switch(Random.Range (0,4))
  51.             {
  52.             default:
  53.             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;
  54.             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;
  55.             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;
  56.             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;
  57.             }
  58.         }
  59.         else if(random <= perTree) {
  60.             switch(Random.Range (0,4))
  61.             {
  62.             default:
  63.             case 0: new_cell = Instantiate(globalCell.cell_tree_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  64.                 switch(DATAForest.recruit_drovosec) {
  65.                 case 0: new_cell.health = 5; break;
  66.                 case 1: new_cell.health = 4; break;     // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
  67.                 case 2: new_cell.health = 3; break; }
  68.                 new_cell.IDcell = 1;
  69.                 break;
  70.             case 1: new_cell = Instantiate(globalCell.cell_tree_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  71.                 switch(DATAForest.recruit_drovosec) {
  72.                 case 0: new_cell.health = 5; break;
  73.                 case 1: new_cell.health = 4; break;     // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
  74.                 case 2: new_cell.health = 3; break; }
  75.                 new_cell.IDcell = 1;
  76.                 break;
  77.             case 2: new_cell = Instantiate(globalCell.cell_tree_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  78.                 switch(DATAForest.recruit_drovosec) {
  79.                 case 0: new_cell.health = 5; break;
  80.                 case 1: new_cell.health = 4; break;     // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
  81.                 case 2: new_cell.health = 3; break; }
  82.                 new_cell.IDcell = 1;
  83.                 break;
  84.             case 3: new_cell = Instantiate(globalCell.cell_tree_4, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  85.                 switch(DATAForest.recruit_drovosec) {
  86.                 case 0: new_cell.health = 5; break;
  87.                 case 1: new_cell.health = 4; break;     // Если в таверне нанят дровосек - то кол-во кликов может быть уменьшено
  88.                 case 2: new_cell.health = 3; break; }
  89.                 new_cell.IDcell = 1;
  90.                 break;
  91.             }
  92.         }
  93.         else if(random <= perTrash) {
  94.             switch(Random.Range (0,3))
  95.             {
  96.             default:
  97.             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;
  98.             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;
  99.             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;
  100.             }
  101.         }
  102.         else
  103.         {
  104.             switch(Random.Range (0,3))
  105.             {
  106.             default:
  107.             case 0: new_cell = Instantiate(globalCell.cell_berry_1, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  108.                 switch(DATAForest.recruit_sobYagod) {
  109.                 case 0: new_cell.health = 7; break;
  110.                 case 1: new_cell.health = 6; break;     // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
  111.                 case 2: new_cell.health = 5; break;
  112.                 case 3: new_cell.health = 4; break; }
  113.                 new_cell.IDcell = 3;
  114.                 break;
  115.             case 1: new_cell = Instantiate(globalCell.cell_berry_2, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  116.                 switch(DATAForest.recruit_sobYagod) {
  117.                 case 0: new_cell.health = 7; break;
  118.                 case 1: new_cell.health = 6; break;     // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
  119.                 case 2: new_cell.health = 5; break;
  120.                 case 3: new_cell.health = 4; break; }
  121.                 new_cell.IDcell = 3;
  122.                 break;
  123.             case 2: new_cell = Instantiate(globalCell.cell_berry_3, thisPosition, Quaternion.Euler(new Vector3(45,0,0))) as CellCreature_F;
  124.                 switch(DATAForest.recruit_sobYagod) {
  125.                 case 0: new_cell.health = 7; break;
  126.                 case 1: new_cell.health = 6; break;     // Если в таверне нанят собиратель ягод - то кол-во кликов может быть уменьшено
  127.                 case 2: new_cell.health = 5; break;
  128.                 case 3: new_cell.health = 4; break; }
  129.                 new_cell.IDcell = 3;
  130.                 break;
  131.             }
  132.         }
  133.        
  134.         return new_cell;
  135.     }
  136.    
  137.     void Update ()
  138.     {
  139.         if(calculateCellStart) {CalculateStart(); calculateCellStart = false;}
  140.        
  141.         if(recalculateCell)
  142.         {
  143.             int id = 0;
  144.             int id_detect = -1;
  145.             int numNewBlock = 0;
  146.             for(int i = 0; i < 6; i++)
  147.             {
  148.                 if(cellSaveMassive[i] != null)  {cellSaveMassive[i].index = id; id++;}
  149.                 else                           
  150.                 {
  151.                     if(id_detect == -1)
  152.                     {
  153.                         id_detect = i;
  154.                     }
  155.                     numNewBlock++;
  156.                 }
  157.             }
  158.            
  159.             // Узнаем, остались ли еще блоки сверху или нет (сгорает-крестики, не сгорает-нолики. Пример столбца = О О Х Х Х О   - вот шестой блок остался)
  160.            
  161.             //print ("NumNewBlock = " + numNewBlock);
  162.             //print ("id_detect = " + id_detect);
  163.             for(int y = id_detect; y < 5; y++) 
  164.             {
  165.                 if(y+numNewBlock < 6)
  166.                 {
  167.                     //print("y = " + y);
  168.                     //print("y + numNewBlock = " + (y+numNewBlock));
  169.                     cellSaveMassive[y] = cellSaveMassive[y+numNewBlock];
  170.                 }
  171.             }
  172.            
  173.             int delta = 6 - numNewBlock;
  174.             // Создаем новый блок / новые блоки
  175.             for(int j = delta; j < 6; j++)
  176.             {
  177.                 CellCreature_F new_cell = CreateCell(Vector3.zero);
  178.            
  179.                 cellSaveMassive[j] = new_cell;
  180.                 new_cell.transform.parent = this.transform;
  181.                 new_cell.transform.localPosition = new Vector3(0, 8.4f, 0);
  182.                 new_cell.index = j;
  183.                 new_cell.newBorn = true;
  184.             }
  185.            
  186.             recalculateCell = false;
  187.         }
  188.        
  189.         if(recalculateDelay)
  190.         {
  191.             recalculateDelay = false;
  192.             recalculateCell = true;
  193.         }
  194.     }
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement