示例#1
0
 private void Awake()
 {
     if (_instance == null)
     {
         _instance = this;
     }
 }
示例#2
0
    private void Awake()
    {
        if (PlayerPrefs.HasKey("exitid"))
        {
            id = PlayerPrefs.GetInt("exitid") + 1;
            PlayerPrefs.SetInt("exitid", id);
        }
        else
        {
            PlayerPrefs.SetInt("exitid", id);
        }
        numSpawnRoads = GameObject.FindGameObjectsWithTag("Respawn").Length;

        Dictionary <int, float> weightedSpawnRatesDict = SimSettings.getDictionary();
        float weight;

        if (weightedSpawnRatesDict.TryGetValue(id + numSpawnRoads, out weight))
        {
            exitRate = (int)weight;
        }
        else
        {
            exitRate = 1;
        }
    }
示例#3
0
 // Start is called before the first frame update
 void Start()
 {
     myRigid     = GetComponent <Rigidbody>();
     simSettings = FindObjectOfType <SimSettings>();
     pitch       = transform.eulerAngles.x;
     yaw         = transform.eulerAngles.y;
 }
示例#4
0
    public void optionClicked()
    {
        SimSettings simSettings = FindObjectOfType <SimSettings>();

        rabbitList = simSettings.rabbitOption;
        foxList    = simSettings.foxOption;
        wolfList   = simSettings.wolfOption;
        ShowGraph();
    }
示例#5
0
    public void populationClicked()
    {
        SimSettings simSettings = FindObjectOfType <SimSettings>();

        rabbitList = simSettings.rabbitPop;
        foxList    = simSettings.foxPop;
        wolfList   = simSettings.wolfPop;
        ShowGraph();
    }
示例#6
0
 public DiceRoller(IList <CharacterSheet> characterSheetsToUse, SimSettings simSettings, ref TextBox textBoxOutputWindow)
 {
     _CharacterSheets.Clear();
     foreach (CharacterSheet sheet in characterSheetsToUse)
     {
         _CharacterSheets.Add(sheet);
     }
     _CharacterSheets.Reverse();
     _SimSettings = simSettings;
     _TextBox     = textBoxOutputWindow;
     _String.Clear();
 }
示例#7
0
    void Start()
    {
        twoLanePathGenerator = FindObjectOfType <TwoLanePathGenerator>();
        if (direction == LightDirection.North)
        {
            carDirection = new Vector3(0, 0, 0);
        }
        if (direction == LightDirection.East)
        {
            carDirection = new Vector3(0, 0, 270);
        }
        if (direction == LightDirection.South)
        {
            carDirection = new Vector3(0, 0, 180);
        }
        if (direction == LightDirection.West)
        {
            carDirection = new Vector3(0, 0, 90);
        }


        //create unique ID for spawn road so weighted rate can get assigned



        //setup generation for cars
        //On timer call Spawn()
        Dictionary <int, float> weightedSpawnRatesDict = SimSettings.getDictionary();
        float weight;

        if (weightedSpawnRatesDict.TryGetValue(id, out weight))
        {
            spawnRate = weight / Application.targetFrameRate;
        }
        else
        {
            spawnRate = 10.0f / Application.targetFrameRate;
        }

        if (PlayerPrefs.GetString("sim_name") == "LargeTwoLaneGrid")
        {
            print("large two lane");
            spawnRate *= 2;
        }

        InvokeRepeating("Spawn", 0.0f, spawnRate);
    }
