Release Notes for Rotorz Tile System

Important
Important
Always backup your files before adding or updating any assets in your projects.

v2.0.6

New Features

  • Ability to offset and/or change the number of rows and columns within a tile system.
  • New coalesce mode "Own And Group" for orienting brushes.
  • "Combine into submeshes" build option which is enabled by default for consistency with previous versions.

Improvements

  • Warning message that is shown when "Tile Dimensions" and/or "Tiles Facing" properties are changed can now be hidden. This is useful when the warning message is not applicable.
  • Minor refinements to user interface.

Changes

  • TileSystemUtility has been moved to the runtime API Rotorz.Tile.TileSystemUtility. Editor-only functionality has been moved into Rotorz.Tile.Editor.ToolUtility.

v2.0.5

  • Added extension method RemapMaterial to IMaterialMappings interface.
  • 'Eraser' mode now uses wireframe indicator when applicable.
  • Bug fix: Corrected error in Chunk.CalculateMidPoint.
  • Renamed Chunk.CountPaintedTiles to Chunk.CountNonEmptyTiles.
  • Updated style of "API Reference.chm" file.

v2.0.4

  • Replaced field BrushOrientation.mask with read-only property BrushOrientation.Mask.
  • Bug fix: Resolved line painting glitch when "Brushes" palette was not docked and attempted to paint singular tile. This issue only affected OS X users.
  • Bug fix: NullReferenceException which occurred when refreshing tile due to regression error.

v2.0.3

New Features

  • Added "Use as Prefab Offset" which is available from context menu of transform component or via the RTS menu.

Improvements

  • Added workaround to break scale of painted tiles from their prefab.
  • Added per-brush option to disable immediate preview.
  • Added immediate preview support for skinned mesh renderers.
  • Added option to disable warning when creating large tile systems.
  • Bug fix: Resolved runtime error when preserving tile offset.

v2.0.2

New Features

  • Immediate tile preview and associated preferences.
  • Hold control to toggle see-through immediate preview.

Improvements

  • Performance improvement when painting tiles with attachments.
  • Changed default orientation selector to radio button for clarity.
  • Bug fix: Tiles combined when "Combine Method" was set to "None".
  • Bug fix: "Combine Method" was not persisted in presets.

v2.0.1

  • Several minor bug fixes.
  • Added support for brush property attribute in UnityScript scripts.
  • Moved editor preferences into separate window RTS|Preferences...
  • Paint nozzle now shows as flat tile for tileset brushes.
  • Added "Preferred nozzle indicator" preference.

v2.0.0 [ WARNING - BREAKING CHANGES ]

IMPORTANT: Backup your files before installing a v2.x update.

Future versions of Rotorz Tile System will be unpacked alongside earlier v1.x releases. There is an upgrade wizard which can be used to upgrade existing v1.x brushes and tile systems.

Please refer to the Migration Guide for further details.

New Features

  • Added new top-level menu "RTS".
  • Tile system panel has been split into separate palette windows which can be accessed via menu "RTS > Editor Windows".
  • Added "Scene" palette window to make it easier to switch between tile systems.
  • Added "Page Up/Down" keyboard shortcut (when tool is selected) to cycle between active tile systems.
  • Added anchor support to "Paint" tool so that straight lines can be drawn by holding the shift key. Hold "Control" and "Shift" key to draw straight horizontal or vertical lines.
  • Custom previews can now be specified for brushes via "Extended Properties" using the brush designer. Preview textures should be placed into an "Editor" folder to avoid inclusion with final builds, unless of course you want to use them at runtime!
  • Support for basic and extended autotile artwork.
  • Brush lists now include search field and additional filtering options to make it easier to find brushes.
  • Change size of paint brush and switch between round and square nozzles.
  • Added shortcut keys '[' and ']' to change brush radius, or alternatively hold 'Control' and use mouse wheel (when painting in scene view).
  • Select primary and secondary brush for painting with left and right buttons.
  • Double-click variation preview in orientated brushes to locate prefab or edit nested brush.
  • Drag and drop multiple prefabs (or nestable brushes) from the project panel into an orientation.
  • Tileset brushes can be configured to output tiles using a procedural mesh, or alternatively one separate game object for each tile.
  • Added edge correction options for tilesets which can help to reduce the effects of bleeding that occurs between tiles.
  • Procedural tiles can be delay generated using TileSystem.UpdateProceduralAtStart.
  • Added option "Tiles Facing" to tile systems which allows tiles to be rotated for sideways games (like platformer), or for upwards games (like top-down).
  • Added "Line" tool.
  • Added user preference "Classic Mode" which combines "Tool" and "Brush" palettes.

