Awesome
Haxe support library for the Defold game engine
This library allows writing beautiful Haxe code for the Defold game engine \o/
Features
- Fully typed Defold API with proper compile-time errors and IDE services.
- Type-safe game object messages and properties with zero overhead.
- Strengths of Haxe without compromises: powerful type system, meta-programming, static optimizations, dead code elimination and cross-target code sharing.
- Defold hot reloading is now supported!
Quick start
(assuming you already installed Haxe😊)
- Install this library:
- From this repo:
haxelib git hxdefold https://github.com/hxdefold/hxdefold
- Or from lib.haxe.org:
haxelib install hxdefold
- From this repo:
- Run
haxelib run hxdefold init
inside your Defold project. It will create a sampleHello.hx
script component class and abuild.hxml
for building it. - Read the comments in these files to quickly get some idea.
- Build with
haxe build.hxml
to get the lua output. - Add
Hello.script
to your game object in the editor and observe the greeting in the debug console. - Proceed with writing well-structured, expressive and type safe code for your Defold game.
How does it look like
import defold.support.Script;
// component class that defines the callback methods
// after compiling Haxe, the `Hello.script` will appear in the Defold project that can be attached to game objects
class Hello extends Script<HelloData> {
// fields with @property annotation will show up in the editor
@property var power:Int = 9000;
// the `init` callback method
override function init() {
trace('Haxe is over ${power}!'); // will be printed to the debug console
}
// the `update` callback method
override function update(dt:Float) {}
}
Documentation
Here is the API reference.
Migration to v2 is documented in the v2 pull request.
Details about usage can be found on the wiki.
And here are some example Defold projects, ported from Lua:
How does it work?
Since version 3.4, Haxe supports compiling to Lua, making it possible to use Haxe with Lua-based engines, such as Defold.
However, this requires a bit of autogenerated glue code, because Defold expects scripts to be in separate files, while Haxe compiles everything in a single lua module. So what we do, is generate a simple glue .script
file for each class extending the magic defold.support.Script
base class (there are also GuiScript
and RenderScript
).
For example, for the Hello
script from this README, this glue code is generated in the Hello.script
file:
-- Generated by Haxe, DO NOT EDIT (original source: src/Hello.hx:11: lines 11-16)
go.property("power", 9000)
require "main"
function init(self)
_hxdefold_.Hello_init(self)
end
You can then add this script to the game objects in the Defold Editor.
Versions
- Major number will be incremented for significant reworks that are certainly forward-breaking.
- Minor number will be incremented when updating to a new Defold API version. These updates may come with forward-breaking changes.
- Patch version will be incremented for bug fixes and potentially backwards-breaking changes.
Note that this is not standard semver, since we might potentially ship backwards-breaking changes that increment only the patch number.
hxdefold | Haxe | Defold API |
---|---|---|
2.0.* | 4.3 | 1.6.4 |
Logo
Made by the awesome @markknol. Check out his website for more art&code!