示例#8
0
    public void GeneratePlants()
    {
        SimSettings simSettings = FindObjectOfType <SimSettings>();
        int         terrainSize = simSettings.terrainSize;
        int         objectThickness;

        if (simSettings.stage == 3)
        {
            objectThickness = 50;
        }
        else
        {
            objectThickness = 500;
        }
        float[,] blockHeights = simSettings.blockHeights;

        for (int i = 0; i < terrainSize; i++)
        {
            for (int v = 0; v < terrainSize; v++)
            {
                float xCoord = (v / 40f) + simSettings.objectOffset;
                float zCoord = (i / 40f) + simSettings.objectOffset;

                float tempPerlin = Mathf.PerlinNoise(xCoord, zCoord);
                if (tempPerlin <= 0)
                {
                    tempPerlin = 0.0001f;
                }
                int isSpawn    = Random.Range(0, (int)Mathf.Round(objectThickness / tempPerlin));
                int rotation   = Random.Range(0, 3);
                int whatObject = Random.Range(0, plants.Length);
                if (blockHeights[v, i] > 10 && isSpawn == 5 && !simSettings.usedBlocks[v, i])
                {
                    GameObject newObject = Instantiate(plants[whatObject], new Vector3(v + 0.5f, blockHeights[v, i], terrainSize - i - 0.5f), Quaternion.Euler(0, rotation * 90f, 0));
                    newObject.transform.parent   = gameObject.transform;
                    simSettings.usedBlocks[v, i] = true;
                }
            }
        }
        if (simSettings.stage == 3)
        {
            simSettings.stage += 1;
        }
    }
 public void StartSimulation()
 {
     SimSettings.AddSpawnRates();
     SceneManager.LoadScene(PlayerPrefs.GetString("sim_name"));
 }
示例#10
0
    public void GeneratePlane()
    {
        //Init Variables
        ObjectGenerator objectGenerator = FindObjectOfType <ObjectGenerator>();
        SimSettings     simsettings     = FindObjectOfType <SimSettings>();

        terrainSize = simsettings.terrainSize;
        int  arraySize = (terrainSize + 1) * (terrainSize + 1);
        Mesh newMesh   = new Mesh();

        Vector3[] vertices  = new Vector3[arraySize];
        Vector2[] uvs       = new Vector2[arraySize];
        int[]     triangles = new int[terrainSize * terrainSize * 2 * 3];
        float     topVertex = Mathf.NegativeInfinity;
        float     botVertex = Mathf.Infinity;

        // Set Vertex Values
        int vertexPos = 0;

        for (int i = terrainSize / 2; i >= ((terrainSize / 2) * (-1)); i--)
        {
            for (int v = terrainSize / 2; v >= ((terrainSize / 2) * (-1)); v--)
            {
                vertices[vertexPos] = new Vector3(v, 0, i);
                vertexPos          += 1;
                ;
            }
        }

        //Set UV values
        for (int i = 0, z = 0; z < terrainSize + 1; z++)
        {
            for (int x = 0; x < terrainSize + 1; x++)
            {
                uvs[i] = new Vector2((float)x / (terrainSize + 1), (float)z / (terrainSize + 1));
                i++;
            }
        }

        //Set Triangle Values
        int triPos = 0;

        for (int i = 0; i < arraySize - (terrainSize + 1); i++)
        {
            if (CheckEnd(i) || i == 0)
            {
                triangles[triPos] = i;
                triPos           += 1;
                triangles[triPos] = i + (terrainSize + 1);
                triPos           += 1;
                triangles[triPos] = i + (terrainSize + 2);
                triPos           += 1;

                triangles[triPos] = i;
                triPos           += 1;
                triangles[triPos] = i + (terrainSize + 2);
                triPos           += 1;
                triangles[triPos] = i + 1;
                triPos           += 1;
            }
        }

        // Add Smaller Noise
        int offset = Random.Range(0, 100);

        for (int i = 0; i < vertices.Length; i++)
        {
            float xVertex = vertices[i].x + (terrainSize / 2) + offset;
            float zVertex = vertices[i].z + (terrainSize / 2) + offset;
            vertices[i] = new Vector3(vertices[i].x, Mathf.PerlinNoise(xVertex / 3f, zVertex / 3f), vertices[i].z);
        }

        // Add Larger Noise
        offset = Random.Range(0, 100);
        for (int i = 0; i < vertices.Length; i++)
        {
            float xVertex = vertices[i].x + (terrainSize / 2) + offset;
            float zVertex = vertices[i].z + (terrainSize / 2) + offset;
            vertices[i] = new Vector3(vertices[i].x, vertices[i].y + Mathf.PerlinNoise(xVertex / 15f, zVertex / 15f) * 7f, vertices[i].z);
        }

        // Add Even Larger Noise
        offset = Random.Range(0, 100);
        for (int i = 0; i < vertices.Length; i++)
        {
            float xVertex = vertices[i].x + (terrainSize / 2) + offset;
            float zVertex = vertices[i].z + (terrainSize / 2) + offset;
            vertices[i] = new Vector3(vertices[i].x, vertices[i].y + Mathf.PerlinNoise(xVertex / 60f, zVertex / 60f) * 15f, vertices[i].z);
        }

        GetTopBotVertex(vertices, ref topVertex, ref botVertex);

        // Lower The Edge Vertices
        vertices = LowerEdges(vertices);

        // Colors
        Color[] colors = new Color[arraySize];
        for (int i = 0, z = 0; z < terrainSize + 1; z++)
        {
            for (int x = 0; x < terrainSize + 1; x++)
            {
                float height = vertices[i].y;
                if (height < botVertex)
                {
                    height = botVertex;
                }
                height    = Mathf.InverseLerp((float)botVertex, (float)topVertex, height);
                colors[i] = gradient.Evaluate(height);
                i++;
            }
        }

        // Set ObjectGenerator Vertices Before Flat Shading
        objectGenerator.vertices = vertices;

        // Flat Shader Code
        Vector3[] flatShadedVertices = new Vector3[triangles.Length];
        Vector2[] flatShadedUvs      = new Vector2[triangles.Length];
        Color[]   flatShadedColors   = new Color[triangles.Length];
        for (int i = 0; i < triangles.Length; i++)
        {
            flatShadedVertices[i] = vertices[triangles[i]];
            flatShadedUvs[i]      = uvs[triangles[i]];
            flatShadedColors[i]   = colors[triangles[i]];
            triangles[i]          = i;
        }
        vertices = flatShadedVertices;
        uvs      = flatShadedUvs;
        colors   = flatShadedColors;

        // Set Mesh to newMesh
        newMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
        newMesh.vertices    = vertices;
        newMesh.triangles   = triangles;
        newMesh.colors      = colors;
        newMesh.RecalculateNormals();
        GetComponent <MeshFilter>().mesh         = newMesh;
        GetComponent <MeshCollider>().sharedMesh = newMesh;

        gameObject.transform.position = new Vector3(terrainSize / 2, 0f, terrainSize / 2);
        water.transform.position      = new Vector3(terrainSize / 2, 9f, terrainSize / 2);
        if (terrainSize == 128)
        {
            water.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        }
        simsettings.stage += 1;
    }
