Advertisement
Guest User

GridMap

a guest
May 1st, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.97 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. [RequireComponent(typeof(BoxCollider))]
  5. public class GridMap : MonoBehaviour {
  6.  
  7.     public Vector3 GridPosition;
  8.     public Vector2 GridScale = Vector2.one;
  9.     public bool DependsOnObjectTransform;
  10.  
  11.     private BoxCollider gridCollider;
  12.  
  13.     [Range(1,50)]
  14.     public int GridWidth = 1;
  15.     [Range(1,50)]
  16.     public int GridHeight = 1;
  17.     private Vector2 cellSize;
  18.     private Vector3 gridWorldBottomLeft;
  19.  
  20.     public Cell[,] grid;
  21.  
  22.     private Vector3 mousePoint;
  23.  
  24.     // Use this for initialization
  25.     void Start () {
  26.         MapGenerate ();
  27.     }
  28.  
  29.     public void OnValidate () {
  30.         MapGenerate ();
  31.     }
  32.        
  33.     public void MapGenerate () {
  34.         grid = new Cell[GridWidth, GridHeight];
  35.         cellSize = new Vector2 (GridScale.x / GridWidth, GridScale.y / GridHeight);
  36.  
  37.         if (DependsOnObjectTransform) {
  38.             GridPosition = transform.position;
  39.             GridScale = Vector2.right * transform.lossyScale.x + Vector2.up * transform.lossyScale.y;
  40.         }
  41.  
  42.         if (gridCollider == null)
  43.             gridCollider = GetComponent<BoxCollider> ();
  44.         gridCollider.size = Vector3.right * GridScale.x + Vector3.up * GridScale.y;
  45.         gridCollider.center = GridPosition;
  46.         gridWorldBottomLeft = GridPosition - Vector3.right * GridScale.x / 2 - Vector3.up * GridScale.y / 2;
  47.         for (int x = 0; x < GridWidth; x++) {
  48.             for (int y = 0; y < GridHeight; y++) {
  49.                 Vector3 worldPoint = gridWorldBottomLeft + Vector3.right * (x * cellSize.x + cellSize.x / 2) + Vector3.up * (y * cellSize.y + cellSize.y / 2);
  50.                 grid [x, y] = new Cell (true, worldPoint);
  51.             }
  52.         }
  53.     }
  54.  
  55.     void Update () {
  56.         RaycastHit hit;
  57.         if (gridCollider.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, 40f)) {
  58.             mousePoint = hit.point;
  59.         }
  60.     }
  61.  
  62.     Cell GetCellFromWorldPoint (Vector3 worldPoint) {
  63.         Vector3 correctedPoint = Vector3.one - worldPoint;
  64.         float percentX = (correctedPoint.x + GridScale.x / 2) / GridScale.x;
  65.         float percentY = (correctedPoint.y + GridScale.y / 2) / GridScale.y;
  66.         Debug.Log (worldPoint + " | " + worldPoint);
  67.  
  68.         percentX = Mathf.Clamp01 (percentX);
  69.         percentY = Mathf.Clamp01 (percentY);
  70.  
  71.         int x = Mathf.RoundToInt((GridWidth - 1) * percentX);
  72.         int y = Mathf.RoundToInt((GridHeight - 1) * percentY);
  73.  
  74.         return grid [x, y];
  75.     }
  76.  
  77.     void OnDrawGizmos () {
  78.         Gizmos.DrawWireCube (GridPosition, Vector3.right * GridScale.x + Vector3.up * GridScale.y);
  79.         if (grid != null) {
  80.             Cell playerCell = GetCellFromWorldPoint (mousePoint);
  81.             foreach (Cell c in grid) {
  82.                 Gizmos.color = Color.white;
  83.                 if (c.Accessible)
  84.                     Gizmos.DrawWireCube (c.WorldPosition, Vector3.right * cellSize.x + Vector3.up * cellSize.y);
  85.                 if (playerCell == c) {
  86.                     Gizmos.color = Color.red;
  87.                     Gizmos.DrawCube (c.WorldPosition, Vector3.right * cellSize.x + Vector3.up * cellSize.y);
  88.                 }
  89.             }
  90.         }
  91.     }
  92. }
  93.  
  94. public class Cell {
  95.     public bool Accessible;
  96.     public Vector3 WorldPosition;
  97.  
  98.     public Cell (bool _accessible, Vector3 _worldPosition) {
  99.         Accessible = _accessible;
  100.         WorldPosition = _worldPosition;
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement