Esempio n. 1
0
    // Use this for initialization
    void Start()
    {
        GameObject gridContainer = GameObject.FindGameObjectWithTag("GridContainer");
        _gridContainer = gridContainer.GetComponent< HexGridManager >();

        _navAgent = GetComponent< NavMeshAgent >();

        GameObject swarmGameObject = GameObject.FindGameObjectWithTag ("SwarmTarget");
        _target = swarmGameObject.GetComponent< SwarmTarget > ();

        _occupant = _gridContainer.CreateOccupant(gameObject, 1);

        _gridContainer.PositionToGrid(transform.position, ref currentGrid);
    }
Esempio n. 2
0
    // Use this for initialization
    void Start()
    {
        GameObject gridContainer = GameObject.FindGameObjectWithTag("GridContainer");

        _gridContainer = gridContainer.GetComponent <HexGridManager>();

        _navAgent = GetComponent <NavMeshAgent>();

        GameObject swarmGameObject = GameObject.FindGameObjectWithTag("SwarmTarget");

        _target = swarmGameObject.GetComponent <SwarmTarget> ();

        _occupant = _gridContainer.CreateOccupant(gameObject, 1);

        _gridContainer.PositionToGrid(transform.position, ref currentGrid);
    }
Esempio n. 3
0
    void Start()
    {
        transform.position       = HivePosition;
        hiveTransform.localScale = new Vector3(hiveRadius, hiveRadius, hiveRadius);

        swarmKernel = swarmComputeShader.FindKernel("TargetSwarmMain");
        worldKernel = swarmComputeShader.FindKernel("TargetWorldUpdateMain");

        // Create rotation matrices
        CreateRotationMatrices();

        // Create the worldtexture
        worldTexture = CreateRenderTexture();

        // Create and init swarmer compute buffers
        swarmBuffer = new ComputeBuffer(numSwarmers, 56);
        Swarmer[] swarmers = new Swarmer[numSwarmers];
        for (int i = 0; i < swarmers.Length; i++)
        {
            swarmers[i].color    = new Vector3(0.20f, 1f, 0f);
            swarmers[i].position = HivePosition;/* + new Vector3(  Random.Range(-spawnRange, spawnRange),
                                                 *              Random.Range(-spawnRange, spawnRange),
                                                 *              Random.Range(-spawnRange, spawnRange));*/

            swarmers[i].previousPosition = swarmers[i].position;

            swarmers[i].direction = new Vector3(Random.Range(-1.0f, 1.0f),
                                                Random.Range(-1.0f, 1.0f),
                                                Random.Range(-1.0f, 1.0f)).normalized;

            swarmers[i].scent          = 0;
            swarmers[i].pheromoneScent = 0;
        }
        swarmBuffer.SetData(swarmers);

        // Create and init swarm targets compute buffer
        swarmTargetBuffer = new ComputeBuffer(targets.Length, 16);
        SwarmTarget[] swarmTargets = new SwarmTarget[targets.Length];
        for (int i = 0; i < swarmTargets.Length; i++)
        {
            swarmTargets[i].position = HivePosition + targets[i].localPosition;
            swarmTargets[i].hp       = 1;
        }
        swarmTargetBuffer.SetData(swarmTargets);

        // Set swarm comput shader data
        swarmComputeShader.SetInt("width", worldSize.x);
        swarmComputeShader.SetInt("height", worldSize.y);
        swarmComputeShader.SetInt("depth", worldSize.z);
        swarmComputeShader.SetTexture(swarmKernel, "worldTex", worldTexture);
        swarmComputeShader.SetBuffer(swarmKernel, "swarmers", swarmBuffer);
        swarmComputeShader.SetBuffer(swarmKernel, "targets", swarmTargetBuffer);
        swarmComputeShader.SetInt("numTargets", swarmTargets.Length);

        swarmComputeShader.SetFloats("hiveX", HivePosition.x);
        swarmComputeShader.SetFloats("hiveY", HivePosition.y);
        swarmComputeShader.SetFloats("hiveZ", HivePosition.z);
        swarmComputeShader.SetFloats("traceAdd", traceAdd);
        swarmComputeShader.SetFloats("traceDecay", traceDecay);
        swarmComputeShader.SetFloat("traceAttraction", traceAttraction);
        swarmComputeShader.SetFloat("swarmerSpeed", swarmerSpeed);
        swarmComputeShader.SetMatrix("rot1", rotMat1);
        swarmComputeShader.SetMatrix("rot2", rotMat2);
        swarmComputeShader.SetMatrix("rot3", rotMat3);
        swarmComputeShader.SetMatrix("rot4", rotMat4);
        swarmComputeShader.SetMatrix("rot5", rotMat5);
        swarmComputeShader.SetMatrix("rot6", rotMat6);
        swarmComputeShader.SetFloat("randomness", randomness);
        swarmComputeShader.SetFloat("hiveRadius", hiveRadius);

        swarmComputeShader.SetTexture(worldKernel, "worldTex", worldTexture);

        Debug.Log($"Hiveposition: {HivePosition}");


        // Set rendering materials data
        swarmerMaterial.SetBuffer("swarmers", swarmBuffer);


        // Debug
        debugWorldNodes = new WorldNode[NumWorldNodes];
    }