Documentation
¶
Overview ¶
Package pi provides API to develop retro games.
Please note that the entire pi package is not concurrency-safe. This means that it is unsafe to run functions and access package variables from go-routines started by your code.
Index ¶
- Constants
- Variables
- func Atan2(dx, dy float64) float64
- func Boot() error
- func BootOrPanic()
- func Btn(button Button) bool
- func BtnBits() int
- func BtnPlayer(button Button, player int) bool
- func Btnp(button Button) bool
- func BtnpBits() int
- func BtnpPlayer(button Button, player int) bool
- func Camera(x, y int) (prevX, prevY int)
- func CameraReset() (prevX, prevY int)
- func Clip(x, y, w, h int) (prevX, prevY, prevW, prevH int)
- func ClipReset() (prevX, prevY, prevW, prevH int)
- func Cls()
- func ClsCol(col byte)
- func Color(col byte) (prevCol byte)
- func ColorReset() (prevCol byte)
- func Cos(angle float64) float64
- func Cursor(x, y int) (prevX, prevY int)
- func CursorReset() (prevX, prevY int)
- func Pal(color byte, replacementColor byte)
- func PalDisplay(color byte, replacementColor byte)
- func PalReset()
- func Palt(color byte, transparent bool)
- func PaltReset()
- func Pget(x, y int) byte
- func Print(text string) (x int)
- func Pset(x, y int)
- func Reset()
- func Run() error
- func RunOrPanic()
- func Sget(x, y int) byte
- func Sin(angle float64) float64
- func Snap() (string, error)
- func Spr(n, x, y int)
- func SprSize(n, x, y int, w, h float64)
- func SprSizeFlip(n, x, y int, w, h float64, flipX, flipY bool)
- func Sset(x, y int, color byte)
- func Stop()
- func Time() float64
- type Button
- type Font
Constants ¶
const (
SpriteWidth, SpriteHeight = 8, 8
)
Variables ¶
var ( Update = func() {} // Update is a user provided function executed each frame. Draw = func() {} // Draw is a user provided function executed each frame (if he can). Resources fs.ReadFileFS // Resources contains files like sprite-sheet.png // Palette has all colors available in the game. Up to 256. // Palette is taken from loaded sprite sheet (which must be // a PNG file with indexed color mode). If sprite-sheet.png was not // found, then default 16 color palette is used. // // Can be freely read and updated. Changes will be visible immediately. Palette [256]image.RGB = defaultPalette // SpriteSheetWidth will be used if sprite-sheet.png was not found. SpriteSheetWidth = defaultSpriteSheetWidth // SpriteSheetHeight will be used if sprite-sheet.png was not found. SpriteSheetHeight = defaultSpriteSheetHeight // ScreenWidth specifies the width of the screen (in pixels). ScreenWidth = defaultScreenWidth // ScreenHeight specifies the height of the screen (in pixels). ScreenHeight = defaultScreenHeight )
User parameters. Will be used during Boot (and Run).
var ( // ScreenData contains pixel colors for the screen visible by the player. // Each pixel is one byte. It is initialized during pi.Boot. // // Pixels on the screen are organized from left to right, // top to bottom. Slice element number 0 has pixel located // in the top-left corner. Slice element number 1 has pixel color // on the right and so on. // // Can be freely read and updated. Useful when you want to use your own // functions for pixel manipulation. // Pi will panic if you try to change the length of the slice. ScreenData []byte )
Screen-specific data
var ( // SpriteSheetData contains pixel colors for the entire sprite sheet. // Each pixel is one byte. It is initialized during pi.Boot. // // Pixels in the sprite-sheet are organized from left to right, // top to bottom. Slice element number 0 has pixel located // in the top-left corner. Slice element number 1 has a pixel color // on the right and so on. // // Can be freely read and updated. // Useful when you want to use your own functions for pixel manipulation. // Pi will panic if you try to change the length of the slice. SpriteSheetData []byte )
Sprite-sheet data
Functions ¶
func Atan2 ¶
Atan2 converts DX, DY into an angle from 0..1
Similar to Cos and Sin, angle is taken to run anticlockwise in screenspace. For example:
atan(0,-1) // returns 0.25
func Boot ¶
func Boot() error
Boot initializes the engine based on user parameters such as ScreenWidth and ScreenHeight. It loads the resources like sprite-sheet.png.
If sprite-sheet.png was not found in pi.Resources, then empty sprite-sheet is used with the size of pi.SpriteSheetWidth * pi.SpriteSheetHeight.
Boot also resets all draw state information like color, camera position and clipping region.
Boot can be run multiple times. This is useful for writing unit tests.
func BootOrPanic ¶
func BootOrPanic()
BootOrPanic does the same as Boot, but panics instead of returning an error.
Useful for writing unit tests and quick and dirty prototypes. Do not use on production ;)
func Btn ¶ added in v0.6.0
Btn returns true if a button is being pressed at this moment by player 0.
func BtnBits ¶ added in v0.6.0
func BtnBits() int
BtnBits returns the state of all buttons for players 0 and 1 as bitset.
The first byte contains the button states for player 0 (bits 0 through 5, bits 6 and 7 are unused). The second byte contains the button states for player 1 (bits 8 through 13).
Bit 0 is Left, 1 is Right, bit 5 is the X button.
A bit of 1 means the button is pressed.
func BtnPlayer ¶ added in v0.6.0
BtnPlayer returns true if a button is being pressed at this moment by specific player. The player can be 0..7.
func Btnp ¶ added in v0.6.0
Btnp returns true when the button has just been pressed. It also returns true after the next 15 frames, and then every 4 frames. This simulates keyboard-like repeating.
func BtnpBits ¶ added in v0.6.0
func BtnpBits() int
BtnpBits returns the state of all buttons for players 0 and 1 as bitset.
The first byte contains the button states for player 0 (bits 0 through 5, bits 6 and 7 are unused). The second byte contains the button states for player 1 (bits 8 through 13).
Bit 0 is Left, 1 is Right, bit 5 is the X button.
A bit of 1 means the button has just been pressed.
func BtnpPlayer ¶ added in v0.6.0
BtnpPlayer returns true when the button has just been pressed. It also returns true after the next 15 frames, and then every 4 frames. This simulates keyboard-like repeating. The player can be 0..7.
func CameraReset ¶
func CameraReset() (prevX, prevY int)
CameraReset resets the camera offset to origin (0,0).
func Clip ¶
Clip sets the clipping region in the form of rectangle. All screen drawing operations will not affect any pixels outside the region.
Clip returns previous clipping region.
func ClipReset ¶
func ClipReset() (prevX, prevY, prevW, prevH int)
ClipReset resets the clipping region, which means that entire screen will be clipped.
func Cls ¶
func Cls()
Cls cleans the entire screen with color 0. It does not take into account any draw state parameters such as clipping region or camera.
func ClsCol ¶
func ClsCol(col byte)
ClsCol cleans the entire screen with specified color. It does not take into account any draw state parameters such as clipping region or camera.
func ColorReset ¶ added in v0.5.0
func ColorReset() (prevCol byte)
ColorReset resets the color to default value which is 6.
ColorReset returns previously used color.
func Cos ¶
Cos returns the cosine of angle which is in the range of 0.0-1.0 measured clockwise.
If you want to use conventional radian-based function use math.Cos.
func Cursor ¶ added in v0.7.1
Cursor set cursor position (in pixels) used by Print.
Cursor returns previously set cursor position.
func CursorReset ¶ added in v0.7.1
func CursorReset() (prevX, prevY int)
CursorReset resets cursor position used by Print to 0,0.
CursorReset returns previously set cursor position.
func Pal ¶ added in v0.5.0
Pal replaces color with another one for all subsequent drawings (it is changing the so-called draw palette).
Affected functions are Pset, Spr, SprSize and SprSizeFlip.
func PalDisplay ¶ added in v0.5.0
PalDisplay replaces color with another one for the whole screen at the end of a frame (it is changing the so-called display palette).
func PalReset ¶ added in v0.5.0
func PalReset()
PalReset resets all swapped colors for all palettes.
func Palt ¶ added in v0.4.0
Palt sets color transparency. If true then the color will not be drawn for next drawing operations.
Color transparency is used by Spr, SprSize and SprSizeFlip.
func PaltReset ¶ added in v0.4.0
func PaltReset()
PaltReset sets all transparent colors to false and makes color 0 transparent.
func Print ¶ added in v0.7.1
Print prints text on the screen. It takes into consideration cursor position, color, clipping region and camera position.
After printing all characters Print goes to the next line. When there is no space left on screen the clipping region is scrolled to make room.
Only unicode characters with code < 256 are supported. Unsupported chars are printed as question mark. The entire table of available chars can be found here: https://github.com/elgopher/pi/blob/master/internal/system-font.png
Print returns the right-most x position that occurred while printing.
func Run ¶
func Run() error
Run boots the game, opens the window and run the game loop. It must be called from the main thread.
It returns error when something terrible happened during initialization.
func RunOrPanic ¶
func RunOrPanic()
RunOrPanic does the same as Run, but panics instead of returning an error.
Useful for writing unit tests and quick and dirty prototypes. Do not use on production ;)
func Sin ¶
Sin returns the sine of angle which is in the range of 0.0-1.0 measured clockwise.
Sin returns an inverted result to suit screen space (where Y means "DOWN", as opposed to mathematical diagrams where Y typically means "UP"):
sin(0.25) // returns -1
If you want to use conventional radian-based function without the y inversion, use math.Sin.
func Snap ¶ added in v0.7.1
Snap takes a screenshot and saves it to temp dir.
Snap returns a filename. If something went wrong error is returned.
func Spr ¶
func Spr(n, x, y int)
Spr draws a sprite with specified number on the screen. Sprites are counted from left to right, top to bottom. Sprite 0 is on top-left corner, sprite 1 is to the right and so on.
func SprSize ¶
SprSize draws a range of sprites on the screen.
n is a sprite number in the top-left corner.
Non-integer w or h may be used to draw partial sprites.
func SprSizeFlip ¶
SprSizeFlip draws a range of sprites on the screen.
If flipX is true then sprite is flipped horizontally. If flipY is true then sprite is flipped vertically.
Types ¶
type Button ¶ added in v0.6.0
type Button int
Button is a virtual button on any game controller. The game controller can be a gamepad or a keyboard.
Button is used by Btn, Btnp, BtnPlayer, BtnpPlayer, BtnBits and BtnpBits.
const ( Left Button = 0 Right Button = 1 Up Button = 2 Down Button = 3 O Button = 4 // O is a first fire button X Button = 5 // X is a second fire button )
Keyboard mappings:
player 0: [DPAD] - cursors [O] - Z C N [X] - X V M player 1: [DPAD] - SFED [O] - LSHIFT [X] - TAB W Q A
First connected gamepad controller is player 0, second player 1 and so on. On XBox controller O is A and Y, X is B and X.
type Font ¶ added in v0.7.1
type Font struct { // Data contains all 256 characters sorted by their ascii-like number. // Each character is 8 subsequent bytes, starting from the top. // Left-most pixel in a line is bit 0. Right-most pixel in a line is bit 7. Data [8 * 256]byte // Width in pixels for all characters below 128 Width int // WidthSpecial is a with of all special characters (code>=128) WidthSpecial int Height int }
Font contains all information about loaded font.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
examples
|
|
controller
command
Example showing how to test pressed buttons of game controllers.
|
Example showing how to test pressed buttons of game controllers. |
hello
command
Example animating HELLO WORLD text on screen.
|
Example animating HELLO WORLD text on screen. |
memory
command
Example showing how to directly modify screen memory.
|
Example showing how to directly modify screen memory. |
pal
command
Example showing practical use of palette swapping.
|
Example showing practical use of palette swapping. |
print
command
Example showing how to print text to screen.
|
Example showing how to print text to screen. |
trigonometry
command
Example plotting sin and cos on screen
|
Example plotting sin and cos on screen |
Package image provides API for decoding images.
|
Package image provides API for decoding images. |
internal
|
|