Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- [RequireComponent(typeof(BoxCollider))]
- public class GridMap : MonoBehaviour {
- public Vector3 GridPosition;
- public Vector2 GridScale = Vector2.one;
- public bool DependsOnObjectTransform;
- private BoxCollider gridCollider;
- [Range(1,50)]
- public int GridWidth = 1;
- [Range(1,50)]
- public int GridHeight = 1;
- private Vector2 cellSize;
- private Vector3 gridWorldBottomLeft;
- public Cell[,] grid;
- private Vector3 mousePoint;
- // Use this for initialization
- void Start () {
- MapGenerate ();
- }
- public void OnValidate () {
- MapGenerate ();
- }
- public void MapGenerate () {
- grid = new Cell[GridWidth, GridHeight];
- cellSize = new Vector2 (GridScale.x / GridWidth, GridScale.y / GridHeight);
- if (DependsOnObjectTransform) {
- GridPosition = transform.position;
- GridScale = Vector2.right * transform.lossyScale.x + Vector2.up * transform.lossyScale.y;
- }
- if (gridCollider == null)
- gridCollider = GetComponent<BoxCollider> ();
- gridCollider.size = Vector3.right * GridScale.x + Vector3.up * GridScale.y;
- gridCollider.center = GridPosition;
- gridWorldBottomLeft = GridPosition - Vector3.right * GridScale.x / 2 - Vector3.up * GridScale.y / 2;
- for (int x = 0; x < GridWidth; x++) {
- for (int y = 0; y < GridHeight; y++) {
- Vector3 worldPoint = gridWorldBottomLeft + Vector3.right * (x * cellSize.x + cellSize.x / 2) + Vector3.up * (y * cellSize.y + cellSize.y / 2);
- grid [x, y] = new Cell (true, worldPoint);
- }
- }
- }
- void Update () {
- RaycastHit hit;
- if (gridCollider.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, 40f)) {
- mousePoint = hit.point;
- }
- }
- Cell GetCellFromWorldPoint (Vector3 worldPoint) {
- Vector3 correctedPoint = Vector3.one - worldPoint;
- float percentX = (correctedPoint.x + GridScale.x / 2) / GridScale.x;
- float percentY = (correctedPoint.y + GridScale.y / 2) / GridScale.y;
- Debug.Log (worldPoint + " | " + worldPoint);
- percentX = Mathf.Clamp01 (percentX);
- percentY = Mathf.Clamp01 (percentY);
- int x = Mathf.RoundToInt((GridWidth - 1) * percentX);
- int y = Mathf.RoundToInt((GridHeight - 1) * percentY);
- return grid [x, y];
- }
- void OnDrawGizmos () {
- Gizmos.DrawWireCube (GridPosition, Vector3.right * GridScale.x + Vector3.up * GridScale.y);
- if (grid != null) {
- Cell playerCell = GetCellFromWorldPoint (mousePoint);
- foreach (Cell c in grid) {
- Gizmos.color = Color.white;
- if (c.Accessible)
- Gizmos.DrawWireCube (c.WorldPosition, Vector3.right * cellSize.x + Vector3.up * cellSize.y);
- if (playerCell == c) {
- Gizmos.color = Color.red;
- Gizmos.DrawCube (c.WorldPosition, Vector3.right * cellSize.x + Vector3.up * cellSize.y);
- }
- }
- }
- }
- }
- public class Cell {
- public bool Accessible;
- public Vector3 WorldPosition;
- public Cell (bool _accessible, Vector3 _worldPosition) {
- Accessible = _accessible;
- WorldPosition = _worldPosition;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement