GS Engine
v0.0.15The engine that plays exercises from JSON files. Eventually a JS library for embedding in web apps, and native on iOS/Android.
Haxe 4.3 · OpenFL · target html5
Interactive exercises: editor + engine
GS Creator is a platform for creating and playing interactive educational exercises. The author builds an exercise in the editor, and the engine plays it in an app — in the browser and, eventually, on mobile devices as well.
The engine that plays exercises from JSON files. Eventually a JS library for embedding in web apps, and native on iOS/Android.
Haxe 4.3 · OpenFL · target html5
A visual exercise editor: the scene, the component palette, the property inspector, the asset library, validation and JSON export for the engine.
Angular 22
In GS Editor you lay out a scene from five components (Image, Text, Component, Container, Target), assign images, captions and sounds, and set the component options, the solution rule and the actions (e.g. a sound, hiding an element or changing its appearance).
The editor saves the exercise as a projekt.json file + a folder of assets. The file format is a schema shared by the editor and the engine.
GS Engine loads the JSON, checks the required features, builds the scene from the components and judges the player's moves by the solution rule (e.g. selecting).
Eventually the engine will run as a library in web apps (Angular, React) and natively on iOS and Android.












Fruit in the basket, toys in the box, plush toys on the cushions. The baskets hold many elements (capacity: many), the cushions one each (capacity: 1); a wrong move goes back to its place, a right one stays locked.
Required features: element.imageelement.textelement.componentelement.targetvisual.textcomponent.draggabletarget.capacitytarget.snaprule.placeaction.play-soundaction.lockaction.returnaction.emit-particles
The editor and the engine share one exercise file format (version 2.4). Exercise JSON: schema (the schema version), requires (the engine features the exercise uses), size, language, assets (files from the exercise package or shared assets from libraries), elements (a scene of five components: Image, Text, Component, Container, Target — with position, layer, appearance with states, component options, e.g. the line anchor point (anchor) of a connectable point, and actions in on), rule (the solution rule: select, place, connect — with dots at the line ends (endDot) — or open) and on (global actions). Since version 2.4 the labels and descriptions in the engine catalog are multilingual texts (pl, en). An example file with a background, an instruction and one element to select:
{
"schema": "2.0",
"requires": ["element.image", "element.text", "element.component", "visual.text", "component.clickable",
"rule.select", "action.play-sound", "action.hide"],
"id": "owoce",
"size": { "width": 1200, "height": 675 },
"languages": ["pl", "en"],
"defaultLanguage": "pl",
"assets": [
{ "id": "background", "kind": "image", "src": { "default": "images/background.png" } },
{ "id": "apple", "kind": "image", "src": { "default": "images/apple.png" } },
{ "id": "good", "kind": "audio", "src": { "default": "sounds/good.wav" } }
],
"elements": [
{ "id": "background", "type": "image", "rect": [0, 0, 1200, 675], "layer": 0,
"visual": { "type": "image", "asset": "background" } },
{ "id": "instruction", "type": "text", "rect": [60, 50, 1016, 70], "layer": 2,
"visual": { "type": "text", "text": { "pl": "Zaznacz <b>owoce</b>.", "en": "Select the <b>fruit</b>." },
"size": 40, "align": "center" } },
{ "id": "apple-1", "type": "component", "rect": [60, 150, 220, 220], "layer": 1,
"visual": { "type": "image", "asset": "apple" }, "clickable": true,
"on": { "correct": [ { "do": "play-sound", "asset": "good" }, { "do": "hide", "target": "self" } ] } }
],
"rule": { "kind": "select", "correct": ["apple-1"] }
}