From 7097c8ce53e814027bab2376995fb3b1d38462af Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Wed, 6 Aug 2025 22:58:01 -0700 Subject: [PATCH] Updated nutrient lookup to include radius around plant based on size of plant --- .../Materials/{test.mat => nutrientMap.mat} | 22 ++++--- .../{test.mat.meta => nutrientMap.mat.meta} | 0 .../GameAssets/Scripts/NutrientController.cs | 57 +++++++++++------- Assets/GameAssets/Scripts/Plant.cs | 9 ++- Assets/GameAssets/Scripts/PlantController.cs | 2 +- ...f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset | Bin 0 -> 557396 bytes ...ebe-8a30-4615-87bf-8a9df8d4f7ac.asset.meta | 8 +++ 7 files changed, 63 insertions(+), 35 deletions(-) rename Assets/GameAssets/Materials/{test.mat => nutrientMap.mat} (92%) rename Assets/GameAssets/Materials/{test.mat.meta => nutrientMap.mat.meta} (100%) create mode 100644 Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset create mode 100644 Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset.meta diff --git a/Assets/GameAssets/Materials/test.mat b/Assets/GameAssets/Materials/nutrientMap.mat similarity index 92% rename from Assets/GameAssets/Materials/test.mat rename to Assets/GameAssets/Materials/nutrientMap.mat index e071ddf..a9f8215 100644 --- a/Assets/GameAssets/Materials/test.mat +++ b/Assets/GameAssets/Materials/nutrientMap.mat @@ -20,20 +20,24 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: test + m_Name: nutrientMap m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON + - _SURFACE_TYPE_TRANSPARENT m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 + m_CustomRenderQueue: 3000 stringTagMap: - RenderType: Opaque + RenderType: Transparent disabledShaderPasses: - MOTIONVECTORS + - DepthOnly + - SHADOWCASTER m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -63,7 +67,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 97c1df594a1bc8447a058044bea5a739, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: @@ -108,8 +112,8 @@ Material: - _Cutoff: 0.5 - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 + - _DstBlend: 10 + - _DstBlendAlpha: 10 - _EnvironmentReflections: 1 - _GlossMapScale: 0 - _Glossiness: 0 @@ -124,10 +128,10 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _SrcBlendAlpha: 1 - - _Surface: 0 + - _Surface: 1 - _WorkflowMode: 1 - _XRMotionVectorsPass: 1 - - _ZWrite: 1 + - _ZWrite: 0 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/GameAssets/Materials/test.mat.meta b/Assets/GameAssets/Materials/nutrientMap.mat.meta similarity index 100% rename from Assets/GameAssets/Materials/test.mat.meta rename to Assets/GameAssets/Materials/nutrientMap.mat.meta diff --git a/Assets/GameAssets/Scripts/NutrientController.cs b/Assets/GameAssets/Scripts/NutrientController.cs index 08247d7..e7b3961 100644 --- a/Assets/GameAssets/Scripts/NutrientController.cs +++ b/Assets/GameAssets/Scripts/NutrientController.cs @@ -1,3 +1,4 @@ +using System; using UnityEditor.TextCore.Text; using UnityEngine; using static UnityEngine.GraphicsBuffer; @@ -29,15 +30,43 @@ public class NutrientController : MonoBehaviour } - public float GetNutrients(float x, float y) + public float GetNutrients(float x, float y, float radius) { int locX = Mathf.FloorToInt(x * sizeX); int locY = Mathf.FloorToInt(y * sizeY); - return nutrientMap[locX, locY]; + int ceilRad = Mathf.CeilToInt(radius); + float totalNutrients = 0; + + for(int r = -ceilRad; r < ceilRad; r++) + { + for (int c = -ceilRad; c < ceilRad; c++) + { + if((locX + ceilRad > 0 && locX + ceilRad < sizeX) && (locY + ceilRad > 0 && locY + ceilRad < sizeY)) + { + int fraction = Mathf.Abs(r) + Mathf.Abs(c); + if(fraction == 0) + { + totalNutrients += nutrientMap[locX + ceilRad, locY + ceilRad]; + } + else + { + totalNutrients += nutrientMap[locX + ceilRad, locY + ceilRad] / (fraction * 2); + } + } + } + } + + if(totalNutrients == 0) + { + float thing = nutrientMap[locX, locY]; + Debug.Log("HERE" + thing); + } + + return totalNutrients; } - public void UseNutrients(float x, float y, float used) + public void UseNutrients(float x, float y, float radius, float used) { int locX = Mathf.FloorToInt(x * sizeX); int locY = Mathf.FloorToInt(y * sizeY); @@ -61,26 +90,13 @@ public class NutrientController : MonoBehaviour for (int c = 0; c < sizeY; c++) { float colorValue = nutrientMap[r, c]; - texture.SetPixel(r, c, new Color(colorValue, colorValue, colorValue)); + texture.SetPixel(r, c, new Color(colorValue, colorValue, colorValue, 0.5f)); } } 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); + meshRenderer.gameObject.SetActive(true); } #if UNITY_EDITOR @@ -95,11 +111,6 @@ public class NutrientController : MonoBehaviour { (target as NutrientController).Render(); } - - if(GUILayout.Button("Dump it")) - { - (target as NutrientController).ConsoleDump(); - } } } #endif diff --git a/Assets/GameAssets/Scripts/Plant.cs b/Assets/GameAssets/Scripts/Plant.cs index d82b618..0e3ab32 100644 --- a/Assets/GameAssets/Scripts/Plant.cs +++ b/Assets/GameAssets/Scripts/Plant.cs @@ -42,9 +42,14 @@ public class Plant : MonoBehaviour float x = transform.position.x / terrain.terrainData.size.x; float y = transform.position.z / terrain.terrainData.size.z; + float size = visual.transform.localScale.x; + + float nutrientsAvailable = nutrientCont.GetNutrients(x, y, size); + + Debug.Log($"Nutrients available {nutrientsAvailable}"); - float nutrientsAvailable = nutrientCont.GetNutrients(x, y); float nutrientsNeededFrame = (nutrientNeed * Time.deltaTime); + if (nutrientsNeededFrame > nutrientsAvailable) { healthCurrent -= Time.deltaTime * 0.1f * healthMax; @@ -52,7 +57,7 @@ public class Plant : MonoBehaviour else { visual.transform.localScale += visual.transform.localScale * (growthRate * Time.deltaTime); - nutrientCont.UseNutrients(x, y, nutrientsNeededFrame); + nutrientCont.UseNutrients(x, y, size, nutrientsNeededFrame); nutrientsConsumed += nutrientsNeededFrame; } diff --git a/Assets/GameAssets/Scripts/PlantController.cs b/Assets/GameAssets/Scripts/PlantController.cs index 7659f01..d09e7cd 100644 --- a/Assets/GameAssets/Scripts/PlantController.cs +++ b/Assets/GameAssets/Scripts/PlantController.cs @@ -18,7 +18,7 @@ public class PlantController : MonoBehaviour xBound = terrain.GetComponent().terrainData.size.x; zBound = terrain.GetComponent().terrainData.size.z; - for (int i = 0; i < 100; i++) + for (int i = 0; i < 1; i++) { GameObject newPlant = Instantiate(plantPrefab); newPlant.GetComponent().SetVisual(plantModels[Random.Range(0, plantModels.Count - 1)]); diff --git a/Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset b/Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset new file mode 100644 index 0000000000000000000000000000000000000000..a09d70fb976b993ec9e45bdb5e84b6c28a223e1e GIT binary patch literal 557396 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 literal 0 HcmV?d00001 diff --git a/Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset.meta b/Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset.meta new file mode 100644 index 0000000..751ce21 --- /dev/null +++ b/Assets/TerrainData_f1d78ebe-8a30-4615-87bf-8a9df8d4f7ac.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a76965b09359b2745aeaf339a493e753 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 15600000 + userData: + assetBundleName: + assetBundleVariant: