/// <summary> /// Determines if a TileObjectSO can be build at the given location. /// </summary> /// <param name="map"></param> /// <param name="subLayerIndex"></param> /// <param name="tileObjectSO"></param> /// <param name="position"></param> /// <param name="dir"></param> /// <returns></returns> public bool CanBuild(TileMap selectedMap, int subLayerIndex, TileObjectSo tileObjectSO, Vector3 position, Direction dir, bool overrideAllowed) { bool canBuild = true; foreach (TileMap map in mapList) { if (map == selectedMap) { if (overrideAllowed) { // Do not check if the tile is occupied. Only apply tile restrictions. canBuild &= map.CanBuild(subLayerIndex, tileObjectSO, position, dir, CheckRestrictions.OnlyRestrictions); } else { // Check for tile restrictions as well. canBuild &= map.CanBuild(subLayerIndex, tileObjectSO, position, dir, CheckRestrictions.Everything); } } else { // Only check if the tile is occupied. Otherwise we cannot build furniture for example. canBuild &= map.CanBuild(subLayerIndex, tileObjectSO, position, dir, CheckRestrictions.None); } } return(canBuild); }
/// <summary> /// Sets a new TileObjectSO at a map for a given position and direction. Wrapper function for TileMap.SetTileObject(). /// </summary> /// <param name="map"></param> /// <param name="subLayerIndex"></param> /// <param name="tileObjectSO"></param> /// <param name="position"></param> /// <param name="dir"></param> public void SetTileObject(TileMap map, int subLayerIndex, TileObjectSo tileObjectSO, Vector3 position, Direction dir) { if (CanBuild(map, subLayerIndex, tileObjectSO, position, dir, false)) { map.SetTileObject(subLayerIndex, tileObjectSO, position, dir); } }
/// <summary> /// Simplified version of CanBuild(). Assumes the main map is used and no sub layers are needed. /// </summary> /// <param name="tileObjectSO"></param> /// <param name="position"></param> /// <param name="dir"></param> /// <returns></returns> public bool CanBuild(TileObjectSo tileObjectSO, Vector3 position, Direction dir) { if (tileObjectSO.layer == TileLayer.HighWallMount || tileObjectSO.layer == TileLayer.LowWallMount) { Debug.LogError("Simplified function CanBuild() is used. Do not use this function with layers where a sub index is required!"); } return(CanBuild(GetMainMap(), 0, tileObjectSO, position, dir, false)); }
/// <summary> /// Simplified version of SetTileObject. Will set a TileObjectSO on the main map without a sub layer. /// </summary> /// <param name="tileObjectSO"></param> /// <param name="position"></param> /// <param name="dir"></param> public void SetTileObject(TileObjectSo tileObjectSO, Vector3 position, Direction dir) { if (tileObjectSO.layer == TileLayer.HighWallMount || tileObjectSO.layer == TileLayer.LowWallMount) { Debug.LogError("Simplified function SetTileObject() is used. Do not use this function with layers where a sub index is required!"); } GetMainMap().SetTileObject(0, tileObjectSO, position, dir); }
/// <summary> /// Returns a TileObjectSO for a given name. Used during loading to find a matching object. /// </summary> /// <param name="tileObjectSOName"></param> /// <returns></returns> public TileObjectSo GetTileObjectSO(string tileObjectSOName) { TileObjectSo tileObjectSO = tileObjectSOs.FirstOrDefault(tileObject => tileObject.nameString == tileObjectSOName); if (tileObjectSO == null) { Debug.LogError("TileObjectSO was not found: " + tileObjectSOName); } return(tileObjectSO); }
// [MenuItem("RE:SS3D Editor Tools/Migrate")] public static void Migrate() { string[] guids = AssetDatabase.FindAssets(string.Format("t:{0}", typeof(TileObjectSo))); for (int i = 0; i < guids.Length; i++) { string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]); TileObjectSo asset = AssetDatabase.LoadAssetAtPath <TileObjectSo>(assetPath); if (asset.nameString == asset.prefab.name) { continue; } asset.nameString = asset.prefab.name; AssetDatabase.RenameAsset(assetPath, asset.prefab.name); AssetDatabase.SaveAssets(); Debug.Log("Migrated object: " + asset.name + ", New name: " + asset.nameString); } }
public TileDragHandler(TileManager tileManager, TileMapEditor mapEditor, Engine.Tiles.TileMap map, int subLayerIndex, TileObjectSo tileObjectSO, Direction selectedDir, Vector3Int snappedPosition) { this.tileManager = tileManager; this.mapEditor = mapEditor; this.map = map; this.subLayerIndex = subLayerIndex; this.tileObjectSO = tileObjectSO; this.selectedDir = selectedDir; startPosition = snappedPosition; curPosition = snappedPosition; var tile = CreateGhost(); tile.transform.position = new Vector3(snappedPosition.x, 0, snappedPosition.y); dragTiles.Insert(0, tile); }