Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 public StatsHistory(SimResourceManager resources)
 {
     this.resources = resources;
 }
Exemplo n.º 3
0
 public ZooplanktonManager(SimResourceManager resourcesRef)
 {
     resourceManagerRef = resourcesRef;
 }
Exemplo n.º 4
0
    /*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);
    }