Exemplo n.º 1
0
    public void WorldFromString(string info)
    {
        // Destroy old interactable objects
        foreach (WorldObject obj in Utils.Flatten2dArray(WorldController.Instance.ObjectMap))
        {
            if (obj != null)
            {
                Destroy(obj.gameObject);
            }
        }

        // Destroy old actor objects
        foreach (Actor obj in WorldController.Instance.ActorList)
        {
            if (obj != null)
            {
                Destroy(obj.gameObject);
            }
        }

        // Decode world info
        WorldInfo worldInfo = JsonUtility.FromJson <WorldInfo>(info);

        // Set interactable objects
        WorldController.Instance.ObjectMap = new WorldObject[worldInfo.Width, worldInfo.Height];
        foreach (WorldInfo.EntityInfo obj in worldInfo.ObjectArray)
        {
            Vector3     location           = new Vector3(obj.Locx, obj.Locy, 0);
            GameObject  prefab             = WorldResources.GetGameObject(obj.Type);
            WorldObject interactableObject = Instantiate(prefab, location, Quaternion.identity).GetComponent <WorldObject>();
            interactableObject.ObjectFromString(obj.Info);
            WorldController.Instance.ObjectMap[(int)obj.Locx, (int)obj.Locy] = interactableObject;
        }

        // Set tiles
        WorldController.Instance.GroundMap = Utils.Reshape2dArray(worldInfo.GroundArray, worldInfo.Width, worldInfo.Height);
        for (int i = 0; i < WorldController.Instance.Width; i++)
        {
            for (int j = 0; j < WorldController.Instance.Height; j++)
            {
                WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(WorldController.Instance.GroundMap[i, j]));
            }
        }

        // Set actor objects
        WorldController.Instance.ActorList = new Actor[worldInfo.ActorArray.Length];
        for (int i = 0; i < worldInfo.ActorArray.Length; i++)
        {
            Vector3    location = new Vector3(worldInfo.ActorArray[i].Locx, worldInfo.ActorArray[i].Locy, 0);
            GameObject prefab   = WorldResources.GetGameObject(worldInfo.ActorArray[i].Type);
            Actor      actor    = Instantiate(prefab, location, Quaternion.identity).GetComponent <Actor>();
            actor.ObjectFromString(worldInfo.ActorArray[i].Info);
            WorldController.Instance.ActorList[i] = actor;

            if (worldInfo.ActorArray[i].Type == "Player")
            {
                WorldController.Instance.WorldCamera.ToFollow = actor.gameObject;
            }
        }
    }
Exemplo n.º 2
0
    void GenerateObstacle(string[] tiles, bool[,] blocked, int locationX, int locationY)
    {
        int sizeX = (int)Math.Floor(Utils.SampleNormal(obstacleSizeMean, obstacleSizeStd));
        int sizeY = (int)Math.Floor(Utils.SampleNormal(obstacleSizeMean, obstacleSizeStd));

        sizeX = locationX + sizeX < blocked.GetUpperBound(0) ? sizeX : blocked.GetUpperBound(0) - locationX;
        sizeY = locationY + sizeY < blocked.GetUpperBound(1) ? sizeY : blocked.GetUpperBound(1) - locationY;

        for (int i = locationX; i < locationX + sizeX; i++)
        {
            for (int j = locationY; j < locationY + sizeY; j++)
            {
                if (i == locationX && j == locationY)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[6]));
                    WorldController.Instance.GroundMap[i, j] = tiles[6];
                }
                else if (i == locationX + sizeX - 1 && j == locationY)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[8]));
                    WorldController.Instance.GroundMap[i, j] = tiles[8];
                }
                else if (i == locationX && j == locationY + sizeY - 1)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[0]));
                    WorldController.Instance.GroundMap[i, j] = tiles[0];
                }
                else if (i == locationX + sizeX - 1 && j == locationY + sizeY - 1)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[2]));
                    WorldController.Instance.GroundMap[i, j] = tiles[2];
                }
                else if (i == locationX)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[3]));
                    WorldController.Instance.GroundMap[i, j] = tiles[3];
                }
                else if (j == locationY)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[7]));
                    WorldController.Instance.GroundMap[i, j] = tiles[7];
                }
                else if (i == locationX + sizeX - 1)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[5]));
                    WorldController.Instance.GroundMap[i, j] = tiles[5];
                }
                else if (j == locationY + sizeY - 1)
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[1]));
                    WorldController.Instance.GroundMap[i, j] = tiles[1];
                }
                else
                {
                    WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[4]));
                    WorldController.Instance.GroundMap[i, j] = tiles[4];
                }
                blocked[i, j] = true;
            }
        }
    }