Esempio n. 1
0
    public void BuildNavMeshes()
    {
        GameObject       navMeshRoot      = GameObject.FindGameObjectWithTag(StaticGameDefs.NavMeshRootTag);
        NavMeshGenerator navMeshGenerator = navMeshRoot.GetComponent <NavMeshGenerator>();

        navMeshGenerator.BuildNavMesh();
    }
Esempio n. 2
0
    void Start()
    {
        GameObject CurrentTile = ColorTile[Random.Range(0, 5)];

        player.transform.position = new Vector2(2, 2);

        for (int i = 0; i <= 11; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(20, i), Quaternion.identity));
        }
        for (float i = 0; i <= 11; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(0, i), Quaternion.identity));
        }
        for (int i = 0; i <= 20; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, 11), Quaternion.identity));
        }
        for (int i = 0; i <= 20; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, 0), Quaternion.identity));
        }
        for (int i = 0; i <= 3; i++)
        {
            // walls.Add(Instantiate(Platform, new Vector2(i+9, 5), Quaternion.identity));
            walls.Add(Instantiate(Platform, new Vector2(i + 13, 3), Quaternion.identity));
            walls.Add(Instantiate(Platform, new Vector2(i + 4, 3), Quaternion.identity));
        }
        walls.Add(Instantiate(CurrentTile, new Vector2(10, 1), Quaternion.identity));
        walls.Add(Instantiate(CurrentTile, new Vector2(10, 2), Quaternion.identity));
        walls.Add(Instantiate(Platform, new Vector2(1, 2), Quaternion.identity));
        walls.Add(Instantiate(Platform, new Vector2(19, 2), Quaternion.identity));

        // Generate bool array of the map
        bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min());
        topRight   = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max());
        mapSize    = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1);

        bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y];
        foreach (GameObject w in walls)
        {
            Vector2 pos = (Vector2)w.transform.position - bottomLeft;
            map[(int)pos.x, (int)pos.y] = true;
        }

        // Generate NavMesh
        NavMeshGenerator.Offset = bottomLeft;
        Nodes = NavMeshGenerator.GenerateNavMesh(map);
        GameController.Nodes = Nodes;

        Vector3 spawn = SpawnPoint.transform.position;

        for (int i = 0; i < Bosses; i++)
        {
            var boss = Instantiate(KingMeowster, spawn, Quaternion.identity);
            boss.GetComponent <KingMeowster>().Target = player;
        }
        GameController.AliveBosses = Bosses;
    }
Esempio n. 3
0
    public void Initialise(Map map, int seed)
    {
        this.map = map;

        width  = map.levelWidth;
        height = map.levelHeight;

        noiseMap = NoiseMapGenerator.Create(map, seed);

        wallMap = new int[width, height];

        CreateWallMap();

        ProcessMap();

        MSMeshGenerator MSGen = GetComponent <MSMeshGenerator> ();

        Material[] mats = new Material[map.possibleTerrain.Length];
        for (int i = 0; i < map.possibleTerrain.Length; i++)
        {
            mats [i] = map.possibleTerrain [i].terrainMaterial;
        }

        List <MeshFilter> walkables = MSGen.Generate(wallMap, map.tileSize, map.wallHeight, mats, map.wallMaterial);

        ObjectGenerator objGen = GetComponent <ObjectGenerator> ();

        List <GameObject> objects = objGen.GenerateObjects(map, noiseMap);

        NavMeshGenerator meshGen = GetComponent <NavMeshGenerator> ();

        meshGen.Initialise();

        meshGen.BuildNavMesh(walkables, objects, wallMap.GetLength(0) * map.tileSize, wallMap.GetLength(1) * map.tileSize);

        StaticBatchingUtility.Combine(objects.ToArray(), objects [0].transform.parent.gameObject);

        Light worldLight = (Light)Instantiate(new GameObject(), Vector3.zero, Quaternion.Euler(map.lightOptions.angle), this.transform).AddComponent(typeof(Light));

        worldLight.name = "World Light";

        worldLight.type      = LightType.Directional;
        worldLight.intensity = map.lightOptions.intensity;
        worldLight.color     = map.lightOptions.lightColour;
        worldLight.shadows   = LightShadows.Soft;

        worldLight.shadowStrength = 0.8f;

        if (map.postProcProfile != null)
        {
            Camera.main.GetComponent <PostProcessingBehaviour> ().profile = map.postProcProfile;
        }
        else
        {
            Debug.LogWarning("Map is missing a Post Processing Profile");
        }
    }
Esempio n. 4
0
    //Not meant for real-time use
    public void ConstructGraph()
    {
        if (meshGraph == null)
        {
            Debug.Log("No mesh to operate on! Please set meshGraph before calling this function");
            return;
        }
        //Create a sampler Gameobject to perform raycasts to neighboring nodes
        Sampler = new GameObject("Sampler");
        List <int>      neighbors;
        List <int>      DeadVertices = new List <int>();
        List <pathNode> DeadNodes    = new List <pathNode>();

        simpleGraph = new GraphSimple();
        simpleGraph.AddNodes(meshGraph.vertexCount);

        float dist = 0;

        for (int i = 0; i < meshGraph.vertexCount; i++)
        {
            //if(DeadVertices.Contains(i))
            //continue;

            neighbors = GetNeighbors(i);

            pathNode currentNode = simpleGraph.graph[i];
            currentNode.position = transform.TransformPoint(meshGraph.vertices[i]);


            for (int j = 0; j < neighbors.Count; j++)
            {
                dist = Vector3.Distance(transform.TransformPoint(meshGraph.vertices[i]), transform.TransformPoint(meshGraph.vertices[neighbors[j]]));
                currentNode.neighbors.Add(simpleGraph.graph[neighbors[j]]);
                currentNode.weight.Add(dist);
                Sampler.transform.position = transform.TransformPoint(meshGraph.vertices[i]);
                if (Physics.Raycast(Sampler.transform.position, Vector3.Normalize(meshGraph.vertices[neighbors[j]] - meshGraph.vertices[i]), dist))
                {
                    if (!DeadVertices.Contains(neighbors[j]))
                    {
                        DeadVertices.Add(neighbors[j]); DeadNodes.Add(simpleGraph.graph[neighbors[j]]); break;
                    }
                }
            }
            //Debug.Log(i);
        }

        foreach (pathNode node in DeadNodes)
        {
            simpleGraph.DeleteNode(node.ID);
        }

        //Rebuild mesh
        NavMeshGenerator.RemoveTriangles(meshGraph, DeadVertices);
    }
Esempio n. 5
0
 private void Awake()
 {
     if (instance != null)
     {
         Destroy(this);
     }
     else
     {
         instance = this;
     }
 }
Esempio n. 6
0
 void Awake()
 {
     NavMeshGenerator.Generate();
 }
Esempio n. 7
0
    void Start()
    {
        int        size        = Random.Range(MinRoomSize, MaxRoomSize);
        GameObject CurrentTile = WallTiles[Random.Range(0, 5)];

        GameController.RespawnPoint = new Vector2(Mathf.Round((-1 * size) / 2) + 1, 3);
        player.transform.position   = GameController.RespawnPoint;
        float tracker   = 0f;
        int   sizeSides = Random.Range(MinSideSize, MaxSideSize);

        // Generate floor
        for (float i = Mathf.Round((-1 * size) / 2); i <= Mathf.Round(size / 2); i++)
        {
            float Percentage = Random.value;
            if (tracker == -2f)
            {
                walls.Add(Instantiate(Platform, new Vector2(i - 1, 1), Quaternion.identity));
            }
            if (Percentage <= Straight)
            {
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
            else if (Percentage <= Straight + ONE && Percentage > Straight && tracker <= 1)
            {
                tracker += 1f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker - 1), Quaternion.identity));
            }
            else if (Percentage <= Straight + ONE + ONE && Percentage > Straight + ONE && tracker >= -1)
            {
                tracker -= 1f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
            }
            else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker >= 0)
            {
                tracker -= 2f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker + 1f), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
            else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker < 0)
            {
                tracker += 2f;
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker - 1f), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity));
                walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity));
            }
        }

        // Generate walls
        for (int i = 0; i <= sizeSides; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round((-1 * size) / 2) - 1, i), Quaternion.identity));
        }
        for (float i = tracker; i <= sizeSides; i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round(size / 2) + 1, i), Quaternion.identity));
        }
        for (int i = 1; i <= Mathf.Round(size / 2); i++)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity));
        }
        for (int i = 1; i >= Mathf.Round((-1 * size) / 2); i--)
        {
            walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity));
        }

        // Generate bool array of the map
        bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min());
        topRight   = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max());
        mapSize    = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1);

        bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y];
        foreach (GameObject w in walls)
        {
            Vector2 pos = (Vector2)w.transform.position - bottomLeft;
            map[(int)pos.x, (int)pos.y] = true;
        }

        // Generate NavMesh
        NavMeshGenerator.Offset = bottomLeft;
        Nodes = NavMeshGenerator.GenerateNavMesh(map);
        GameController.Nodes = Nodes;

        // Spawn enemies
        var SpawnPoints = Nodes.Cast <Node>().Where(n => n.IsWalkable).Select(n => n.pos + NavMeshGenerator.Offset);

        for (int i = 0; i < Enemies; i++)
        {
            int CurrentPoint = Random.Range(0, SpawnPoints.Count());
            var enemy        = Instantiate(BolsjeDreng, new Vector2(SpawnPoints.ElementAt(CurrentPoint).x, SpawnPoints.ElementAt(CurrentPoint).y), Quaternion.identity);
            enemy.GetComponent <BolsjeDreng>().Target = player;
        }
        GameController.AliveEnemies = Enemies;
    }
Esempio n. 8
0
 protected virtual void Start()
 {
     randomMovementObject = new GameObject("RandomPosition").GetComponent <Transform>();
     path            = null;
     navMeshInstance = NavMeshGenerator.instance;
 }
 // Use this for initialization
 void Start()
 {
     navMeshInstance = NavMeshGenerator.instance;
 }
Esempio n. 10
0
 void Start()
 {
     navGen = GetComponent <NavMeshGenerator>();
     ResetMap();
 }