Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.65 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using Sirenix.OdinInspector;
  4. using UnityEngine;
  5. using Random = UnityEngine.Random;
  6.  
  7. public class GridGizmos : MonoBehaviour
  8. {
  9.     [SerializeField] int gridWidth;
  10.     [SerializeField] float gizmoSpacing;
  11.     [SerializeField] float gizmoSize;
  12.     [SerializeField] Color colorOff;
  13.     [SerializeField] Color colorOn;
  14.     [SerializeField] bool drawWire;
  15.     List<bool> grid;
  16.  
  17.     [Button] void Test()
  18.     {
  19.         InitGrid(gridWidth);
  20.         RandomGrid();
  21.     }
  22.  
  23.     // helper function
  24.     void ForAllInGrid(Action<int,int,int> callback)
  25.     {
  26.         for (int z = 0; z < gridWidth; z++)
  27.         {
  28.             for (int y = 0; y < gridWidth; y++)
  29.             {
  30.                 for (int x = 0; x < gridWidth; x++)
  31.                 {
  32.                     callback(x, y, z);
  33.                 }
  34.             }
  35.         }
  36.     }
  37.  
  38.     void RandomGrid()
  39.     {
  40.         ForAllInGrid((x, y, z) =>
  41.         {
  42.             bool on = Random.Range(0, 100) > 70;
  43.             SetGrid(x,y,z,on);
  44.         });
  45.     }
  46.    
  47.     void InitGrid(int r)
  48.     {
  49.         int size = r * r * r;
  50.         grid = new List<bool>(size);
  51.         for(int i=0; i<size; i++) grid.Add(false);
  52.     }
  53.  
  54.     bool GetGrid(int x, int y, int z)
  55.     {
  56.         return grid[x + (y * gridWidth) + (z * gridWidth * gridWidth)];
  57.     }
  58.     void SetGrid(int x, int y, int z, bool val)
  59.     {
  60.         grid[x + (y * gridWidth) + (z * gridWidth * gridWidth)] = val;
  61.     }
  62.  
  63.     void OnDrawGizmos()
  64.     {
  65.         ForAllInGrid((x, y, z) =>
  66.         {
  67.             bool on = GetGrid(x,y,z);
  68.             Gizmos.color = on ? colorOn : colorOff;
  69.            
  70.             Vector3 pos = new Vector3(gizmoSpacing*x,gizmoSpacing*y,gizmoSpacing*z);
  71.             pos += transform.position;
  72.             Vector3 size = new Vector3(gizmoSize,gizmoSize,gizmoSize);
  73.            
  74.             if(drawWire)
  75.                 Gizmos.DrawWireCube(pos, size);
  76.             else
  77.                 Gizmos.DrawCube(pos, size);
  78.            
  79.         });
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement