doodle/level/page_type.go
Noah Petherbridge 6713dd7bfc Play: Autoscrolling and Bounded Level Support
Implement scrolling behavior in Play Mode by allowing the Canvas to
follow a specific actor and keep it in view. The Canvas has a
FollowActor property which holds an ID of the actor to follow (if blank,
no actor is being followed).

In Play Mode the Player is followed and when they get too close to the
left or right edges of the screen, the level will scroll to try and
catch them. If the player is moving very fast they can outrun the
camera.

The bounded levels are enforced in Play Mode and the camera won't scroll
to view pixels out-of-bounds and the Doodad actors inside the level
aren't allowed to exit its boundaries. This is global, not only for the
Player doodad but any Doodad that came with the level as well.

Other changes:

- Restructured Canvas widget code into many new files. The Canvas widget
  is shaping up to be where most of the magic happens, which is okay
  because it's close to the action and pulling the strings from outside
  would be harder, even tho as a UI element you think it should be
  lightweight.
- Debug Overlay: added room for Scenes to insert their own custom Debug
  Overlay key/value pairs (the values are string pointers so the Scene
  can update them freely):
  - The core labels are FPS, Scene and Mouse. The Pixel (world
    coordinate under cursor) is removed from the core labels.
  - Edit Scene provides Pixel, Tool and Swatch
  - Play Scene provides Pixel, Player, Viewport, Scroll
2018-10-28 17:52:45 -07:00

38 lines
1.4 KiB
Go

package level
// PageType configures the bounds and wallpaper behavior of a Level.
type PageType int
// PageType values.
const (
// Unbounded means the map can grow freely in any direction.
// - Only the repeat texture is used for the wallpaper.
Unbounded PageType = iota
// NoNegativeSpace means the map is bounded at the top left edges.
// - Can't scroll or visit any pixels in negative X,Y coordinates.
// - Wallpaper shows the Corner at 0,0
// - Wallpaper repeats the Top along the Y=0 plane
// - Wallpaper repeats the Left along the X=0 plane
// - The repeat texture fills the rest of the level.
NoNegativeSpace
// Bounded is the same as NoNegativeSpace but the level is imposing a
// maximum cap on the width and height of the level.
// - Can't scroll below X,Y origin at 0,0
// - Can't scroll past the bounded width and height of the level
Bounded
// Bordered is like Bounded except the corner textures are wrapped
// around the other edges of the level too.
// - The wallpaper hoz mirrors Left along the X=Width plane
// - The wallpaper vert mirrors Top along the Y=Width plane
// - The wallpaper 180 rotates the Corner for opposite corners
Bordered // TODO: to be implemented
// FullPage treats the wallpaper image as a literal full scan of a page.
// - The level boundaries are fixed to the wallpaper image's dimensions.
// - Used to e.g. scan in real letterhead paper and draw a map on it.
FullPage // TODO: to be implemented
)