# Doodad Scripting Engine Some ideas for the scripting engine for Doodads inside your level. # Architecture The script will be an "attached file" in the Doodad format as a special file named "index.js" as the entry point. Each Doodad will have its `index.js` script loaded into an isolated JS environment where it can't access any data about other Doodads or anything user specific. The `main()` function is called so the Doodad script can set itself up. The `main()` function should: * Initialize any state variables the Doodad wants to use in its script. * Subscribe to callback events that the Doodad is interested in catching. The script interacts with the Doodle application through an API broker object (a Go surface area of functions). # API Broker Interface ```go type API interface { // "Self" functions. SetFrame(frame int) // Set the currently visible frame in this Doodad. MoveTo(render.Point) // Game functions.k EndLevel() // Exit the current level with a victory FailLevel(message) /************************************ * Event Handler Callback Functions * ************************************/ // When we become visible on screen or disappear off the screen. OnVisible() OnHidden() // OnEnter: the other Doodad has ENTIRELY entered our box. Or if the other // doodad is bigger, they have ENTIRELY enveloped ours. OnEnter(func(other Doodad)) // OnCollide: when we bump into another Doodad. OnCollide(func(other Doodad)) } ``` ## Mockup Script ```javascript function main() { console.log("hello world"); // Register event callbacks. Doodle.OnEnter(onEnter); } // onEnter: handle when another Doodad (like the player) completely enters // the bounding box of our Doodad. Example: a level exit. function onEnter(other) { } ```