{"id":15402293,"url":"https://github.com/mirkosertic/gamecomposer","last_synced_at":"2025-04-15T01:05:30.176Z","repository":{"id":11448247,"uuid":"13907695","full_name":"mirkosertic/GameComposer","owner":"mirkosertic","description":"GameComposer is a game authoring tool and also a game runtime environment targeting at desktop and mobile devices.","archived":false,"fork":false,"pushed_at":"2023-11-01T04:29:45.000Z","size":86678,"stargazers_count":71,"open_issues_count":14,"forks_count":22,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-15T01:05:08.519Z","etag":null,"topics":["domain-driven-design","game-engine","gwt","hexagonal-architecture","html","java","javafx","polymer","teavm"],"latest_commit_sha":null,"homepage":"https://mirkosertic.github.io/GameComposer","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mirkosertic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-10-27T18:24:00.000Z","updated_at":"2025-03-06T07:56:48.000Z","dependencies_parsed_at":"2024-10-20T11:39:20.507Z","dependency_job_id":null,"html_url":"https://github.com/mirkosertic/GameComposer","commit_stats":{"total_commits":802,"total_committers":6,"mean_commits":"133.66666666666666","dds":0.2219451371571073,"last_synced_commit":"bbe0c583c9bba894f3fa3e2f80eb0a73025e3f58"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirkosertic%2FGameComposer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirkosertic%2FGameComposer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirkosertic%2FGameComposer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirkosertic%2FGameComposer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mirkosertic","download_url":"https://codeload.github.com/mirkosertic/GameComposer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248986313,"owners_count":21194025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["domain-driven-design","game-engine","gwt","hexagonal-architecture","html","java","javafx","polymer","teavm"],"created_at":"2024-10-01T16:02:25.541Z","updated_at":"2025-04-15T01:05:30.148Z","avatar_url":"https://github.com/mirkosertic.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"GameComposer\n=============\n\nGameComposer is a game authoring tool and also a game runtime environment targeting at desktop and mobile devices.\n\nStarted 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.\n\nIts core is based on Domain-driven Design and a hexagonal architecture. The main game simulation logic stayed the same for years, but\nreplacing presentation logic and adapting it to new technologies is a lot easier compared to traditional layered applications.\n\nTo see it in action please visit [this page](https://www.mirkosertic.de/blog/2013/11/a-javafx-based-game-authoring-system/)\n\nCurrent build status: ![Build](https://github.com/mirkosertic/GameComposer/workflows/Build/badge.svg) \n\n\nGameEngine-Editor\n-----------------\n\nThis is the shiny new Web-enabled editor for the GameEngine. It is based on HTML5, Polymer/Webcomponents, Electron and TeaVM. \n\n![Webeditor in Action](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/webeditor.png)\n\n[Edit Dukes Adventure Example Game](https://mirkosertic.github.io/GameComposer/games/editor/index.html)\n\n![Webeditor editing an Event Sheet](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/webeventsheet.png)\n\n![Webeditor editing a LUA script](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/luawebeditor.png)\n\nThe Electron Releases are available for download at the GitHub Releases section.\n\n![Webeditor in Electron](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/electron.png)\n\nExample Games\n-------------\n\nTeaVM Renderer:\n\n[Bouncing block](https://mirkosertic.github.io/GameComposer/games/teavm/bounce/index.html)\n\n[Camera with Clock](https://mirkosertic.github.io/GameComposer/games/teavm/camera/index.html)\n\n[Gravity and Mouse](https://mirkosertic.github.io/GameComposer/games/teavm/gravity/index.html)\n\n[Duke on the Platform](https://mirkosertic.github.io/GameComposer/games/teavm/platformer/index.html)\n\n[Position test](https://mirkosertic.github.io/GameComposer/games/teavm/positiontest/index.html)\n\n[Rotating actor](https://mirkosertic.github.io/GameComposer/games/teavm/rotatingactor/index.html)\n\n[Networking](https://mirkosertic.github.io/GameComposer/games/teavm/networking/index.html)\n\n[Arcade Racer](https://mirkosertic.github.io/GameComposer/games/teavm/arcaderacer/index.html)\n\n\nGWT Renderer:\n\n[Bouncing block](https://mirkosertic.github.io/GameComposer/games/gwt/bounce/index.html)\n\n[Camera with Clock](https://mirkosertic.github.io/GameComposer/games/gwt/camera/index.html)\n\n[Gravity and Mouse](https://mirkosertic.github.io/GameComposer/games/gwt/gravity/index.html)\n\n[Duke on the Platform](https://mirkosertic.github.io/GameComposer/games/gwt/platformer/index.html)\n\n[Position test](https://mirkosertic.github.io/GameComposer/games/gwt/positiontest/index.html)\n\n[Rotating actor](https://mirkosertic.github.io/GameComposer/games/gwt/rotatingactor/index.html)\n\n[Arcade Racer](https://mirkosertic.github.io/GameComposer/games/gwt/arcaderacer/index.html)\n\n\nDragome Renderer:\n\n[Bouncing block](https://mirkosertic.github.io/GameComposer/games/dragome/bounce/index.html)\n\n[Camera with Clock](https://mirkosertic.github.io/GameComposer/games/dragome/camera/index.html)\n\n[Gravity and Mouse](https://mirkosertic.github.io/GameComposer/games/dragome/gravity/index.html)\n\n[Duke on the Platform](https://mirkosertic.github.io/GameComposer/games/dragome/platformer/index.html)\n\n[Position test](https://mirkosertic.github.io/GameComposer/games/dragome/positiontest/index.html)\n\n[Rotating actor](https://mirkosertic.github.io/GameComposer/games/dragome/rotatingactor/index.html)\n\n[Arcade Racer](https://mirkosertic.github.io/GameComposer/games/dragome/arcaderacer/index.html) \n\n\nGameEngine\n----------\n\nGameEngine is the cross-platform game engine.\n\nCore concepts and components of the game engine are:\n\n| Concept /  component   | Description\n|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------\n| Game                   | A Game is the top level container. Each Game is split into several GameScenes.\n| GameScene              | A Scene is like a level of a game. A Scene has a collection of GameObjects, Assets and Events.\n| GameSystem             | A GameSystem defines a subsystem of the game engine. There are GameSystems for physics, sounds and other stuff\n| GameView               | A GameView is the presentation of a GameScene to some kind of consumer. This can be a screen renderer or even a remote consumer.\n| GameObject             | A GameObject is a template for visible objects. The behavior of a GameObject is defined by GameComponentTemplates\n| BehaviorTemplate       | A BehaviorTemplate defines some kind of behavior, e.g. if it is static, a sprite or driven by physics.\n| GameObjectInstance     | A GameObjectInstance is an instance of a GameObject. It inherits the defined BehaviorTemplates by copying them into a Behavior\n| Behavior               | A Behavior is the behavior status for a BehaviorTemplate and a GameObjectInstance.\n| Event                  | An 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.\n| EventSheet             | An EventSheet is the rule engine. Each rule has a condition and some actions.\n| GameLoop               | The GameLoop drives the engine by calling the GameSystems, rendering the GameView and dispatching events.\n| GameProcess            | A GameProcess is something that takes multiple GameLoop cycles to complete, for instance playing background music or playing an animation.\n\nGameEngine-Networking\n--------------\n\nNetworking support is implemented as a RemoteGameView. Local events are sent between game instances to sync the distributed game models.\n\nNetworking is implemented in a very early beta state only by the TeaVM Renderer. Events are sent to a Firebase instance, which\nthen syncs the events back to other browsers bound to the same Firebase instance. Take a look at the [Networking](https://mirkosertic.github.io/GameComposer/games/teavm/networking/index.html) example\nto 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.\nOnly the game state is synchronized using events.\n\nGameEngine-TeaVMRenderer (preferred)\n--------------\n\nThis is the game presentation logic using the TeaVM Java-to-JavaScript Transpiler Framework. It will render the game view\nusing [pixi.js](http://www.pixijs.com), which uses WebGL or the HTML5 Canvas API as a fallback. Sound is done using [howler.js](https://github.com/goldfire/howler.js/) \n\nGameEngine-BytecoderRenderer (experimental)\n--------------\n\nThis is a first implementation of a [WebAssembly](http://webassembly.org/) based GameRenderer. Under the hood it uses \n[Bytecoder](https://github.com/mirkosertic/Bytecoder) to compile the Game Runtime to WebAssembly and plain old JavaScript as a fallback.\nIt will render the game view using [pixi.js](http://www.pixijs.com), which uses WebGL or the HTML5 Canvas API as a fallback.\n\nPlease note that this is experimental stage!\n\nExample games:\n\n* [Physics Game Example compiled to WebAssembly](https://www.mirkosertic.de/examples/gameengine/index.html)\n* [Physics Game Example compiled to JavaScript](https://www.mirkosertic.de/examples/gameengine/indexjs.html)\n\nGameEngine-CordovaRenderer (experimental)\n--------------\n\nThis is basically the TeaVMRenderer packaged as a Cordova Application backed by Crosswalk(Chromium).\n\n![A game running in Android Emulator](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/android.png)\n\n\nGameEngine-FXRenderer (outdated)\n---------------------\n\nThis is the game presentation logic by implementing a GameView using JavaFX 2. This also includes a Soundsystem implementation based on Java Sound API.\n\nGameEngine-AndroidRenderer (outdated)\n--------------\n\nThis is the game presentation logic using the Android Java SDK. This also includes a SoundSystem implementation for Android devices.\nWe use an Android SurfaceView for rendering. Future versions will include OpenGL ES support.\n\nGameEngine-GWTRenderer (outdated)\n--------------\n\nThis 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.\nCurrently the HTML5 renderer tries to use WebGL. If WebGL is not available, it will fallback to the HTML5 Canvas API.\n\nGameEngine-DragomeRenderer (experimental)\n--------------\n\nThis is the game presentation logic using the Dragome Java-to-JavaScript Transpiler Framework. It will render the game view\nusing the HTML5 Canvas API.\n\nGameComposer (outdated)\n-----------\n\nGameComposer is the authoring tool, the IDE. It is a JavaFX2 application. Using this tool, games can be designed\nand tested. Finally, they can be exported to a target runtime, e.g. HTML5.\n\n![JavaFX IDE](https://raw.githubusercontent.com/mirkosertic/GameComposer/master/docs/images/fxeditor.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmirkosertic%2Fgamecomposer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmirkosertic%2Fgamecomposer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmirkosertic%2Fgamecomposer/lists"}