Cart

A cart (aka a game cartridge) is a representation of game code and memory.

A cart should implement the tortuga.Cart interface.

type Cart interface {
    Update()
    Render()
}

Note: that some methods can only be called in the Render function e.g. most calls that deal with drawing things.

Example

The most simple implementation of this would look like the following:

you can run this example locally with the following command

go run github.com/dfirebaugh/tortuga/examples/simple

note: click the canvas to control the rect with WASD

package main

import (
	"github.com/dfirebaugh/tortuga/pkg/input"
	"github.com/dfirebaugh/tortuga/pkg/math/geom"
	"github.com/dfirebaugh/tortuga"
)

type cart struct {
	input input.PlayerInput
}

var (
	game  tortuga.Console
	rect  geom.Rect
	speed = 4.0
)

func (c cart) Update() {
	if c.input.IsDownPressed() {
		rect[1] += speed
	}
	if c.input.IsUpPressed() {
		rect[1] -= speed
	}
	if c.input.IsLeftPressed() {
		rect[0] -= speed
	}
	if c.input.IsRightPressed() {
		rect[0] += speed
	}
}

func (c cart) Render() {
	game.Clear()

	// render a rectangle on the given display as a certain color
	// draw calls need to happen in the render loop
	rect.Draw(game.GetDisplay(), game.Color(2))
}

func main() {
	// create a rectangle when the app starts (so we don't create on every render loop)
	rect = geom.MakeRect(20, 20, 20, 20)

	// instantiate the game console
	game = tortuga.New()

	// run the cart (note: this is a blocking operation)
	game.Run(cart{
		input: input.Keyboard{},
	})
}