You are currently viewing New Zircon Release is out: 2020.2.0-RELEASE

New Zircon Release is out: 2020.2.0-RELEASE

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!

You can grab this release from Maven Central here. More on how to add Zircon as a dependency to your project can be found here.

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:

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

~60 FPS

with a

80x24

grid and

16x16

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

16x16

tiles (that’s a size of

120x67

) Zircon runs with

~100 FPS

in the benchmarks. This means that we achieved a ~8x speedup! The goal for the next release is to have

100 FPS

with

8x8

tiles.

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

TileGrid

, but lets all individual

Layer

s and

Component

s

render

themselves. This also means that internal state is no longer stored in

Component

s, they are rendered whenever it is necessary instead.

There is also a

FastTileGraphics

implementation that enables this optimization. It uses an

Array

internally and it is significantly faster than the old

TileGraphics

that was using a

PersistentList

.

Zircon now also supports

StackedTile

s. a

StackedTile

is a composite that has a stack of

Tile

s within it. This is very useful to create composite tile objects and also for rendering. It also enables the

Component

system (and the

GameArea

) 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

@Deprecated

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.

The

GameArea

received some refurbishments as well. Now the

GameArea

is rendered using a simple

ComponentRenderer

which means that you can use any

Component

for rendering a

GameArea

. This also means that this component can be a

Container

and can have additional children! Another addition to the

GameArea

is filtering. Now you can add filters to a

GameArea

that looks similar to a

Modifier

, but it has more parameters including the

Position3D

of the

Block

that’s being modified in the

GameArea

. 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

z

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

ColorTheme

s with each release and this one is no different. There are some now ones as you can see in this example. You can also use them in your games.

You can now add padding to your

Component

s. Padding is implemented with a

ComponentDecoration

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

Fragment

s that you were waiting for a while now!

Here is a full list of issues we finished for this release:

New Features

  • #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

Enhancements

  • #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

Bug fixes

  • #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

Road Map

We’ve covered a lot of ground in this release, but there are still things to do:

Credits

Thank you for all of you out there who helped with this release! Special thanks to Baret, Bergin, Coldwarrl, Luke and Seveen for their contributions!

Contribute

If you think that you can contribute or just have an idea feel free to join the discussion on our Discord server.

submitted by /u/addamsson
[link] [comments]