2018-10-28 05:22:13 +00:00
|
|
|
# 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
|
2021-08-09 04:54:37 +00:00
|
|
|
FailLevel(message)
|
2018-10-28 05:22:13 +00:00
|
|
|
|
|
|
|
/************************************
|
|
|
|
* 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) {
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|