public void AddNewEntry(SimResourceManager resources, float totalAgentBiomass) { nutrients.AddNewEntry(resources.curGlobalNutrients); waste.AddNewEntry(resources.curGlobalDetritus); decomposers.AddNewEntry(resources.curGlobalDecomposers); algae.AddNewEntry(resources.curGlobalAlgaeReservoir); plants.AddNewEntry(resources.curGlobalPlantParticles); zooplankton.AddNewEntry(resources.curGlobalAnimalParticles); vertebrates.AddNewEntry(totalAgentBiomass); }
public StatsHistory(SimResourceManager resources) { this.resources = resources; }
public ZooplanktonManager(SimResourceManager resourcesRef) { resourceManagerRef = resourcesRef; }
/*public void ReviveSelectAnimalParticles(int[] indicesArray, float radius, Vector4 spawnCoords, SimulationStateData simStateDataRef) { // Not used???? * * ComputeBuffer selectRespawnAnimalParticleIndicesCBuffer = new ComputeBuffer(indicesArray.Length, sizeof(int)); * selectRespawnAnimalParticleIndicesCBuffer.SetData(indicesArray); // manually revive specified indices * * int kernelCSReviveSelectAnimalParticles = computeShaderAnimalParticles.FindKernel("CSReviveSelectAnimalParticles"); * computeShaderAnimalParticles.SetBuffer(kernelCSReviveSelectAnimalParticles, "critterSimDataCBuffer", simStateDataRef.critterSimDataCBuffer); * computeShaderAnimalParticles.SetBuffer(kernelCSReviveSelectAnimalParticles, "selectRespawnAnimalParticleIndicesCBuffer", selectRespawnAnimalParticleIndicesCBuffer); * * computeShaderAnimalParticles.SetFloat("_MapSize", SimulationManager._MapSize); * computeShaderAnimalParticles.SetFloat("_Time", Time.realtimeSinceStartup); * //computeShaderAnimalParticles.SetVector("_AnimalSprinklePos", spawnCoords); * //computeShaderAnimalParticles.SetFloat("_AnimalSprinkleRadius", radius); * computeShaderAnimalParticles.SetBuffer(kernelCSReviveSelectAnimalParticles, "animalParticlesWrite", animalParticlesCBufferSwap); * computeShaderAnimalParticles.Dispatch(kernelCSReviveSelectAnimalParticles, indicesArray.Length, 1, 1); * * selectRespawnAnimalParticleIndicesCBuffer.Release(); * }*/ // Go through animalParticleData and check for inactive // determined by current total animal -- done! // if flag on shader for Respawn is on, set to active and initialize public void SimulateAnimalParticles(SimulationStateData simStateDataRef, SimResourceManager resourcesManager) { int kernelCSSimulateAnimalParticles = computeShaderAnimalParticles.FindKernel("CSSimulateAnimalParticles"); computeShaderAnimalParticles.SetBuffer(kernelCSSimulateAnimalParticles, "critterSimDataCBuffer", simStateDataRef.critterSimDataCBuffer); computeShaderAnimalParticles.SetBuffer(kernelCSSimulateAnimalParticles, "animalParticlesRead", animalParticlesCBuffer); computeShaderAnimalParticles.SetBuffer(kernelCSSimulateAnimalParticles, "animalParticlesWrite", animalParticlesCBufferSwap); computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "velocityRead", fluidManager._VelocityPressureDivergenceMain); computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "altitudeRead", renderKing.baronVonTerrain.terrainHeightDataRT); computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "_SpawnDensityMap", renderKing.spiritBrushRT); computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "_ResourceGridRead", simManager.vegetationManager.resourceGridRT1); //computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "_SpawnDensityMap", algaeGridRT1); computeShaderAnimalParticles.SetFloat("_GlobalOxygenLevel", resourcesManager.curGlobalOxygen); // needed? computeShaderAnimalParticles.SetFloat("_GlobalAlgaeLevel", resourceManagerRef.curGlobalPlantParticles); computeShaderAnimalParticles.SetFloat("_SpiritBrushPosNeg", renderKing.spiritBrushPosNeg); computeShaderAnimalParticles.SetFloat("_GlobalWaterLevel", SimulationManager._GlobalWaterLevel); // Movement Params: computeShaderAnimalParticles.SetFloat("_MasterSwimSpeed", settingsRef.zooplanktonSettings._MasterSwimSpeed * Mathf.Lerp(0.01f, 5f, zooplanktonSlotGenomeCurrent.swimSpeed01)); // = 0.35; computeShaderAnimalParticles.SetFloat("_AlignMaskRange", settingsRef.zooplanktonSettings._AlignMaskRange); // = 0.025; computeShaderAnimalParticles.SetFloat("_AlignMaskOffset", settingsRef.zooplanktonSettings._AlignMaskOffset); // = 0.0833; computeShaderAnimalParticles.SetFloat("_AlignSpeedMult", settingsRef.zooplanktonSettings._AlignSpeedMult); // = 0.00015; computeShaderAnimalParticles.SetFloat("_AttractMag", settingsRef.zooplanktonSettings._AttractMag * Mathf.Lerp(0.1f, 10f, zooplanktonSlotGenomeCurrent.attractForce01)); // = 0.0000137; computeShaderAnimalParticles.SetFloat("_AttractMaskMaxDistance", settingsRef.zooplanktonSettings._AttractMaskMaxDistance * Mathf.Lerp(0.1f, 10f, zooplanktonSlotGenomeCurrent.attractForce01)); // = 0.0036; computeShaderAnimalParticles.SetFloat("_AttractMaskOffset", settingsRef.zooplanktonSettings._AttractMaskOffset); // = 0.5; computeShaderAnimalParticles.SetFloat("_SwimNoiseMag", settingsRef.zooplanktonSettings._SwimNoiseMag); // = 0.000086; computeShaderAnimalParticles.SetFloat("_SwimNoiseFreqMin", settingsRef.zooplanktonSettings._SwimNoiseFreqMin); // = 0.00002 computeShaderAnimalParticles.SetFloat("_SwimNoiseFreqRange", settingsRef.zooplanktonSettings._SwimNoiseFreqRange); // = 0.0002 computeShaderAnimalParticles.SetFloat("_SwimNoiseOnOffFreq", settingsRef.zooplanktonSettings._SwimNoiseOnOffFreq); // = 0.0001 computeShaderAnimalParticles.SetFloat("_ShoreCollisionMag", settingsRef.zooplanktonSettings._ShoreCollisionMag); // = 0.0065; computeShaderAnimalParticles.SetFloat("_ShoreCollisionDistOffset", settingsRef.zooplanktonSettings._ShoreCollisionDistOffset); // = 0.15; computeShaderAnimalParticles.SetFloat("_ShoreCollisionDistSlope", settingsRef.zooplanktonSettings._ShoreCollisionDistSlope); // = 3.5; computeShaderAnimalParticles.SetFloat("_AgingMult", Mathf.Lerp(0.1f, 10f, zooplanktonSlotGenomeCurrent.agingRate01)); //computeShaderAnimalParticles.SetTexture(kernelCSSimulateAnimalParticles, "animalParticlesNearestCrittersRT", animalParticlesNearestCritters1); computeShaderAnimalParticles.SetFloat("_MapSize", SimulationManager._MapSize); computeShaderAnimalParticles.SetFloat("_Time", Time.realtimeSinceStartup); //float randRoll = UnityEngine.Random.Range(0f, 1f); computeShaderAnimalParticles.SetFloat("_RespawnAnimalParticles", 1f); computeShaderAnimalParticles.SetFloat("_IsBrushing", 1f); // brushF); // Need to compute when they should be allowed to spawn, how to keep track of resources used/transferred?? computeShaderAnimalParticles.SetFloat("_SpawnPosX", Random.Range(0.1f, 0.9f)); // UPDATE THIS!!! **** computeShaderAnimalParticles.SetFloat("_SpawnPosY", Random.Range(0.1f, 0.9f)); float spawnLerp = simManager.trophicLayersManager.GetLayerLerp(KnowledgeMapId.Microbes, simManager.simAgeTimeSteps); // no need to still do this??? **** float spawnRadius = Mathf.Lerp(1f, SimulationManager._MapSize, spawnLerp); Vector4 spawnPos = new Vector4(simManager.trophicLayersManager.zooplanktonOriginPos.x, simManager.trophicLayersManager.zooplanktonOriginPos.y, 0f, 0f); computeShaderAnimalParticles.SetFloat("_SpawnRadius", spawnRadius); computeShaderAnimalParticles.SetVector("_SpawnPos", spawnPos); float minParticleSize = 0.1f; // settingsRef.avgAnimalParticleRadius / settingsRef.animalParticleRadiusVariance; float maxParticleSize = 0.2f; // settingsRef.avgAnimalParticleRadius * settingsRef.animalParticleRadiusVariance; computeShaderAnimalParticles.SetFloat("_MinParticleSize", minParticleSize); computeShaderAnimalParticles.SetFloat("_MaxParticleSize", maxParticleSize); // Revisit:::: computeShaderAnimalParticles.SetFloat("_ParticleNutrientDensity", 10f); // settingsRef.animalParticleNutrientDensity); computeShaderAnimalParticles.SetFloat("_AnimalParticleRegrowthRate", 0.01f); // settingsRef.animalParticleRegrowthRate); // ************ HARD-CODED!!!! computeShaderAnimalParticles.SetBuffer(kernelCSSimulateAnimalParticles, "_RepresentativeGenomeCBuffer", zooplanktonRepresentativeGenomeCBuffer); computeShaderAnimalParticles.Dispatch(kernelCSSimulateAnimalParticles, 1, 1, 1); // Copy/Swap Animal Particle Buffer: int kernelCSCopyAnimalParticlesBuffer = computeShaderAnimalParticles.FindKernel("CSCopyAnimalParticlesBuffer"); computeShaderAnimalParticles.SetBuffer(kernelCSCopyAnimalParticlesBuffer, "animalParticlesRead", animalParticlesCBufferSwap); computeShaderAnimalParticles.SetBuffer(kernelCSCopyAnimalParticlesBuffer, "animalParticlesWrite", animalParticlesCBuffer); computeShaderAnimalParticles.Dispatch(kernelCSCopyAnimalParticlesBuffer, 1, 1, 1); }