protected override void StartDelayed(InteractionEvent interactionEvent) { var targetBehaviour = (IGameObjectProvider)interactionEvent.Target; TileManager tileManager = Object.FindObjectOfType <TileManager>(); TileObject targetTile = targetBehaviour.GameObject.GetComponentInParent <TileObject>(); var tile = targetTile.Tile; // Deconstruct if (tile.turf?.isWall == true) { tile.turf = null; } else // Construct { tile.turf = WallToConstruct; } // TODO: Change rotation from defaulting to North tile.fixtures.SetFloorFixtureAtLayer(null, FloorFixtureLayers.FurnitureFixtureMain); FixturesContainer.ValidateFixtures(tile); // TODO: Make an easier way of doing this. tile.subStates = new object[2]; tileManager.UpdateTile(targetTile.transform.position, tile); }
protected override void StartDelayed(InteractionEvent interactionEvent) { var targetBehaviour = (IGameObjectProvider)interactionEvent.Target; TileManager tileManager = Object.FindObjectOfType <TileManager>(); TileObject targetTile = targetBehaviour.GameObject.GetComponentInParent <TileObject>(); var tile = targetTile.Tile; if (tile.fixtures.GetFloorFixtureAtLayer(FloorFixtureLayers.FurnitureFixtureMain) != null) // If there is a fixture on the place { if (tile.fixtures.GetFloorFixtureAtLayer(FloorFixtureLayers.FurnitureFixtureMain) == TableToConstruct) // If the fixture is a table { tile.fixtures.SetFloorFixtureAtLayer(null, FloorFixtureLayers.FurnitureFixtureMain); // Deconstruct } } else // If there is no fixture on place { tile.fixtures.SetFloorFixtureAtLayer(TableToConstruct, FloorFixtureLayers.FurnitureFixtureMain); // Construct } // TODO: Make an easier way of doing this. tile.subStates = new object[2]; // Validate if we can actually place the table FixturesContainer.ValidateFixtures(tile); tile.fixtures = (FixturesContainer)tile.fixtures.Clone(); tileManager.UpdateTile(targetTile.transform.position, tile); }
public static void DeleteTileLayer(TileManager tileManager, int layerIndex, int x, int y) { if (tileManager.GetTile(x, y) == null) { return; } // Save old definition TileDefinition oldDefinition = tileManager.GetTile(x, y).Tile; // Copy object to avoid dupplication between editor and tilemap if (oldDefinition.fixtures != null) { FixturesContainer f = (FixturesContainer)oldDefinition.fixtures.Clone(); oldDefinition.fixtures = f; } // Existing tile found. We try to update the non-null items in the tiledefinition List <TileBase> tileBases = GetTileItems(oldDefinition); for (int i = 0; i < tileBases.ToArray().Length; i++) { if (tileBases[i] != null && i == layerIndex) { oldDefinition = SetTileItem(oldDefinition, null, i); } } Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile"); tileManager.EditorUpdateTile(x, y, oldDefinition); }
/** * Sets the tile at the given position * to the currently selected tile type. * * Will create the tile if one does not exist */ public static void SetTile(TileManager tileManager, TileDefinition tileDefinition, int x, int y) { // Copy object to avoid dupplication between editor and tilemap if (tileDefinition.fixtures != null) { FixturesContainer f = (FixturesContainer)tileDefinition.fixtures.Clone(); tileDefinition.fixtures = f; } if (tileManager.GetTile(x, y) == null) { // Create a new tile, but only if the plenum is not empty if (tileDefinition.plenum == null) { return; } tileManager.EditorCreateTile(x, y, tileDefinition); Undo.RegisterCreatedObjectUndo(tileManager.GetTile(x, y).gameObject, "Created tile"); } else { // Save old definition TileDefinition oldDefinition = tileManager.GetTile(x, y).Tile; // Copy object to avoid dupplication between editor and tilemap if (oldDefinition.fixtures != null) { FixturesContainer f = (FixturesContainer)oldDefinition.fixtures.Clone(); oldDefinition.fixtures = f; } // Existing tile found. We try to update the non-null items in the tiledefinition List <TileBase> tileBases = GetTileItems(tileDefinition); for (int i = 0; i < tileBases.ToArray().Length; i++) { if (tileBases[i] != null) { oldDefinition = SetTileItem(oldDefinition, tileBases[i], i); } } Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile"); tileManager.EditorUpdateTile(x, y, oldDefinition); } }
/** * Sets the tile at the given position * to the currently selected tile type. * * Will create the tile if one does not exist */ public static void SetTile(TileManager tileManager, TileDefinition tileDefinition, int x, int y) { // Copy object to avoid dupplication between editor and tilemap FixturesContainer f = (FixturesContainer)tileDefinition.fixtures.Clone(); tileDefinition.fixtures = f; if (tileManager.GetTile(x, y) == null) { tileManager.EditorCreateTile(x, y, tileDefinition); Undo.RegisterCreatedObjectUndo(tileManager.GetTile(x, y).gameObject, "Created tile"); } else { Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile"); tileManager.EditorUpdateTile(x, y, tileDefinition); } }