====== MooEngine ======
===== Overview =====
{{:mooengine:icon.png?nolink}}
MooEngine was my attempt at creating a 100% scriptable game engine. I was able to integrate all the necessary features by creating a new scripting language called MooScript.
The basic features of MooScript are:
* syntax similar to c, only less complicated
* built-in datatypes: bool, int, float, string
* object-oriented scripting language including inheritance and the like
* loops, vectors, maps...
* one thread per script
The obligatory Hello World code:
log("Hello World")
Not very exciting, right? :)
Let's make it slightly more interesting:
main : 1000
{
log("Hello World")
}
The (optional) main function is now automatically called every 1000ms.
Same example, but this time the "Hello World" string is generated by a function:
Function getMessage() : String
{
return "Hello World"
}
main : 1000
{
log(getMessage())
}
If you ever wanted to simulate a cow:
Function getMoo(Integer num) : String
{
return "M" + "o" * num
}
main : 1000
{
log(getMoo(2 + rand(10)))
}
The output will be:
Moooo
Moo
Moooooo
...
Rather straightforward. Using classes is not very complicated either:
Class Animal
{
String name
Method talk()
{
log("I can't talk")
}
}
Class Cow : Animal
{
Bool happy = TRUE
// constructor
Cow(String n)
{
name = n
}
Method talk()
{
if (happy)
log(name + " 3:-)")
else
log(name + " 3:-(")
}
Method tip()
{
happy = FALSE
}
}
Cow cow1("MadCow"), cow2("BadCow")
cow1.talk()
cow2.tip()
cow2.talk()
The output will be:
MadCow: 3:-)
BadCow: 3:-(
Some of the more interesting features are:
* inter-process communication
* c++ <-> script: synchronized variables
* c++ -> script: call methods
* script -> cpp: emit signals
* script <-> script: call methods and access variables
* many built-in functions (maths, string manipulation, file operations)
* create and manage GUI elements: windows, widgets
* create and manage arbitrary 2D scenes
* create and manage arbitrary 3D scenes (complete with entity handling, keyboard and mouse input, ...)
* create and modify images
More highlights:
* dynamically load/unload scripts
* scripts share common scene graph for quick rendering
* integrate 2D/3D scenes in widgets using offscreen rendering
* HTTP client: automatically download remote content
* HTTP server: dynamic webpages using MooScript
* ...
===== Current State =====
**??% done** - stopped
===== Screenshots =====
{{:mooengine:screenshot0001.png?320|}} {{:mooengine:screenshot0002.png?320|}} {{:mooengine:screenshot0003.png?320|}} {{:mooengine:screenshot0004.png?320|}} {{:mooengine:screenshot0000.png?320|}}
===== Videos =====
[[http://videos.munix.at/?v=mooengine1|Video 1: Script Launcher Demonstration]]
[[http://videos.munix.at/?v=mooengine2|Video 2: Script Editor]]
[[http://videos.munix.at/?v=mooengine3|Video 3: Mini Games]]
[[http://videos.munix.at/?v=mooengine4|Video 4: Scripted 3D Scene]]