Important Changes

  • Rotorz Tile System v2.x is stored in the folder "Assets/Rotorz/Tile System/".
  • Changed extension namespace from Rotorz.TileSystem to Rotorz.Tile to avoid conflicts with earlier version of extension.
  • Tile system component was renamed from RotorzTileSystem to TileSystem.
  • Brushes are now ScriptableObject assets instead of MonoBehaviour components. This was an important step towards the new tileset capabilities.
  • Brush classes are now post-fixed with Brush instead of TileBrush. Despite offering a cleaner naming convention, hopefully this will help programmers to migrate from the MonoBehaviour design to the ScriptableObject design.
  • Brush assets are stored within "TileBrushes" folders (instead of "TilePrefabs"). This was changed to differentiate between v1.x and v2.x brushes.
  • Master brushes can now be placed into any folder called "Master" within a "TileBrushes" folder. This provides greater flexibility.
  • A naming convention has been used to detect brush and tileset assets. This means that accessing the "brush.name" property may include an additional postfix. The new property DisplayName has been added which excludes the naming convention.
  • Runtime and editor API property names now use camel case naming for consistency with general C# guidelines.

Changes

  • The concept of a "Basic Brush" has been deprecated in favour of the more consistent approach of creating oriented brushes. The upgrade wizard will automatically upgrade existing basic brushes to oriented brushes.
  • DLLs are now named "TileSystem.Runtime.dll" and "TileSystem.Editor.dll".
  • Changed the default chunk size from 20x20 to 30x30.
  • "Erase Empty Chunks" is now disabled by default when creating tile systems.
  • Introduced TileSystem.SetTileFrom which aims to replace TileSystem.SetTile.
  • Empty TileData instances are no longer cleared when game starts because whilst they are not in use, they can help to avoid memory allocations and garbage collection when using the runtime API.
  • Custom tools must now be derived from ToolBase instead of implementing the interface ITool.

User Interface

  • "Create Brush" window now has a tabbed interface which can be extended with custom brush creator interfaces using the editor API.
  • "Create Brush" window can be shown with a specific creator selected.
  • Replaced "Create Brushes from Atlas" window with tileset creator interface.
  • Added tileset designer interface to brush designer window to make it easier to create additional brushes from tilesets and to modify tilesets.
  • Added tileset selection to brush list control.
  • Standardised preview display throughout extension.
  • Added minimum size to brush selection window.
  • Where possible previous state of brush designer window is persisted (selected brush, category, tileset, etc).
  • Added "Back" button to brush designer window to make it easier to navigate to and fro between brushes.
  • Brush designer window can now be docked into the Unity interface.
  • Changed shortcut action in "Brushes Palette" from "Locate" to "Edit" because this is generally more useful. "Locate" action is still available from brush designer window.
  • Improved quality of information/error/warning message dialogs.
  • New "Refresh Tiles" window which offers greater control over the way in which tiles are refreshed.
  • Fixed bug with drag and drop functionality where scene view incorrectly locked. Also, it is useful to note that brushes cannot be dragged into scene view any more so there is no longer any need to hold Ctrl to perform drag.
  • Brushes can now be marked as "Favourite", "Shown" or "Hidden" for greater control over which brushes are shown in brush list controls.
  • Improved quality of user interfaces when using the Unity Pro skin.

Improvements

  • Removed toggle title "Tile System" from "Create Tile System" window to reduce clutter.
  • Master brushes can now be placed into categories.
  • Added new refresh option "Update procedural tiles" both to GUI and runtime.
  • Fixed bug which caused gaps when painting quickly with "Paint" tool.
  • Added warning message to tileset creator if similar already exists.
  • Added warning message to tileset creator if texture is non power-of-two.
  • Added extended properties interface for empty brushes.
  • "Empty" brush type now has a default preview.
  • Fixed bug: prevent inadvertently adding sub objects of prefabs as oriented brush variations.
  • Corresponding tileset is automatically selected when switching to "Tileset" list view when tileset brush is selected.
  • Corrected alignment of vertical scrollbar.
  • Removed interface IBrushContext from brush classes and using context object that is shared between all brushes. This reduces the memory requirements of each brush.
  • Prefabs and colliders can be attached to tileset tiles via brush designer.
  • Added "Rotorz Tile System - Loading brushes..." to console log on startup which might be useful when diagnosing errors.
  • Improved implementation and performance of "Scale Mode" and "Apply Prefab Transform".
  • Grid can be toggled for selected tile system.
  • Fixed bug where single character brush names were not possible when creating a brush using the new user interface.
  • Fixed bug with brush list scrolling.
  • Increased upper limit of FillTool.MaximumPaintLimit from 5000 to 10000 which may benefit those who are using procedural atlas tiles. Like before the value of this preference can be changed via preferences window.
  • Reduced the lower limit of chunk sizes from 10 to 2.
  • Fixed bug when attempting to paint with an empty orientation (no variations).
  • Improved warning feedback of oriented brushes by providing the name and orientation in question to help users correct their brushes.
  • Fixed bug with tile system builder where "Combine Method" was set to "None".
  • Fixed bug where entering and leaving play mode when "Apply Basic Stripping" as specified in editor caused "Unable to interact with tile system" message to appear.
  • Added "Override Brush Transforms" option to oriented brush designer so that "Scale Mode" and "Apply Prefab Transform" properties can be overridden if desired of nested brushes.
  • Added new category filter "Uncategorized".
  • Added editor preference to control how empty chunks are erased.
  • Added warning to "Create Tile System" window regarding chunk sizes and procedural meshes.
  • Replaced tile system build functionality with new faster implementation that does not conflict with procedural tiles, and produces better normals when smoothing is enabled.
  • Added option to revert properties of alias brush to its target.
  • Fixed bug with RotorzEditorGUI.BrushField where brush name overflowed.
  • Improved performance of various GUIs.
  • Added mini icon overlay to alias brush previews.
  • Removed "Select Brush" button from alias brush designer because it provides the same functionality as the brush field.
  • Added "Apply To:" field to "Replace By Brush" window to make it easier to find and replace tiles across all tile systems in a scene.

Runtime API

  • Creation and destruction of tile game objects can now be overridden by providing a custom implementation of Rotorz.Tile.IObjectFactory and assigning it to Rotorz.Tile.DefaultRuntimeObjectFactory. This may be useful to developers who are looking to implement pooling.
  • Added global event which can be consumed by both runtime and editor scripts to run additional logic after a tile has been painted using a brush.
  • Renamed property Brush.IsPhysical to Brush.CanOverrideLayerAndTag for greater clarity.
  • Material mapping capabilities can now be added to custom brushes simply by implementing the IMaterialMappings interface. Material mapping fields are now only provided for brushes that support them.
  • New RefreshFlags enumeration for finer control over the way in which tiles are refreshed.
  • Ability to implement custom brushes.
  • Added global event which can be consumed by both runtime and editor scripts to run additional logic after a tile has been painted using a brush.
  • Added method TileSystem.IsSolid to easily determine whether a tile is flagged as being solid.
  • Added various tile trace methods to tile system class to make it easier to detect tiles based on flag, brush or using a custom delegate.

Editor API

  • Creation and destruction of tile game objects can now be overridden by providing a custom implementation of Rotorz.Tile.IObjectFactory and assigning it to Rotorz.Tile.DefaultEditorObjectFactory.
  • Ability to implement custom designers for custom brush types.
  • Custom "Create Brush" tabs can be registered using BrushCreator.Register.
  • Some properties can be shared between multiple brush creator interfaces.
  • Removed BrushType enumeration and improved brush utility methods.
  • New field for category selection RotorzEditorGUI.BrushCategoryField.
  • Brush database now provides a way to enumerate tilesets and access their associated brushes.
  • Brushes must now be renamed via using BrushDatabase.RenameBrush.
  • Replaced GUITileBrushList with BrushListControl.
  • Brush previews can now be drawn via RotorzEditorGUI.DrawBrushPreview.
  • Functionality within FillTool class can now be overridden consistent with other tool classes.
  • Fixed bug with brush selection window that cause Unity 4 to crash.
  • Removed RefreshAllTiles from editor API because progress feedback is now provided by runtime API.
  • Custom brush descriptors can be registered for greater control over custom brush types.
  • Implemented BrushDescriptor.DrawPreview which can be overridden for to render specialised preview for custom brushes.
  • Added generic delete brush functionality to brush descriptor which can be overridden as needed by specialised brushes.
  • Shortcut actions (None, Edit and Ping) can now be specified for brush lists.
  • Added static fields selectedBrush and selectedBrushSecondary to the class ToolUtility making it easy to access the currently selected brushes.
  • Custom parameter GUI can now be defined for custom tools.
  • Added BrushPropertyAttribute so that brush selector can be used for brush fields via the inspector.

v1.1.3

  • Fixed Unity 4 compatability issues.

Notice: Unity 4 users are advised to upgrade to this version before upgrading to the upcoming version 2.0.0.

v1.1.2

New Features

  • 16 custom user flags per brush/tile plus easy access "Solid" flag. Custom user flags can be accessed and altered using the runtime API.
  • Alias brushes can override flags of their targets.
  • Oriented brushes can force override flags of nested brushes.

Improvements

  • Added new user guide.
  • Fixed bug where editor preferences were reset if tile system panel was not previously shown.
  • Added easier drop support to oriented brush designer.
  • Horizontal scrolling is much better for oriented brushes that have many variations thanks to "fixed" section support.
  • Added error feedback when dragging prefabs into orientations.
  • Removed "Info" icon from "Show Tips" tips to reduce clutter.
  • Fixed bug where out-of-view brushes could be dragged and dropped.
  • Fixed bug where dragging of brushes was detected out of context.
  • Added drag anchor to brush list views to decrease sensitivity of drag motion.
  • Fixed bug where NullReferenceException was thrown when brush designer window was open when entering/leaving play mode.
  • Material mapper is now better at automatically detecting materials.
  • Mini label is now shown when no brush preview is available.
  • Simplified brush designer by moving more complex properties into collapsable "Extended Properties" section.
  • Fixed bug where brush designer was not shown after creating new brush.
  • Gear menu contains option to manually refresh brush database.

Changes

  • Opening brush designer no longer refreshes brush database. Instead please use the "Refresh and Detect Brushes" option from the Gear menu.

v1.1.1

  • Fixed bug where preview prefabs were not being refreshed.

v1.1.0 [ WARNING - BREAKING CHANGES ]

Existing tile systems must be upgraded to become compatible with the new tile system data structure. Various warning messages are presented to hopefully make this process straightforward:

  1. Backup your project (before applying update from asset store)
  2. Download and apply update from asset store
  3. For each existing tile system (in turn):
    • Select tile system
    • Review upgrade preferences
    • Click "Upgrade" button in inspector

Custom scripts that make use of either the editor or runtime API may require changes to become compatible with the latest version.

New Features

  • Tiles that have been accidentally deleted (not erased) can be restored or erased using "Repair Tiles".
  • Empty chunks are removed automatically when painting (both in editor and at runtime). This can be disabled when appropriate.
  • Tile game objects are now placed within their respective chunk game object. This forms an essential part of the data structure, however these chunk game objects can be stripped when tile access is not required at runtime. For some game developers the chunks could even be utilised to optimize performance.
  • Introduced bulk edit mode to runtime API to improve performance when painting and/or erasing multiple tiles. Improvements are especially noticable for oriented brushes.
  • Colour of tile system grid and chunk boundaries can now be customized via the Unity preferences window ("Tile System" section).
  • Added general drag and drop support to all brush list views. Simply hold the "Control" key to drag from list into a brush input field.
  • Reveal location of a brush in the project window by holding "Control" and double clicking brush from a brush list view.
  • User interface and runtime API to repaint all tiles that were painted with one brush using another brush (aka "Find and Replace").
  • New "Picker" (or Eye-Dropper) tool to quickly sample the brush of a previously painted tile.
  • Editor shortcut keys (similar to Photoshop) to quickly switch between tools when a tile system is selected:
    • B = Brush
    • X = Cycle
    • G = Fill
    • I = Picker
  • Added "Empty Variation" brush that does not generate any visual output. Use this brush to create gaps within oriented tiles (as opposed to zero alpha). This doesn't even create an empty game object!
  • A lot more control over the way in which a tile system is stripped. A number of configuration presets have been added to simplify selection. In addition to adding lots of control, the new presets should make stripping easier to understand.
  • Added ability to change chunk size of tile system and rebuild data structure.

Runtime API

  • Moved stripping process from editor API into runtime API.

Editor API

  • Added editor API to create brush fields for custom editor interfaces. This field works in much the same way as the object field but with the brush selection window instead of the prefab selection window.

Improvements

  • Fresh new look to existing user interfaces!
  • An improved editor and runtime API with various new offerings.
  • New inspector GUI for tile system component that groups properties into meaningful sections.
  • Status panel now display graphical representation of tile orientation:
    • Green = Matching part of orientation
    • Red = Surplus part of orientation
    • Gray = Missing part of orientation
  • Fill tool no longer applies its paint constraint to "Erase" functionality.
  • Handle of selected tile system is no longer rendered making it easier to select an underlying tile system.
  • Alias brushes can now selectively override the transform of its target.
  • Custom tweaking of tiles are more resilient to being refreshed.
  • Reprogrammed tile system builder which is a lot faster plus supports the new "Combine Method" and "Stripping" options.
  • Increased maximum number of brush categories from 32 for 48.

Changes

  • Status panel now shows the name of the brush that was used to paint the active tile (instead of game object name).

v1.0.9

  • Various performance improvements.
  • Added drag and drop support to brush designer.
  • Added half-pixel inset for generated atlas brush UVs.

v1.0.8

  • Added "Fill" tool.
  • Simplified user interface.
  • Various other minor refinements.

v1.0.7

  • Added status panel for active tile.

v1.0.6

  • Added category support to atlas brush utility window.

v1.0.5

  • Added ability to categorize groups.
  • Cleaned up UI a little.

v1.0.4

  • Minor UI improvement.

v1.0.3

  • Added support for automatic 2D brush generation from a texture atlas.

v1.0.2

  • General improvements and some minor bug fixes.

v1.0.1

  • Initial release.