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
Modifiers
like bubbly lava effect, glitch and static. - Component decoration refurbishment.
- New components, like the TextBox
which also supports inline
Component
s 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
Input
events can be properly listened to onComponent
s:InputListener
s can be added or the specific listener methods can be called with a lambda likeonDrag
oronMouseReleased
-
#90: Add the option to enable beta features in Zircon
Now there is a switch in
AppConfig
which can be used to enable beta features likeAnimation
s 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
ShutdownHook
can be used to notify the user before Zircon closes -
#75: Improve Animation to return an AnimationResult
Starting an
Animation
will now return a handle which can be used to interact with theAnimation
(likestop
ping it). - #54: Embedding images/bitmaps
-
#46: Implement “Log” Component
The
LogArea
component 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
Modifier
s. One which modifies how textures are transformed, and one which can modify aTile
before 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
Snapshot
object forsnapshot()
instead of aMap
Now the
snapshot()
method returns a properSnapshot
object instead of just aMap
. -
#84: Font to Tile refactor
This was a rather thorough change. Previously Zircon used the
Font
abstraction which was now refactored toTile
andTilesetResource
which streamlines and simplifies howTile
s 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
Blink
andAnimation
timing 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
refresh
and other such methods in order to redraw the screen. TheApplication
class was also introduced to accommodate this change. -
#81: Multiplatform refactor
The majority of the code in
zircon.jvm
were moved tozircon.core
which 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 aDrawSurface
using 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
Position
s with a negative component (x
, ory
), not it is possible, and it is only limited in specific places (likeComponent
s) -
#73: Improve TileGraphics performance
TileGraphics
used arrays before, now it uses sparseMap
s. This enhances performance, and also makes it possible to haveTileGraphics
with stupid size. -
#69: CombineWith should resize new image to fit TileGraphics
When
combineWith
is called on aTileGraphics
it will properly be resized to accommodate the other image. -
#67: Add word wrap to CharacterTileString
CharacterTileString
now supports word wrap! -
#61: Proper
FontTextureRegion
abstraction for different backends.Previously
Tile
drawing 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
ComponentDecorationRenderer
s can be added to anyComponent
during 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
TilesetResource
s which are not square, there are also some added tilesets likeAcorn
andLord Nightmare
. -
#32: Tile alignment by pixel
Now
Tile
s 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
Component
support - Add floating, modal and scrollable components
Component
layout 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.