Zircon is an extensible, multiplatform and user-friendly tile engine with text GUI support.
If you are not yet familiar with the project take a look at our Project Page.
The kdocs can be found here. Javadocs are also coming soon!
Also if you have any questions about this release, feel free to come up to our Discord Server and ask them!
TL;DR for the Impatient:
- Stacked Tiles
- Android Renderer prototype
- Javadocs (finally)
- (not just) Color filters for the Game Area
- Another example here
- Switching between projection modes on the fly
- Proper depreciation cycle!
- New Color Themes
- Padding support
- Performance optimization: 8x FPS!
- New Fragments:
Highlights of this release
This was a very busy year for us. After the previous release we started focusing on the internals of Zircon. Previously we didn’t have an FPS goal nor performance optimizations in the code. The Swing benchmark was running with
tiles. If someone used a full HD screen it was significantly slower, so we added some optimizations. Right now with a full HD screen and
tiles (that’s a size of
) Zircon runs with
in the benchmarks. This means that we achieved a ~8x speedup! The goal for the next release is to have
This performance optimization was made possible by some internal refactorings. The rendering model was modified in a way that the renderer no longer queries the state of the
, but lets all individual
themselves. This also means that internal state is no longer stored in
s, they are rendered whenever it is necessary instead.
There is also a
implementation that enables this optimization. It uses an
internally and it is significantly faster than the old
that was using a
Zircon now also supports
is a composite that has a stack of
s within it. This is very useful to create composite tile objects and also for rendering. It also enables the
system (and the
) to be significantly easier to implement. It is is not yet clear what stacking means take a look at this screenshot!
There are some new prototypes as well. One of them is an Android renderer!
Many of you were looking for Javadocs so we also added this to the project! You can find it here. This is kdocs (Kotlin Docs) for now, but soon we’ll add proper Javadocs as well! We also started to add code samples within the docs, so you’ll be able to see what’s what without having to navigate away.
We also started a proper depreciation cycle now, that Zircon has a significant userbase. When we deprecate something it will be annotated with the
annotation, and these things will get removed in the next release. We also documented (in the source code) what to use instead of the things we’re going to remove.
received some refurbishments as well. Now the
is rendered using a simple
which means that you can use any
for rendering a
. This also means that this component can be a
and can have additional children! Another addition to the
is filtering. Now you can add filters to a
that looks similar to a
, but it has more parameters including the
that’s being modified in the
. One useful example for this is to implement depth and distance filters. In this example there is a depth filter. The pyramid’s colors are all the same, but the filter changes front and top tiles to add a visual effect, and also makes blocks that have a lower
level appear darker. This is how a building looks like with a filter applied.
Another thing you might have noticed fromt he GIF is that now you can switch between projections on the fly. You can also see it in action in this map generation example.
We usually refurbish the
You can now add padding to your
s. Padding is implemented with a
so it can be added to any component, and it looks like this.
With this release now we have almost everything in place to implement the rest of the backlog! Here are some prototypes for what’s going to be added to the next release including some
s that you were waiting for a while now!
Here is a full list of issues we finished for this release:
- #360: Enable the ModalComponentContainer to try dispatching UIEvents to multiple containers if a container returns Pass
- #357: Add the option to add padding to a component
- #355: Add the option to keep the Component’s properties when it is attached.
- #350: Create a filtering mechanism for the GameArea that would enable adding effects to individual Blocks.
- #359: Enable multiple Fragments to be added to a Container in one go.
- #91: Add frame rate limiting capability
- #348: Add a function that will create a TileBuilder out of a Tile
- #349: Add a function that will create a BlockBuilder out of a Block
- #339: Create a Tile implementation that’s composed of multiple Tiles.
- #297: Set application icon
- #299: Create matchers for UIEvents
- #315: New Fragment: TilesetSelector and ColorThemeSelector
- #300: Enable the user to set default keyboard shortcuts
- #296: Add callbacks for Rendering
- #345: Document all the API classes properly
- #325: Create docs pages for each release using Dokka
- #329: Make Layer implement Layerable
- #328: Refactor Components to be Layers
- #353: Use fun interfaces where applicable
- #352: Refactor builders to use prototypes with defaults.
- #146: Generate javadoc (Dokka) during build and deploy it to a site
- #344: Harmonize mutable and accessor mixin names.
- #338: Optimize Rendering Performance
- #327: Use a push model instead of a pull one for rendering
- #332: Checkbox – Alignment & Text
- #319: Size3d#containsPosition(position: Position3D) should also check for negative values
- #318: Add new Color Themes
- #308: Refactor Internal State handling to use Properties
- #87: Review tint, shade and tone in TileColor
- #336: Moving a Component with anything other than moveTo can lead to failed bounds check
- #316: RectangleFactory (possibly others, too) ignores shape position
- #321: MouseEventType.MOUSE_WHEEL_ROTATED_UP not getting triggered
- #311: Components are not visible in AllComponentsExampleJava
- #307: Clean up tilesets
- #305: Libgdx not working in 2020.0.2-PREVIEW
- #304: Clearing a TileGrid breaks draw operations
- #230: Occassional incorrect window size
- #341: Fix the rendering logic in GameArea
- #302: Blocks are not rendered properly in a GameArea when tiles are not opaque.
- #277: Hiding with transforming is leaving black background in LayerTransformerExample
- #301: Component remains activated when space is pressed and focus is lost (pressing Tab)
- #298: Focus handling keys don’t work when using LibGDX
We’ve covered a lot of ground in this release, but there are still things to do:
- Scrollable Components
- Floating Components
- Drag’n Drop Support
- Custom Layout Support
- Component Themes
- Custom Component Support
- Tree Component
- Table Component
- Accordion Component
- Combo Box Component
- IntelliJ Plugin
- Grid / Screen Filters
If you think that you can contribute or just have an idea feel free to join the discussion on our Discord server.