Esempio n. 1
0
    void LoadLevel(Level level)
    {
        currentLevel   = level;
        Time.timeScale = 0f;
        world          = GameObject.FindGameObjectWithTag("World").GetComponent <WorldManager>();
        float yInterval = -3f;
        //TmxMap map = new TmxMap(level.MapFilePath);
        TmxMap map = new TmxMap(level.MapFile.text, "rnd");

        TileManager.main.Init(map.Width, map.Height);
        for (int i = 0; i < map.Layers.Count; i++)
        {
            TmxLayer layer    = map.Layers[i];
            TileType tileType = (TileType)GameManager.IntParseFast(layer.Properties["TileType"]);
            if (tileType == TileType.Wall)
            {
                for (int x = 0; x < map.Width; x++)
                {
                    for (int z = 0; z < map.Height; z++)
                    {
                        int tileId = layer.Tiles[(map.Height - z - 1) * map.Width + x].Gid - 1;
                        if (tileId == -1)
                        {
                            continue;
                        }
                        GameObject wallBlock = (GameObject)Instantiate(wallBlockPrefab, new Vector3(x, wallBlockPrefab.transform.position.y, z), Quaternion.identity);
                        wallBlock.transform.SetParent(world.WallContainer, false);
                        wallBlock.gameObject.isStatic = true;
                    }
                }
            }

            TiledMesh tiledMesh = Instantiate(tiledMeshPrefab);
            if (tileType == TileType.Hole)
            {
                tiledMesh.transform.position = new Vector3(tiledMesh.transform.position.x, tiledMesh.transform.position.y + yInterval, tiledMesh.transform.position.z);
                tiledMesh.gameObject.tag     = "Hole";
            }
            if (tileType == TileType.Bottom)
            {
                tiledMesh.transform.position = new Vector3(tiledMesh.transform.position.x, tiledMesh.transform.position.y + yInterval, tiledMesh.transform.position.z);
            }
            tiledMesh.transform.parent = world.transform;
            tiledMesh.Init(map.Width, map.Height, layer, level.MapMaterial);
        }
        foreach (TmxObjectGroup group in map.ObjectGroups)
        {
            foreach (TmxObjectGroup.TmxObject tmxObject in group.Objects)
            {
                int objectType = GameManager.IntParseFast(tmxObject.Properties["ObjectType"]);
                if ((ObjectType)objectType == ObjectType.PlayerSpawn)
                {
                    SpawnPlayer((int)tmxObject.X / tileSize, map.Height - (int)tmxObject.Y / tileSize);
                }
                else
                {
                    GenericObject genericObject = Instantiate(objectPrefabs[objectType]);
                    genericObject.transform.parent = world.transform;
                    Debug.Log(objectType + ": " + (int)objectPrefabs[objectType].transform.position.y);
                    genericObject.Init((int)tmxObject.X / tileSize, objectPrefabs[objectType].transform.position.y, map.Height - (int)tmxObject.Y / tileSize, (ObjectType)objectType, tmxObject.Properties);
                }
            }
        }
        Time.timeScale = 1f;
    }