Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using Sirenix.OdinInspector;
- using UnityEngine;
- using Random = UnityEngine.Random;
- public class GridGizmos : MonoBehaviour
- {
- [SerializeField] int gridWidth;
- [SerializeField] float gizmoSpacing;
- [SerializeField] float gizmoSize;
- [SerializeField] Color colorOff;
- [SerializeField] Color colorOn;
- [SerializeField] bool drawWire;
- List<bool> grid;
- [Button] void Test()
- {
- InitGrid(gridWidth);
- RandomGrid();
- }
- // helper function
- void ForAllInGrid(Action<int,int,int> callback)
- {
- for (int z = 0; z < gridWidth; z++)
- {
- for (int y = 0; y < gridWidth; y++)
- {
- for (int x = 0; x < gridWidth; x++)
- {
- callback(x, y, z);
- }
- }
- }
- }
- void RandomGrid()
- {
- ForAllInGrid((x, y, z) =>
- {
- bool on = Random.Range(0, 100) > 70;
- SetGrid(x,y,z,on);
- });
- }
- void InitGrid(int r)
- {
- int size = r * r * r;
- grid = new List<bool>(size);
- for(int i=0; i<size; i++) grid.Add(false);
- }
- bool GetGrid(int x, int y, int z)
- {
- return grid[x + (y * gridWidth) + (z * gridWidth * gridWidth)];
- }
- void SetGrid(int x, int y, int z, bool val)
- {
- grid[x + (y * gridWidth) + (z * gridWidth * gridWidth)] = val;
- }
- void OnDrawGizmos()
- {
- ForAllInGrid((x, y, z) =>
- {
- bool on = GetGrid(x,y,z);
- Gizmos.color = on ? colorOn : colorOff;
- Vector3 pos = new Vector3(gizmoSpacing*x,gizmoSpacing*y,gizmoSpacing*z);
- pos += transform.position;
- Vector3 size = new Vector3(gizmoSize,gizmoSize,gizmoSize);
- if(drawWire)
- Gizmos.DrawWireCube(pos, size);
- else
- Gizmos.DrawCube(pos, size);
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement