Advertisement
Guest User

Untitled

a guest
Aug 24th, 2012
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.27 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class match3D : MonoBehaviour {
  5.     public GameObject root; // родители
  6.     public GameObject[] gems; // гемы
  7.    
  8.     public int gridSize = 8; // размер игрового поля в гемах
  9.     public int gemSize = 25; // размер одной ячейки
  10.     public int cellIndent = 5; // отступ между ячейками
  11.    
  12.     public GameObject gemFirst; // первый нажатый гем
  13.     public GameObject gemSecond; // второй нажатый гем
  14.     private GameObject[,] grid; // массив гемов
  15.    
  16.     public void Start () {
  17.         root = new GameObject(); // создаем родителя для гемов
  18.         root.name = "rootGems";
  19.        
  20.         // Заполняем наш массив гемов
  21.         grid = new GameObject[gridSize, gridSize];
  22.         for (int i = 0; i < gridSize; i++) {
  23.             for (int j = 0; j < gridSize; j++) {
  24.                 int rnd = Random.Range(0, gems.Length);
  25.                 grid[i, j] = gems[rnd];
  26.             }
  27.         }
  28.        
  29.         Filling ();
  30.     }
  31.    
  32.     public void Filling () {
  33.         // Создаем наши гемы
  34.         for (int i = 0; i < gridSize; i++) {
  35.             for (int j = 0; j < gridSize; j++) {
  36.                 GameObject gem = (GameObject)Instantiate(grid[i, j]);
  37.                
  38.                 gem.GetComponent<gem>().gem_i = i;
  39.                 gem.GetComponent<gem>().gem_j = j;
  40.                
  41.                 gem.transform.parent = root.transform;
  42.                 gem.transform.position = new Vector3(i * (gemSize + cellIndent), 0, j * (gemSize + cellIndent));
  43.             }
  44.         }
  45.     }
  46.    
  47.     public void Update () {
  48.         if (Input.GetMouseButtonDown(0)) {
  49.             RaycastHit hit;
  50.             if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit)) {
  51.                 if (!gemFirst) {
  52.                     gemFirst = hit.collider.gameObject;
  53.                     gemFirst.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
  54.                 }else
  55.                 if (!gemSecond) {
  56.                     if (hit.collider.tag == gemFirst.tag) {
  57.                         gemFirst.renderer.material.shader = Shader.Find("Specular");
  58.                         gemFirst = null;
  59.                     }else{
  60.                         var first_i = gemFirst.GetComponent<gem>().gem_i;
  61.                         var second_i = hit.collider.GetComponent<gem>().gem_i;
  62.                         if (Mathf.Abs(first_i - second_i) == 1) {
  63.                             gemSecond = hit.collider.gameObject;
  64.                             gemSecond.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
  65.                             ChangeGem();
  66.                         }else{
  67.                             var first_j = gemFirst.GetComponent<gem>().gem_j;
  68.                             var second_j = hit.collider.GetComponent<gem>().gem_j;
  69.                             if (Mathf.Abs(first_j - second_j) == 1) {
  70.                                 gemSecond = hit.collider.gameObject;
  71.                                 gemSecond.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
  72.                                 ChangeGem();
  73.                             }else{
  74.                                 gemFirst.renderer.material.shader = Shader.Find("Specular");
  75.                                 gemFirst = null;
  76.                             }
  77.                         }
  78.                     }
  79.                 }
  80.             }
  81.         }
  82.     }
  83.    
  84.     public void ChangeGem () {
  85.         grid[gemFirst.GetComponent<gem>().gem_i, gemFirst.GetComponent<gem>().gem_j] = gemSecond;
  86.         grid[gemSecond.GetComponent<gem>().gem_i, gemSecond.GetComponent<gem>().gem_j] = gemFirst;
  87.        
  88.         gemFirst.renderer.material.shader = Shader.Find("Specular");
  89.         gemSecond.renderer.material.shader = Shader.Find("Specular");
  90.        
  91.         gemFirst = null;
  92.         gemSecond = null;
  93.        
  94.         for (int i = 0; i < root.transform.GetChildCount(); i++)
  95.         {
  96.             Destroy(root.transform.GetChild(i).gameObject);
  97.         }
  98.  
  99.         Filling ();
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement