doodle/wasm
Noah Petherbridge 8965a7d86a Doodads: Crumbly Floor, Start Flag & State Blocks
Add new doodads:

* Start Flag: place this in a level to set the spawn point of the player
  character. If no flag is found, the player spawns at 0,0 in the top
  corner of the map. Only use one Start Flag per level, otherwise the
  player will randomly spawn at one of them.
* Crumbly Floor: a solid floor that begins to shake and then fall apart
  after a moment when a mobile character steps on it. The floor respawns
  after 5 seconds.
* State Blocks: blue and orange blocks that toggle between solid and
  pass-thru whenever a State Button is activated.
* State Button: a solid "ON/OFF" block that toggles State Blocks back
  and forth when touched. Only activates if touched on the side or bottom;
  acts as a solid floor when walked on from the top.

New features for doodad scripts:

* Actor scripts: call SetMobile(true) to mark an actor as a mobile mob
  (i.e. player character or enemy). Other doodads can check if the actor
  colliding with them IsMobile so they don't activate if placed too close
  to other (non-mobile) doodads in a level. The Blue and Red Azulians
  are the only mobile characters so far.
* Message.Broadcast allows sending a pub/sub message out to ALL doodads
  in the level, instead of only to linked doodads as Message.Publish does.
  This is used for the State Blocks to globally communicate on/off status
  without needing to link them all together manually.
2019-12-30 18:13:28 -08:00
..
index.html Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
main_wasm.go Doodads: Crumbly Floor, Start Flag & State Blocks 2019-12-30 18:13:28 -08:00
Makefile Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
README.md Switch github.com/kirsle/golog to git.kirsle.net/go/log 2019-12-22 18:34:31 -08:00
server.go Demo Running Level as Title Screen Wallpaper 2019-06-27 22:59:36 -07:00
wasm_exec.js Update wasm_exec.js from latest Go release 2019-12-22 18:15:09 -08:00

WebAssembly Port

Build and Test

Change to the wasm/ folder and type make to build doodle.wasm

To test it with a local Go server, cd to the wasm/ folder and run go run server.go and visit http://localhost:8080/

Copy the fonts and assets folders from the project root to the wasm/ directory so they're available over HTTP.

wasm_exec.js

To update the wasm_exec.js to match your version of Go:

# Fedora: install golang-misc
sudo dnf install golang-misc

# Copy the wasm_exec.js
cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./

Font Support

Fonts are implemented as CSS embedded fonts configured in wasm/index.html

The font family name should match the filename, sans .ttf extension, for example "DejaVuSans-Bold". Doodle's internal logic converts a FontFilename string like "./fonts/DejaVuSans.ttf" into the base name to use as the font family. It also has fallbacks for sans-serif and serif in case of any problems.

Known Bugs and Limitations

  • git.kirsle.net/go/log
    • The detection of an interactive terminal is broken in WASM.
    • terminal.IsTerminal(int(os.Stdout.Fd()))
    • As a workaround, comment it out and hardcode to false
  • Userdir
    • For WASM we'll want to use localStorage to store user drawings instead of the userdir.
  • Wallpaper support
    • WASM can't use os.Open to read the wallpaper image, so will need another method to load the image.
    • Texture caching support isn't implemented yet to hold the four corner textures of a wallpaper.
    • As a workaround, added a wallpaper.ready boolean and relevant functions exit early for WASM so wallpapers don't render at all.