Ejemplo n.º 1
0
        private void CreateCollisionObject(MapCell cell, TmxTilesetTile tileResult, out bool customCollisionSize)
        {
            TmxObjectGroup.TmxObject tmxObject = null;
            for (int objectGroupCount = 0; objectGroupCount < tileResult.ObjectGroups.Count; objectGroupCount++)
            {
                for (int objectCount = 0; objectCount < tileResult.ObjectGroups.Count; objectCount++)
                {
                    tmxObject = tileResult.ObjectGroups[objectGroupCount].Objects[objectCount];
                }
            }

            cell.passable = false;

            GameObject collisionObject = new GameObject(cell.position);//cell.position.X / 32 == 33 && cell.position.Y / 32 == 29

            if (debugTileset)
            {
                collisionObject.AddLight(new LightSource(70, Color.White));
            }

            if (tmxObject != null)
            {
                customCollisionSize       = true;
                collisionObject.position += new Vector2((float)tmxObject.X, (float)tmxObject.Y);
                collisionObject.size      = new Vector2((float)tmxObject.Width, (float)tmxObject.Height);
            }
            else
            {
                customCollisionSize = false;
            }

            string tag = tileResult.Properties["Tag"];

            if (tag != "")
            {
                collisionObject.tags.Add(tag);
            }

            collisionObjectList.Add(collisionObject);
        }
Ejemplo n.º 2
0
    public void GenerateObjects(TmxObjectGroupList objectGroupList)
    {
        int objectGroupCount = objectGroupList.Count;

        for (int i = 0; i < objectGroupCount; i += 1)
        {
            TmxObjectGroup objectGroup = objectGroupList[i];
            int            objectCount = objectGroup.Objects.Count;
            PropertyDict   properties  = objectGroup.Properties;

            Transform layerContainer = new GameObject(objectGroup.Name).transform;
            layerContainer.rotation = Quaternion.identity;
            layerContainer.transform.SetParent(objectContainer);
            for (int j = 0; j < objectCount; j += 1)
            {
                if (!properties.ContainsKey("Type"))
                {
                    Debug.Log("ERROR: Object Layer \"" + objectGroup.Name + "\" doesn't have a Type property!");
                    continue;
                }
                string objectType = properties["Type"];
                TmxObjectGroup.TmxObject tmxObject = objectGroup.Objects[j];

                int xpos = (int)tmxObject.X / tile_width;
                int ypos = (int)tmxObject.Y / tile_height - 1;

                Vector3    worldPos      = new Vector3(-xpos + 0.5f, 0.5f, ypos - 0.5f);
                GameObject spawnedObject = (GameObject)GameObject.Instantiate(Resources.Load("Objects/" + objectType), worldPos, Quaternion.identity);
                spawnedObject.name = tmxObject.ToString();

                spawnedObject.transform.position = worldPos;
                spawnedObject.transform.parent   = layerContainer;

                if (objectType == "Hero")
                {
                    hero = spawnedObject.GetComponent <Hero>();
                    hero.Init(tileMap, xpos, ypos);
                }
                if (objectType == "End")
                {
                    endX = xpos;
                    endY = ypos;
                }

                /*TmxObjectGroup.TmxObject startEnd = ObjectGroups[i].Objects[j];
                 *
                 * int startEndX = (int)startEnd.X / tile_width;
                 * int startEndY = (int)startEnd.Y / tile_height;
                 * Vector3 worldPos = new Vector3(-startEndX + 0.5f, 1f, startEndY - 1.5f);
                 *
                 * if (startEnd.Name == "Start")
                 * {
                 *  //player.Spawn(worldPos, tile_width, tile_height);
                 *  GameObject startObject = (GameObject)GameObject.Instantiate(Resources.Load("SpawnPoint"), worldPos, Quaternion.identity);
                 * }
                 * else if (startEnd.Name == "End")
                 * {
                 *  GameObject endObjectPrefab = (GameObject)GameObject.Instantiate(Resources.Load("LevelEndTrigger"));
                 *  endObjectPrefab.transform.position = worldPos;
                 * }*/
            }
        }
    }
