Noah Petherbridge
c4456ac51b
Updates the Self API to expose more uix.Actor fields: * Doodad() * GetBoundingRect() * HasGravity() * IsFrozen() * IsMobile() * LayerCount() * ListItems() * SetGrounded() * SetWet() * Velocity() - note: it was Self.GetVelocity() before. Self.GetVelocity is deprecated and made an alias to Velocity.
57 lines
1.7 KiB
Markdown
57 lines
1.7 KiB
Markdown
# Tour of the Code
|
|
|
|
Here is a brief tour of where to find important parts of the game's code.
|
|
|
|
## Basic App Structure
|
|
|
|
**cmd/doodle/main.go** is the main function for Sketchy Maze and handles the command line flags and bootstrapping the game.
|
|
|
|
**pkg/doodle.go** holds the root Doodle (`d`) struct, the base object for the meat of the program - its setup funcs and MainLoop are here.
|
|
|
|
### Scenes
|
|
|
|
The gameplay is divided into scenes, each in a **pkg/\*_scene.go** file:
|
|
|
|
* MainScene is the title screen (default)
|
|
* PlayScene is play mode
|
|
* EditScene is the level editor, etc.
|
|
|
|
**pkg/scene.go** defines the interface for Scene itself and the `d.Goto(scene)` function.
|
|
|
|
The game changes scenes with Goto and the MainLoop calls the active scene's functions (Loop and Draw).
|
|
|
|
## Doodad JavaScript API
|
|
|
|
### pkg/scripting
|
|
|
|
This package provides the generic JavaScript API used by the developer console and doodads.
|
|
|
|
**pkg/scripting/js_api.go** defines global and generic JavaScript functions to doodads' scope, e.g.:
|
|
|
|
* console.log and friends
|
|
* Sound.Play
|
|
* RGBA, Point, and Vector
|
|
* Flash, GetTick
|
|
* time.Now() and friends
|
|
* Events
|
|
* setTimeout, setInterval..
|
|
* Self: provided externally.
|
|
|
|
### pkg/uix/scripting.go
|
|
|
|
The home of **MakeScriptAPI()** which installs various Play Mode objects into the script's environment, e.g.
|
|
|
|
* Actors and Level API
|
|
* Self: a surface of uix.Actor capabilities that point to the local actor.
|
|
|
|
## Collision Detection
|
|
|
|
### pkg/collision
|
|
|
|
The algorithmic stuff is here - the collision package focused on just the math and general types to handle logic for:
|
|
|
|
* Collision with level geometry ('pixel perfect')
|
|
* Collision between actors
|
|
* BoundingRect and collision boxes
|
|
|
|
### pkg/uix/actor_collision.go |