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); }
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; * }*/ } } }
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; } }