示例#11
0
 // Start is called before the first frame update
 void Start()
 {
     simSettings = FindObjectOfType <SimSettings>();
     StartCoroutine("spawnNewPlant");
 }
示例#12
0
    public void GenerateObjects()
    {
        SimSettings simSettings     = FindObjectOfType <SimSettings>();
        int         terrainSize     = simSettings.terrainSize;
        int         objectThickness = simSettings.objectThickness;

        bool[,] usedBlocks     = new bool[terrainSize, terrainSize];
        float[,] bottomHeights = new float[terrainSize, terrainSize];
        float[,] blockHeights  = new float[terrainSize, terrainSize];

        // Set Array Heights
        for (int i = 0; i < terrainSize; i++)
        {
            for (int v = 0; v < terrainSize; v++)
            {
                float botHeight = Mathf.Infinity;
                float topHeight = Mathf.NegativeInfinity;
                int[] corners   = new int[]
                {
                    (i * terrainSize) + v + i,
                    (i * terrainSize) + v + i + 1,
                    (i * terrainSize) + terrainSize + i + v + 1,
                    (i * terrainSize) + terrainSize + i + v + 2,
                };

                foreach (int position in corners)
                {
                    if (vertices[position].y > topHeight)
                    {
                        topHeight = vertices[position].y;
                    }
                    if (vertices[position].y < botHeight)
                    {
                        botHeight = vertices[position].y;
                    }
                }

                blockHeights[terrainSize - 1 - v, i]  = (topHeight + botHeight) / 2;
                bottomHeights[terrainSize - 1 - v, i] = botHeight;
            }
        }

        for (int i = 0; i < terrainSize; i++)
        {
            for (int v = 0; v < terrainSize; v++)
            {
                float xCoord = (v / 40f) + simSettings.objectOffset;
                float zCoord = (i / 40f) + simSettings.objectOffset;

                float tempPerlin = Mathf.PerlinNoise(xCoord, zCoord);
                if (tempPerlin <= 0)
                {
                    tempPerlin = 0.0001f;
                }
                int isSpawn    = Random.Range(0, (int)Mathf.Round(objectThickness / tempPerlin));
                int rotation   = Random.Range(0, 3);
                int whatObject = Random.Range(0, objects.Length);
                if (bottomHeights[v, i] > 10 && isSpawn == 5)
                {
                    GameObject newObject = Instantiate(objects[whatObject], new Vector3(v + 0.5f, bottomHeights[v, i], terrainSize - i - 0.5f), Quaternion.Euler(0, rotation * 90f, 0));
                    newObject.transform.parent = gameObject.transform;
                    usedBlocks[v, i]           = true;
                }
            }
        }

        simSettings.blockHeights = blockHeights;
        simSettings.usedBlocks   = usedBlocks;
        simSettings.stage       += 1;
    }
