Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class match3D : MonoBehaviour {
- public GameObject root; // родители
- public GameObject[] gems; // гемы
- public int gridSize = 8; // размер игрового поля в гемах
- public int gemSize = 25; // размер одной ячейки
- public int cellIndent = 5; // отступ между ячейками
- public GameObject gemFirst; // первый нажатый гем
- public GameObject gemSecond; // второй нажатый гем
- private GameObject[,] grid; // массив гемов
- public void Start () {
- root = new GameObject(); // создаем родителя для гемов
- root.name = "rootGems";
- // Заполняем наш массив гемов
- grid = new GameObject[gridSize, gridSize];
- for (int i = 0; i < gridSize; i++) {
- for (int j = 0; j < gridSize; j++) {
- int rnd = Random.Range(0, gems.Length);
- grid[i, j] = gems[rnd];
- }
- }
- Filling ();
- }
- public void Filling () {
- // Создаем наши гемы
- for (int i = 0; i < gridSize; i++) {
- for (int j = 0; j < gridSize; j++) {
- GameObject gem = (GameObject)Instantiate(grid[i, j]);
- gem.GetComponent<gem>().gem_i = i;
- gem.GetComponent<gem>().gem_j = j;
- gem.transform.parent = root.transform;
- gem.transform.position = new Vector3(i * (gemSize + cellIndent), 0, j * (gemSize + cellIndent));
- }
- }
- }
- public void Update () {
- if (Input.GetMouseButtonDown(0)) {
- RaycastHit hit;
- if (Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit)) {
- if (!gemFirst) {
- gemFirst = hit.collider.gameObject;
- gemFirst.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
- }else
- if (!gemSecond) {
- if (hit.collider.tag == gemFirst.tag) {
- gemFirst.renderer.material.shader = Shader.Find("Specular");
- gemFirst = null;
- }else{
- var first_i = gemFirst.GetComponent<gem>().gem_i;
- var second_i = hit.collider.GetComponent<gem>().gem_i;
- if (Mathf.Abs(first_i - second_i) == 1) {
- gemSecond = hit.collider.gameObject;
- gemSecond.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
- ChangeGem();
- }else{
- var first_j = gemFirst.GetComponent<gem>().gem_j;
- var second_j = hit.collider.GetComponent<gem>().gem_j;
- if (Mathf.Abs(first_j - second_j) == 1) {
- gemSecond = hit.collider.gameObject;
- gemSecond.renderer.material.shader = Shader.Find("Self-Illumin/Specular");
- ChangeGem();
- }else{
- gemFirst.renderer.material.shader = Shader.Find("Specular");
- gemFirst = null;
- }
- }
- }
- }
- }
- }
- }
- public void ChangeGem () {
- grid[gemFirst.GetComponent<gem>().gem_i, gemFirst.GetComponent<gem>().gem_j] = gemSecond;
- grid[gemSecond.GetComponent<gem>().gem_i, gemSecond.GetComponent<gem>().gem_j] = gemFirst;
- gemFirst.renderer.material.shader = Shader.Find("Specular");
- gemSecond.renderer.material.shader = Shader.Find("Specular");
- gemFirst = null;
- gemSecond = null;
- for (int i = 0; i < root.transform.GetChildCount(); i++)
- {
- Destroy(root.transform.GetChild(i).gameObject);
- }
- Filling ();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement