Highlights of this release
This release was mainly about making Zircon more robust and prepare it to be used in a multiplatform environment (jvm, browser, native). There are also some new enhancements and features added, like:
- New True Type Fonts. Take a look here, here, here and here.
- Multi-size Tile support: here.
- Markov Chain based
Modifierslike bubbly lava effect, glitch and static. - Component decoration refurbishment.
- New components, like the TextBox
which also supports inline
Components and typing effects - The LogArea component.
- New color themes.
- A new example tutorial project following in the footsteps of Trystan’s blog series.
- Embedded images
New Features
There are numerous new features in this release:
-
#100: Support all Input events on components properly.
Now all
Inputevents can be properly listened to onComponents:InputListeners can be added or the specific listener methods can be called with a lambda likeonDragoronMouseReleased -
#90: Add the option to enable beta features in Zircon
Now there is a switch in
AppConfigwhich can be used to enable beta features likeAnimations and theGameComponent -
#89: Add the option to run Zircon in debug mode
This can also be enabled now from
AppConfig. It will display specific log entries and also the current FPS. This feature will be enhanced later. -
#76: Introduce ShutdownHook in Zircon
Now
ShutdownHookcan be used to notify the user before Zircon closes -
#75: Improve Animation to return an AnimationResult
Starting an
Animationwill now return a handle which can be used to interact with theAnimation(likestopping it). - #54: Embedding images/bitmaps
-
#46: Implement “Log” Component
The
LogAreacomponent was implemented (great thanks to coldwarrl!). -
#8: TileColor transformations
The following transformations were implemented:
tint: adding a different color to this oneshade: lighten or darken the colorinvert: flip the color to its opposite (blue vs red for example)
Enhancements
These are the enhancements which were done in this release:
- #112: Allow Position and Size to have negative values, and add a check in the components framework not to allow them there.
-
#107: Reconcile the usage of properties vs functions (eg: size(), position() vs size and position
These were streamlined and the weird getters (
position(),size(), etc) are now gone. Now there is a proper getter / setter for everything and mutator/transformer methods which return the object are prefixed withwith*. -
#105: Separate Modifier into tile transformer and texture transformer modifiers.
Now there are two kinds of
Modifiers. One which modifies how textures are transformed, and one which can modify aTilebefore it is rendered. -
#103: Reconcile getTileAt, setTileAt, getRelativeTileAt and setRelativeTileAt.
These were “sanetized” now it is straightforward and well documented which is which and how to use them.
-
#102: Provide a proper
Snapshotobject forsnapshot()instead of aMapNow the
snapshot()method returns a properSnapshotobject instead of just aMap. -
#84: Font to Tile refactor
This was a rather thorough change. Previously Zircon used the
Fontabstraction which was now refactored toTileandTilesetResourcewhich streamlines and simplifies howTiles can be loaded and used. It is now also easier to write support for new kinds of fonts, tiles, and such. -
#83: Refactor Blink handling and Animation handling to be part of the incremental rendering
BlinkandAnimationtiming is now handled by the continuous renderer. This does not change how the API works, but makes the code of Zircon more robust, and less error prone. -
#82: Continuous rendering
Now Zircon does continuous rendering: the user will no longer have to call
refreshand other such methods in order to redraw the screen. TheApplicationclass was also introduced to accommodate this change. -
#81: Multiplatform refactor
The majority of the code in
zircon.jvmwere moved tozircon.corewhich is a Kotlin common project. This will enable the development of javascript and native variants of Zircon. #84 made this possible. Now images can be drawn onto aDrawSurfaceusing theImageDictionaryTilesetResource. The related example can be found here and it looks like this. -
#74: Streamline how Positions and Sizes work
Previously it was not possible to create
Positions with a negative component (x, ory), not it is possible, and it is only limited in specific places (likeComponents) -
#73: Improve TileGraphics performance
TileGraphicsused arrays before, now it uses sparseMaps. This enhances performance, and also makes it possible to haveTileGraphicswith stupid size. -
#69: CombineWith should resize new image to fit TileGraphics
When
combineWithis called on aTileGraphicsit will properly be resized to accommodate the other image. -
#67: Add word wrap to CharacterTileString
CharacterTileStringnow supports word wrap! -
#61: Proper
FontTextureRegionabstraction for different backends.Previously
Tiledrawing for different backends (Swing, LibGDX, etc) was a bit convoluted. Now this is streamlined. -
#60: Proper modularization depending on GUI backend
Zircon was split into multiple projects (
zircon.core,zircon.jvm,zircon.jvm.swing,zircon.jvm.libgdx). This makes the artifacts more lightweight, and the codebase is also separated along the GUI framework backends. -
#59: Component wrapping refurbishment
Component wrapping was refactored. Now
ComponentDecorationRenderers can be added to anyComponentduring creation. This makes it possible to apply any decoration to any component. -
#55: Fix and test TextBox
This was a bit convoluted before, now it is better and has more tests.
-
#38: Half-width Tile support
Now it is possible to use
TilesetResources which are not square, there are also some added tilesets likeAcornandLord Nightmare. -
#32: Tile alignment by pixel
Now
Tiles can be aligned by usingAbsolutePosition. Note that this feature is still in beta.
Bug fixes
The following bugs were fixed:
- #111: Fix RadioButton.select() to change the selection in its parent as well
- #77: Swing terminal is not being redrawn in response to exposure event
- #66: Adding Components to a Container which is not yet attached to a ContainerHandler will lead to positioning problems
- #65: RadioButtonGroup throws stacktrace if you click empty space
- #64: Minimizing a swing terminal and then restoring it causes the screen to go grey
- #47: Adding a component to a container which has no font before attaching that container to a Screen leads to font error.
Roadmap
There are several things on the radar, like:
- Refactor parallelism and concurrency to use Kotlin coroutines
- Implement a Javascript (browser) module and finish the LibGDX implementation
- Finish custom
Componentsupport - Add floating, modal and scrollable components
Componentlayout support- Drag’n drop support
- Component themes
- Simple and easy to use data binding and MVC support
Contribute
If you think that you can contribute or just have an idea feel free to join the discussion on our Discord server.
Do you have questions? Ask us on our Discord Server.
If you like what we do and want to support us consider becoming a Patron.