示例#13
0
    public void GenerateAnimals()
    {
        SimSettings simSettings = FindObjectOfType <SimSettings>();

        Stat[] rabbitParentStats = new Stat[]
        {
            simSettings.defaultRabbitStat,
            simSettings.defaultRabbitStat
        };
        Stat[] foxParentStats = new Stat[]
        {
            simSettings.defaultFoxStat,
            simSettings.defaultFoxStat
        };
        Stat[] wolfParentStats = new Stat[]
        {
            simSettings.defaultWolfStat,
            simSettings.defaultWolfStat
        };

        int rabbitsLeft = simSettings.rabbits;
        int foxesLeft   = simSettings.foxes;
        int wolvesLeft  = simSettings.wolves;
        int xPos;
        int yPos;

        while (true)
        {
            if (rabbitsLeft == 0)
            {
                break;
            }
            xPos = Random.Range(0, simSettings.terrainSize);
            yPos = Random.Range(0, simSettings.terrainSize);
            if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11)
            {
                GameObject newAnimal = Instantiate(rabbit, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity);
                Animal     script    = newAnimal.GetComponent <Animal>();
                script.xPos        = xPos;
                script.yPos        = yPos;
                script.parentStats = rabbitParentStats;
                simSettings.usedBlocks[xPos, yPos] = true;
                newAnimal.transform.parent         = gameObject.transform;
                rabbitsLeft -= 1;
            }
        }
        while (true)
        {
            if (foxesLeft == 0)
            {
                break;
            }
            xPos = Random.Range(0, simSettings.terrainSize);
            yPos = Random.Range(0, simSettings.terrainSize);
            if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11)
            {
                GameObject newAnimal = Instantiate(fox, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity);
                Animal     script    = newAnimal.GetComponent <Animal>();
                script.xPos        = xPos;
                script.yPos        = yPos;
                script.parentStats = foxParentStats;
                simSettings.usedBlocks[xPos, yPos] = true;
                newAnimal.transform.parent         = gameObject.transform;
                foxesLeft -= 1;
            }
        }
        while (true)
        {
            if (wolvesLeft == 0)
            {
                break;
            }
            xPos = Random.Range(0, simSettings.terrainSize);
            yPos = Random.Range(0, simSettings.terrainSize);
            if (!simSettings.usedBlocks[xPos, yPos] && simSettings.blockHeights[xPos, yPos] >= 11)
            {
                GameObject newAnimal = Instantiate(wolf, new Vector3(xPos + 0.5f, simSettings.blockHeights[xPos, yPos], simSettings.terrainSize - yPos - 0.5f), Quaternion.identity);
                Animal     script    = newAnimal.GetComponent <Animal>();
                script.xPos        = xPos;
                script.yPos        = yPos;
                script.parentStats = wolfParentStats;
                simSettings.usedBlocks[xPos, yPos] = true;
                newAnimal.transform.parent         = gameObject.transform;
                wolvesLeft -= 1;
            }
        }
        simSettings.stage += 1;
    }