GameComposer

April 28, 2023 ยท View on GitHub

GameComposer is a game authoring tool and also a game runtime environment targeting at desktop and mobile devices.

Started as a JavaFX implementation some years ago, it now supports desktop and mobile devices, with support for modern technologies such as HTML5, WebGL, Apache Cordova/Crosswalk and Electron.

Its core is based on Domain-driven Design and a hexagonal architecture. The main game simulation logic stayed the same for years, but replacing presentation logic and adapting it to new technologies is a lot easier compared to traditional layered applications.

To see it in action please visit this page

Current build status: Build

GameEngine-Editor

This is the shiny new Web-enabled editor for the GameEngine. It is based on HTML5, Polymer/Webcomponents, Electron and TeaVM.

Webeditor in Action

Edit Dukes Adventure Example Game

Webeditor editing an Event Sheet

Webeditor editing a LUA script

The Electron Releases are available for download at the GitHub Releases section.

Webeditor in Electron

Example Games

TeaVM Renderer:

Bouncing block

Camera with Clock

Gravity and Mouse

Duke on the Platform

Position test

Rotating actor

Networking

Arcade Racer

GWT Renderer:

Bouncing block

Camera with Clock

Gravity and Mouse

Duke on the Platform

Position test

Rotating actor

Arcade Racer

Dragome Renderer:

Bouncing block

Camera with Clock

Gravity and Mouse

Duke on the Platform

Position test

Rotating actor

Arcade Racer

GameEngine

GameEngine is the cross-platform game engine.

Core concepts and components of the game engine are:

Concept / componentDescription
GameA Game is the top level container. Each Game is split into several GameScenes.
GameSceneA Scene is like a level of a game. A Scene has a collection of GameObjects, Assets and Events.
GameSystemA GameSystem defines a subsystem of the game engine. There are GameSystems for physics, sounds and other stuff
GameViewA GameView is the presentation of a GameScene to some kind of consumer. This can be a screen renderer or even a remote consumer.
GameObjectA GameObject is a template for visible objects. The behavior of a GameObject is defined by GameComponentTemplates
BehaviorTemplateA BehaviorTemplate defines some kind of behavior, e.g. if it is static, a sprite or driven by physics.
GameObjectInstanceA GameObjectInstance is an instance of a GameObject. It inherits the defined BehaviorTemplates by copying them into a Behavior
BehaviorA Behavior is the behavior status for a BehaviorTemplate and a GameObjectInstance.
EventAn Event can be triggered by a consumer by sending it via the GameView to the engine. An Event can also be triggered or consumed by a GameComponent or GameSystem.
EventSheetAn EventSheet is the rule engine. Each rule has a condition and some actions.
GameLoopThe GameLoop drives the engine by calling the GameSystems, rendering the GameView and dispatching events.
GameProcessA GameProcess is something that takes multiple GameLoop cycles to complete, for instance playing background music or playing an animation.

GameEngine-Networking

Networking support is implemented as a RemoteGameView. Local events are sent between game instances to sync the distributed game models.

Networking is implemented in a very early beta state only by the TeaVM Renderer. Events are sent to a Firebase instance, which then syncs the events back to other browsers bound to the same Firebase instance. Take a look at the Networking example to see it in action. In this case, Firebase acts as a non-authorative game server. The game models and simulation is still run in the local browser. Only the game state is synchronized using events.

GameEngine-TeaVMRenderer (preferred)

This is the game presentation logic using the TeaVM Java-to-JavaScript Transpiler Framework. It will render the game view using pixi.js, which uses WebGL or the HTML5 Canvas API as a fallback. Sound is done using howler.js

GameEngine-BytecoderRenderer (experimental)

This is a first implementation of a WebAssembly based GameRenderer. Under the hood it uses Bytecoder to compile the Game Runtime to WebAssembly and plain old JavaScript as a fallback. It will render the game view using pixi.js, which uses WebGL or the HTML5 Canvas API as a fallback.

Please note that this is experimental stage!

Example games:

GameEngine-CordovaRenderer (experimental)

This is basically the TeaVMRenderer packaged as a Cordova Application backed by Crosswalk(Chromium).

A game running in Android Emulator

GameEngine-FXRenderer (outdated)

This is the game presentation logic by implementing a GameView using JavaFX 2. This also includes a Soundsystem implementation based on Java Sound API.

GameEngine-AndroidRenderer (outdated)

This is the game presentation logic using the Android Java SDK. This also includes a SoundSystem implementation for Android devices. We use an Android SurfaceView for rendering. Future versions will include OpenGL ES support.

GameEngine-GWTRenderer (outdated)

This is the game presentation logic using GWT and HTML5(JavaScript) by implementing a GameView. This also includes a SoundSystem implementation based on HTML5 Media API. Currently the HTML5 renderer tries to use WebGL. If WebGL is not available, it will fallback to the HTML5 Canvas API.

GameEngine-DragomeRenderer (experimental)

This is the game presentation logic using the Dragome Java-to-JavaScript Transpiler Framework. It will render the game view using the HTML5 Canvas API.

GameComposer (outdated)

GameComposer is the authoring tool, the IDE. It is a JavaFX2 application. Using this tool, games can be designed and tested. Finally, they can be exported to a target runtime, e.g. HTML5.

JavaFX IDE