Skip to content

bobmshannon/oak

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Oak

A pure Go game engine

GoDoc Go Report Card Build Status Code Coverage

Installation

go get -u github.com/oakmound/oak/...

On linux, for audio, see klangsynthese for audio installation requirements

Usage

This is an example of the most basic oak program:

oak.Add("firstScene",
    // Initialization function
    func(prevScene string, inData interface{}) {}, 
    // Loop to continue or stop the current scene
    func() bool {return true}, 
    // Exit to transition to the next scene
    func() (nextScene string, result *scene.Result) {return "firstScene", nil}) 
oak.Init("firstScene")

See the examples folder for longer demos, godoc for reference documentation, and the wiki for more guided feature sets, tutorials and walkthroughs.

Motivation

The initial version of oak was made to support Oakmound Studio's game, Agent Blue, and was developed in parallel. Oak supports Windows with no dependencies and Linux with limited audio dependencies. We don't own a machine to check with, but hypothetically it supports OSX as well. We hope that users will be able to make great pure Go games with oak and welcome improvements.

Because Oak wants to have as few non-Go dependencies as possible, Oak does not use OpenGL or GLFW. We're open to adding support for these in the future for performance gains, but we always want an alternative that requires zero or near-zero dependencies. (We are very sad about the linux audio dependency and are considering writing an audio driver just to get rid of it.)

Support

For talk about the engine or help, that is not significant enough to be an Issue or PR, see the #oak channel on the gophers slack.

Features

  1. Window Rendering
    • Windows and key events forked from shiny
    • Logical frame rate distinct from Draw rate
    • Fullscreen, Window Positioning support
    • Auto-scaling for screen size changes, holding aspect ratio as desired.
  2. Image Management
    • render.Renderable interface
    • Sprite Sheet Batch Loading at startup
    • Manipulation
      • render.Modifiable interface
      • Built in Transformations and Filters
      • Some built-ins via gift
      • Extensible Modification syntax func(image.Image) *image.RGBA
    • Built in Renderable types
      • Sprite
      • Primitive builders, ColorBox, Line, Bezier
      • Sequence for animations
      • Switch for conditionally displaying one other Renderable
      • Composite for displaying multiple Renderables as one
      • History-tracking Reverting
    • Primarily 2D
  3. Particle System
  4. Mouse Handling
    • Click Collision
    • MouseEnter / MouseExit reaction events
    • Drag Handling
  5. Audio Support
    • From klangsynthese
    • Batch Loading
    • Positional filters to pan and scale audio based on a listening position
  6. Collision
    • Collision R-Tree forked from rtreego
    • 2D Raycasting
    • Collision Spaces
      • Attachable to Objects
      • Auto React to collisions through events
      • OnHit bindings func(s1,s2 *collision.Space)
      • Start/Stop collision with targeted objects
  7. Physics System
    • Vectors
      • Attachable to Objects / Renderables
      • Momentum
      • Friction
      • Force / Pushing
  8. Event Handler, Bus
    • PubSub system
    • event.CID can Bind(fn,eventName) and selectively Trigger(eventName) events
    • GlobalBind and event.Trigger for entity-independent
  9. Timing utilities
    • Smoothed draw rate, frame rate tracking
    • FPS conversion to time.Duration
    • Manipulatable time.Ticker to readily change frame rate
  10. Shaping
    • Shapes from func(x float64) (y float64) equations
    • Shapes from func(x,y,w,h int) bool containment
    • Convert shapes into:
      • Containment checks
      • Outlines
      • 2D arrays
  11. Custom Console Commands
  12. Logging
    • Swappable with custom implementations
    • Default Implementation: 4 log levels, writes to file and stdout

About

A pure Go game engine

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 99.5%
  • Shell 0.5%