public override void PlaceAttribute(EditorMazeTile tile) { if (tile.TileMainMaterial.GetType() != typeof(WaterMainMaterial)) { Logger.Log("TODO: Check if this works. Bridge can also be placed on any tile with a coastline"); return; } EditorMazeTileAttributePlacer tileAttributePlacer = new EditorMazeTileAttributePlacer(tile); MazeTileAttributeRemover tileAttributeRemover = new MazeTileAttributeRemover(tile); BridgePiece bridgePiece = (BridgePiece)tile.GetAttributes().FirstOrDefault(attribute => (attribute is BridgePiece)); if (bridgePiece == null) { tileAttributePlacer.PlaceBridgePiece(BridgePieceDirection.Horizontal); } else if (bridgePiece.BridgePieceDirection == BridgePieceDirection.Horizontal) { tileAttributeRemover.RemoveBridgePiece(); tileAttributePlacer.PlaceBridgePiece(BridgePieceDirection.Vertical); } else { tileAttributeRemover.RemoveBridgePiece(); } }
private void AddTileAttributes(SerialisableTile serialisableTile, EditorMazeTile tile) { EditorMazeTileAttributePlacer tileAttributePlacer = new EditorMazeTileAttributePlacer(tile); foreach (SerialisableTileAttribute serialisableTileAttribute in serialisableTile.TileAttributes) { Type type = Type.GetType(serialisableTileAttribute.AttributeType); if (type.Equals(typeof(SerialisableTileObstacleAttribute))) { SerialisableTileObstacleAttribute serialisableTileObstacleAttribute = (SerialisableTileObstacleAttribute)JsonUtility.FromJson(serialisableTileAttribute.SerialisedData, type); tileAttributePlacer.PlaceTileObstacle(ObstacleType.Bush, new TileConnectionScoreInfo(serialisableTileObstacleAttribute.ConnectionScore, serialisableTileObstacleAttribute.SpriteNumber)); } else if (type.Equals(typeof(SerialisablePlayerExitAttribute))) { SerialisablePlayerExitAttribute serialisablePlayerExitAttribute = (SerialisablePlayerExitAttribute)JsonUtility.FromJson(serialisableTileAttribute.SerialisedData, type); tileAttributePlacer.PlacePlayerExit(ObstacleType.Bush, new TileConnectionScoreInfo(serialisablePlayerExitAttribute.ConnectionScore, serialisablePlayerExitAttribute.SpriteNumber)); } else if (type.Equals(typeof(SerialisablePlayerSpawnpointAttribute))) { tileAttributePlacer.PlacePlayerSpawnpoint(); } else if (type.Equals(typeof(SerialisablePlayerOnlyAttribute))) { tileAttributePlacer.PlacePlayerOnlyAttribute(PlayerOnlyType.Bush); } else if (type.Equals(typeof(SerialisableEnemySpawnpointAttribute))) { SerialisableEnemySpawnpointAttribute serialisableEnemySpawnpointAttribute = (SerialisableEnemySpawnpointAttribute)JsonUtility.FromJson(serialisableTileAttribute.SerialisedData, type); tileAttributePlacer.PlaceEnemySpawnpoint(serialisableEnemySpawnpointAttribute.TileAreaIds, TileAreas); } else if (type.Equals(typeof(SerialisableBridgePieceAttribute))) { SerialisableBridgePieceAttribute serialisableBridgePieceAttribute = (SerialisableBridgePieceAttribute)JsonUtility.FromJson(serialisableTileAttribute.SerialisedData, type); if (Enum.TryParse(serialisableBridgePieceAttribute.BridgePieceDirection, out BridgePieceDirection bridgePieceDirection)) { tileAttributePlacer.PlaceBridgePiece(BridgeType.Wooden, bridgePieceDirection); } else { Logger.Error($"Could not parse the BridgePieceDirection value{serialisableBridgePieceAttribute.BridgePieceDirection}"); } } else if (type.Equals(typeof(SerialisableBridgeEdgeAttribute))) { SerialisableBridgeEdgeAttribute serialisableBridgeEdgeAttribute = (SerialisableBridgeEdgeAttribute)JsonUtility.FromJson(serialisableTileAttribute.SerialisedData, type); if (Enum.TryParse(serialisableBridgeEdgeAttribute.BridgeEdgeSide, out Direction bridgeEdgeSide)) { tileAttributePlacer.PlaceBridgeEdge(BridgeType.Wooden, bridgeEdgeSide); } else { Logger.Error($"Could not parse the BridgeEdgeSide value{serialisableBridgeEdgeAttribute.BridgeEdgeSide}"); } } else if (type.Equals(typeof(SerialisableMusicInstrumentCaseAttribute))) { tileAttributePlacer.PlaceMusicInstrumentCase(); } else { Logger.Error($"Unknown tile attribute with type {type}"); } } }