107 lines
2.7 KiB
C#
107 lines
2.7 KiB
C#
using UnityEditor.TextCore.Text;
|
|
using UnityEngine;
|
|
using static UnityEngine.GraphicsBuffer;
|
|
using static UnityEngine.UIElements.UxmlAttributeDescription;
|
|
|
|
public class NutrientController : MonoBehaviour
|
|
{
|
|
private float[,] nutrientMap;
|
|
[SerializeField, Range(10, 100)] int sizeX;
|
|
[SerializeField, Range(10, 100)] int sizeY;
|
|
[SerializeField] MeshRenderer meshRenderer;
|
|
|
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
|
void Start()
|
|
{
|
|
nutrientMap = new float[sizeX, sizeY];
|
|
for(int r = 0; r < sizeX; r ++)
|
|
{
|
|
for(int c = 0; c < sizeY; c++)
|
|
{
|
|
nutrientMap[r, c] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
|
|
public float GetNutrients(float x, float y)
|
|
{
|
|
int locX = Mathf.FloorToInt(x * sizeX);
|
|
int locY = Mathf.FloorToInt(y * sizeY);
|
|
|
|
return nutrientMap[locX, locY];
|
|
}
|
|
|
|
public void UseNutrients(float x, float y, float used)
|
|
{
|
|
int locX = Mathf.FloorToInt(x * sizeX);
|
|
int locY = Mathf.FloorToInt(y * sizeY);
|
|
|
|
nutrientMap[locX, locY] -= used;
|
|
}
|
|
|
|
public void AddNutrients(float x, float y, float added)
|
|
{
|
|
int locX = Mathf.FloorToInt(x * sizeX);
|
|
int locY = Mathf.FloorToInt(y * sizeY);
|
|
|
|
nutrientMap[locX, locY] += added;
|
|
}
|
|
|
|
private void Render()
|
|
{
|
|
Texture2D texture = new Texture2D(sizeX, sizeY);
|
|
for (int r = 0; r < sizeX; r++)
|
|
{
|
|
for (int c = 0; c < sizeY; c++)
|
|
{
|
|
float colorValue = nutrientMap[r, c];
|
|
texture.SetPixel(r, c, new Color(colorValue, colorValue, colorValue));
|
|
}
|
|
}
|
|
|
|
texture.Apply();
|
|
meshRenderer.material.mainTexture = texture;
|
|
}
|
|
|
|
private void ConsoleDump()
|
|
{
|
|
string toPrint = "\n";
|
|
for (int r = 0; r < sizeX; r++)
|
|
{
|
|
for (int c = 0; c < sizeY; c++)
|
|
{
|
|
toPrint += nutrientMap[r, c] + " ";
|
|
}
|
|
toPrint += "\n";
|
|
}
|
|
Debug.Log(toPrint);
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
[UnityEditor.CustomEditor(typeof(NutrientController))]
|
|
|
|
public class NutrientControllerEditor: UnityEditor.Editor
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
base.OnInspectorGUI();
|
|
if (GUILayout.Button("Sample Button"))
|
|
{
|
|
(target as NutrientController).Render();
|
|
}
|
|
|
|
if(GUILayout.Button("Dump it"))
|
|
{
|
|
(target as NutrientController).ConsoleDump();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|