Ejemplo n.º 3
0
    public MapData(TextAsset mapFile, GameObject enemyContainer, GameObject wallContainer, Enemy enemyPrefab, Player player, Material tileSheet)
    {
        //enemyPrefab = Resources.Load("Enemy") as GameObject;
        TmxMap map;

        /*if (Debug.isDebugBuild)
         * {
         *  map = new TmxMap(mapFileName);
         * }*/

        //TextAsset mapFile = Resources.Load(mapFileName) as TextAsset;
        //Debug.Log(mapFile.name);
        //XDocument doc = XDocument.Parse(mapFile.text);
        //Debug.Log(doc.Element("map").Attribute("tilewidth"));
        //_doc.(mapFile.text);
        //Debug.Log(mapFile.text);
        map = new TmxMap(mapFile.text);


        horizontal_tiles = map.Width;
        vertical_tiles   = map.Height;

        tile_width  = map.TileWidth;
        tile_height = map.TileHeight;

        tileSetName = map.Tilesets[0].Name;
        mapTitle    = map.Properties["Title"];

        tileCount = map.Layers[0].Tiles.Count;
        tiles     = new MapSquare[tileCount];;
        for (int i = 0; i < tileCount; i++)
        {
            tiles[i] = new MapSquare(map.Layers[0].Tiles[i]);
        }

        int enemyCount = map.ObjectGroups[0].Objects.Count;

        //enemies = new Enemy[enemyCount];
        for (int i = 0; i < enemyCount; i++)
        {
            TmxObjectGroup.TmxObject enemy = map.ObjectGroups[0].Objects[i];
            //Debug.Log("object at [" + enemy.X + ", " + enemy.Y + "]");
            int     enemyX   = (int)enemy.X / tile_width;
            int     enemyY   = (int)enemy.Y / tile_height;
            Vector3 worldPos = new Vector3(-enemyX, 0.01f, enemyY);

            //GetRelativePosition(enemyX, enemyY);
            Enemy enemyObject = (Enemy)GameObject.Instantiate(enemyPrefab, worldPos, enemyPrefab.transform.rotation);
            enemyObject.transform.parent        = enemyContainer.transform;
            enemyObject.transform.localPosition = worldPos;
            //enemies[i] = enemyObject;
        }

        int startEndCount = map.ObjectGroups[1].Objects.Count;

        for (int i = 0; i < startEndCount; i++)
        {
            TmxObjectGroup.TmxObject startEnd = map.ObjectGroups[1].Objects[i];
            //Debug.Log("object at [" + enemy.X + ", " + enemy.Y + "]");
            int     startEndX = (int)startEnd.X / tile_width;
            int     startEndY = (int)startEnd.Y / tile_height;
            Vector3 worldPos  = new Vector3(-startEndX + 0.5f, 1f, startEndY - 1.5f);
            //Debug.Log(startEnd.Name);
            if (startEnd.Name == "Start")
            {
                player.Spawn(worldPos, tile_width, tile_height);
                GameObject startObject = (GameObject)GameObject.Instantiate(Resources.Load("SpawnPoint"), worldPos, Quaternion.identity);
            }
            else if (startEnd.Name == "End")
            {
                GameObject endObjectPrefab = (GameObject)GameObject.Instantiate(Resources.Load("LevelEndTrigger"));
                endObjectPrefab.transform.position = worldPos;
                //GameObject endObject = (GameObject)GameObject.Instantiate(endObjectPrefab, worldPos, endObjectPrefab.transform.rotation);
                //LevelEndTrigger end = endObject.GetComponent<LevelEndTrigger>();
            }
            //Vector3 worldPos = new Vector3(-(enemyX / tile_width), 0.01f, enemyY / tile_height);

            //GetRelativePosition(enemyX, enemyY);
            //Enemy enemyObject = (Enemy)GameObject.Instantiate(enemyPrefab, worldPos, enemyPrefab.transform.rotation);
            //enemyObject.transform.parent = enemyContainer.transform;
            //enemyObject.transform.localPosition = worldPos;
            //enemies[i] = enemyObject;
        }


        int wallCount = map.ObjectGroups[2].Objects.Count;

        CreateWall(tileSheet);

        for (int i = 0; i < wallCount; i++)
        {
            TmxObjectGroup.TmxObject wall = map.ObjectGroups[2].Objects[i];
            //Debug.Log("object at [" + enemy.X + ", " + enemy.Y + "]");
            int     startEndX = (int)wall.X / tile_width;
            int     startEndY = (int)wall.Y / tile_height;
            Vector3 worldPos  = new Vector3(-startEndX, 0.5f, startEndY);

            GameObject wallObject = (GameObject)GameObject.Instantiate(wallPref, worldPos, Quaternion.identity);
            wallObject.transform.parent        = wallContainer.transform;
            wallObject.transform.localPosition = worldPos;
            //LevelEndTrigger end = endObject.GetComponent<LevelEndTrigger>();

            //Vector3 worldPos = new Vector3(-(enemyX / tile_width), 0.01f, enemyY / tile_height);

            //GetRelativePosition(enemyX, enemyY);
            //Enemy enemyObject = (Enemy)GameObject.Instantiate(enemyPrefab, worldPos, enemyPrefab.transform.rotation);
            //enemyObject.transform.parent = enemyContainer.transform;
            //enemyObject.transform.localPosition = worldPos;
            //enemies[i] = enemyObject;
        }
        if (Application.isPlaying)
        {
            GameObject.Destroy(wallPref);
        }


        int objectCount = map.ObjectGroups[3].Objects.Count;

        for (int i = 0; i < objectCount; i++)
        {
            TmxObjectGroup.TmxObject genericObject = map.ObjectGroups[3].Objects[i];
            //Debug.Log("object at [" + enemy.X + ", " + enemy.Y + "]");
            int     startEndX = (int)genericObject.X / tile_width;
            int     startEndY = (int)genericObject.Y / tile_height;
            Vector3 worldPos  = new Vector3(-startEndX + 0.5f, 0.5f, startEndY - 1.5f);

            if (genericObject.Type == "mirror")
            {
                GameObject mirrorPrefab = (GameObject)GameObject.Instantiate(Resources.Load("mirror"));
                GameObject mirror       = (GameObject)GameObject.Instantiate(mirrorPrefab, worldPos, mirrorPrefab.transform.rotation);
                //wallObject.transform.parent = wallContainer.transform;
                //wallObject.transform.localPosition = worldPos;
            }

            //LevelEndTrigger end = endObject.GetComponent<LevelEndTrigger>();

            //Vector3 worldPos = new Vector3(-(enemyX / tile_width), 0.01f, enemyY / tile_height);

            //GetRelativePosition(enemyX, enemyY);
            //Enemy enemyObject = (Enemy)GameObject.Instantiate(enemyPrefab, worldPos, enemyPrefab.transform.rotation);
            //enemyObject.transform.parent = enemyContainer.transform;
            //enemyObject.transform.localPosition = worldPos;
            //enemies[i] = enemyObject;
        }
    }