engi

package module
v0.0.0-...-fc8682f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 22, 2015 License: BSD-2-Clause Imports: 34 Imported by: 0

README

#Engi A cross-platform game engine written in Go following an interpretation of the Entity Component System paradigm. Engi is currently compilable for Mac OSX, Linux, Windows and the Web. With the release of Go 1.4, sporting Android and the inception of IOS compatibility, mobile will soon be added as a release target.

Currently documentation is pretty scarce, this is because I have not completely finalized the API and am about to go through a "pretification" process in order to increase elegance and usability. For a basic up to date example of most features, look to the demos/hello.go and demos/pong/pong.go files. These files are currently your best friends for learning engi, well and me (feel free to shoot me a DM or issue whenever you want!).

Examples

If you want to see some projects using engi, check out the demos folder. Newbrict/OakTale is probably the best place to see the newer features (tilemaps, z-layers, physics)

Getting in touch / Contributing

Currently we are active on the gopher slack (You can request an invite here: http://bit.ly/go-slack-signup) under the #engi channel.

The roadmap is available on trello here. If you wish to have something added, or want to discuss a new feature you should begin talking about it in either an issue or on the previously mentioned slack channel.

Docs

Before you read the basic doc, here are a few notes for me (and other contributors) about ideas to achieve elegance

  • A potential engi.Files.Add(engi.NewResource("world", "world.txt"), engi.NewResource("face", "data/face.png")) --DONE
  • Initialize batch in a cleaner manner in custom worlds --DONE
  • Neater systems adding
  • Clean entity construction from an external file
  • Add or re look at New__Component__() functions for SpaceComponent, RenderComponent, and others
  • Automatically detect which systems should be added to based off component depends on
  • Revisit the camera API and its locating in World{}
  • Presets (prefabs?) for the easy re-initialization of an entity pattern

##Installation go get -u github.com/paked/engi

Install Dependencies (Debian/Ubuntu):

sudo apt-get install libopenal1 libopenal-dev
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
sudo apt-get install libalut0 libalut-dev
sudo apt-get install mesa-common-dev xorg-dev libgl1-mesa-dev
go get
go get github.com/stretchr/testify/assert

TODO Verify and detail dependencies by development platform

##Getting Started

package main
   
import (
	"github.com/paked/engi"
)

type Game struct {
	engi.World
}

func (game *Game) Setup() {
	engi.SetBg(0xffffff)
	game.AddSystem(&engi.RenderSystem{})
}

func main() {
	engi.Open("Title", 800, 800, false, &Game{})
}

First we start off by declaring that it is a runnable file, then import the engi library. Inside the main() function we finish off by opening the window, the four parameters that are passed in are Window Title, Window Width, Window Height, Fullscreen Mode (as a bool) and finally an instance of Game.

If you were to run this code, a white 800x800 window would appear on your screen.

TODO Write about entities

TODO Write about components

TODO Write about systems

Documentation

Overview

Taken from golang.org/x/mobile/exp/audio

Index

Constants

This section is empty.

Variables

View Source
var (
	MinZoom float32 = 0.25
	MaxZoom float32 = 3
)
View Source
var (
	Time    *Clock
	Files   *Loader
	Gl      *webgl.Context
	Mailbox MessageManager

	WorldBounds AABB
)
View Source
var (
	Arrow     *glfw.Cursor
	IBeam     *glfw.Cursor
	Crosshair *glfw.Cursor
	Hand      *glfw.Cursor
	HResize   *glfw.Cursor
	VResize   *glfw.Cursor
)
View Source
var (
	Mouse mouse

	MOVE    = Action(0)
	PRESS   = Action(1)
	RELEASE = Action(2)
	SHIFT   = Modifier(0x0001)
	CONTROL = Modifier(0x0002)
	ALT     = Modifier(0x0004)
	SUPER   = Modifier(0x0008)
)
View Source
var (
	Dash         = Key(189)
	Apostrophe   = Key(222)
	Semicolon    = Key(186)
	Equals       = Key(187)
	Comma        = Key(188)
	Period       = Key(190)
	Slash        = Key(191)
	Backslash    = Key(220)
	Backspace    = Key(8)
	Tab          = Key(9)
	CapsLock     = Key(20)
	Space        = Key(32)
	Enter        = Key(13)
	Escape       = Key(27)
	Insert       = Key(45)
	PrintScreen  = Key(42)
	Delete       = Key(46)
	PageUp       = Key(33)
	PageDown     = Key(34)
	Home         = Key(36)
	End          = Key(35)
	Pause        = Key(19)
	ScrollLock   = Key(145)
	ArrowLeft    = Key(37)
	ArrowRight   = Key(39)
	ArrowDown    = Key(40)
	ArrowUp      = Key(38)
	LeftBracket  = Key(219)
	LeftShift    = Key(16)
	LeftControl  = Key(17)
	LeftSuper    = Key(73)
	LeftAlt      = Key(18)
	RightBracket = Key(221)
	RightShift   = Key(16)
	RightControl = Key(17)
	RightSuper   = Key(73)
	RightAlt     = Key(18)
	Zero         = Key(48)
	One          = Key(49)
	Two          = Key(50)
	Three        = Key(51)
	Four         = Key(52)
	Five         = Key(53)
	Six          = Key(54)
	Seven        = Key(55)
	Eight        = Key(56)
	Nine         = Key(57)
	F1           = Key(112)
	F2           = Key(113)
	F3           = Key(114)
	F4           = Key(115)
	F5           = Key(116)
	F6           = Key(117)
	F7           = Key(118)
	F8           = Key(119)
	F9           = Key(120)
	F10          = Key(121)
	F11          = Key(122)
	F12          = Key(123)
	A            = Key(65)
	B            = Key(66)
	C            = Key(67)
	D            = Key(68)
	E            = Key(69)
	F            = Key(70)
	G            = Key(71)
	H            = Key(72)
	I            = Key(73)
	J            = Key(74)
	K            = Key(75)
	L            = Key(76)
	M            = Key(77)
	N            = Key(78)
	O            = Key(79)
	P            = Key(80)
	Q            = Key(81)
	R            = Key(82)
	S            = Key(83)
	T            = Key(84)
	U            = Key(85)
	V            = Key(86)
	W            = Key(87)
	X            = Key(88)
	Y            = Key(89)
	Z            = Key(90)
	NumLock      = Key(144)
	NumMultiply  = Key(106)
	NumDivide    = Key(111)
	NumAdd       = Key(107)
	NumSubtract  = Key(109)
	NumZero      = Key(96)
	NumOne       = Key(97)
	NumTwo       = Key(98)
	NumThree     = Key(99)
	NumFour      = Key(100)
	NumFive      = Key(101)
	NumSix       = Key(102)
	NumSeven     = Key(103)
	NumEight     = Key(104)
	NumNine      = Key(105)
	NumDecimal   = Key(110)
	NumEnter     = Key(13)
)
View Source
var (
	KEY_STATE_UP        string = "up"
	KEY_STATE_DOWN      string = "down"
	KEY_STATE_JUST_DOWN string = "justdown"
	KEY_STATE_JUST_UP   string = "justup"

	Keys KeyManager
)

Functions

func Bench

func Bench(b *testing.B, preload func(), setup func(w *World))

Bench is a helper-function to easily benchmark one frame, given a preload / setup function

func Exit

func Exit()

func Height

func Height() float32

func IsIntersecting

func IsIntersecting(rect1 AABB, rect2 AABB) bool

func LoadShader

func LoadShader(vertSrc, fragSrc string) *webgl.Program

func Open

func Open(title string, width, height int, fullscreen bool, r CustomGame)

func OpenHeadless

func OpenHeadless(r CustomGame)

func OpenHeadlessNoRun

func OpenHeadlessNoRun()

func RunIteration

func RunIteration()

RunIteration runs one iteration / frame

func RunPreparation

func RunPreparation(customGame CustomGame)

RunPreparation is called only once, and is called automatically when calling Open It is only here for benchmarking in combination with OpenHeadlessNoRun

func SetBg

func SetBg(color uint32)

func SetFPSLimit

func SetFPSLimit(limit int) error

func SetTitle

func SetTitle(title string)

func Width

func Width() float32

Types

type AABB

type AABB struct {
	Min, Max Point
}

type Action

type Action int

type AnimationAction

type AnimationAction struct {
	Name   string
	Frames []int
}

type AnimationComponent

type AnimationComponent struct {
	Rate float32 // How often frames should increment, in seconds.

	Renderables      []Renderable     // Renderables
	Animations       map[string][]int // All possible animations
	CurrentAnimation []int            // The current animation
	// contains filtered or unexported fields
}

Component that controls animation in rendering entities

func NewAnimationComponent

func NewAnimationComponent(renderables []Renderable, rate float32) *AnimationComponent

func (*AnimationComponent) AddAnimationAction

func (ac *AnimationComponent) AddAnimationAction(action *AnimationAction)

func (*AnimationComponent) AddAnimationActions

func (ac *AnimationComponent) AddAnimationActions(actions []*AnimationAction)

func (*AnimationComponent) Cell

func (ac *AnimationComponent) Cell() Renderable

func (*AnimationComponent) SelectAnimationByAction

func (ac *AnimationComponent) SelectAnimationByAction(action *AnimationAction)

func (*AnimationComponent) SelectAnimationByName

func (ac *AnimationComponent) SelectAnimationByName(name string)

func (*AnimationComponent) Type

func (*AnimationComponent) Type() string

type AnimationSystem

type AnimationSystem struct {
	*System
}

func (*AnimationSystem) New

func (a *AnimationSystem) New()

func (*AnimationSystem) NextFrame

func (a *AnimationSystem) NextFrame(ac *AnimationComponent)

func (AnimationSystem) Type

func (AnimationSystem) Type() string

func (*AnimationSystem) Update

func (a *AnimationSystem) Update(e *Entity, dt float32)

type Assets

type Assets struct {
	// contains filtered or unexported fields
}

func NewAssets

func NewAssets() *Assets

func (*Assets) Get

func (a *Assets) Get(path string) Image

func (*Assets) Image

func (a *Assets) Image(path string)

func (*Assets) Load

func (a *Assets) Load(onFinish func())

type AudioComponent

type AudioComponent struct {
	File       string
	Repeat     bool
	Background bool
	// contains filtered or unexported fields
}

AudioComponent is a Component which is used by the AudioSystem

func (AudioComponent) Type

func (AudioComponent) Type() string

type AudioSystem

type AudioSystem struct {
	*System
	HeightModifier float32
}

AudioSystem is a System that allows for sound effects and / or music

func (*AudioSystem) New

func (as *AudioSystem) New()

func (AudioSystem) Type

func (AudioSystem) Type() string

func (*AudioSystem) Update

func (as *AudioSystem) Update(entity *Entity, dt float32)

type Batch

type Batch struct {
	// contains filtered or unexported fields
}

func NewBatch

func NewBatch(width, height float32, vertSrc, fragSrc string) *Batch

func (*Batch) Begin

func (b *Batch) Begin()

func (*Batch) Draw

func (b *Batch) Draw(r Drawable, x, y, originX, originY, scaleX, scaleY, rotation float32, color uint32, transparency float32)

func (*Batch) End

func (b *Batch) End()

func (*Batch) SetProjection

func (b *Batch) SetProjection(width, height, depth float32)

type ByFirstgid

type ByFirstgid []TMXTileset

func (ByFirstgid) Len

func (t ByFirstgid) Len() int

func (ByFirstgid) Less

func (t ByFirstgid) Less(i, j int) bool

func (ByFirstgid) Swap

func (t ByFirstgid) Swap(i, j int)

type CameraAxis

type CameraAxis uint8

CameraAxis is the axis at which the Camera can/has to move

const (
	XAxis CameraAxis = iota
	YAxis
	ZAxis
)

type CameraMessage

type CameraMessage struct {
	Axis        CameraAxis
	Value       float32
	Incremental bool
}

CameraMessage is a message that can be sent to the Camera (and other Systemers), to indicate movement

func (CameraMessage) Type

func (CameraMessage) Type() string

type Clock

type Clock struct {
	// contains filtered or unexported fields
}

func NewClock

func NewClock() *Clock

func (*Clock) Delta

func (c *Clock) Delta() float32

func (*Clock) Fps

func (c *Clock) Fps() float32

func (*Clock) Tick

func (c *Clock) Tick()

func (*Clock) Time

func (c *Clock) Time() float32

type CollisionComponent

type CollisionComponent struct {
	Solid, Main bool
	Extra       Point
}

func (CollisionComponent) Type

func (CollisionComponent) Type() string

type CollisionMasterComponent

type CollisionMasterComponent struct {
}

func (CollisionMasterComponent) Is

func (CollisionMasterComponent) Type

type CollisionMessage

type CollisionMessage struct {
	Entity *Entity
	To     *Entity
}

func (CollisionMessage) Type

func (collision CollisionMessage) Type() string

type CollisionSystem

type CollisionSystem struct {
	*System
}

func (*CollisionSystem) New

func (cs *CollisionSystem) New()

func (*CollisionSystem) Type

func (*CollisionSystem) Type() string

func (*CollisionSystem) Update

func (cs *CollisionSystem) Update(entity *Entity, dt float32)

type Color

type Color struct {
	R, G, B, A uint8
}

type Component

type Component interface {
	Type() string
}

type CustomGame

type CustomGame interface {
	Preload()
	Setup(*World)
}

func NewGame

func NewGame(preload func(), setup func(*World)) CustomGame

NewGame allows you to create a `Responder` using two inline functions `preload` and `setup`.

type Drawable

type Drawable interface {
	Texture() *webgl.Texture
	Width() float32
	Height() float32
	View() (float32, float32, float32, float32)
}

type EdgeScroller

type EdgeScroller struct {
	*System
	// contains filtered or unexported fields
}

EdgeScroller is a Systemer that allows for scrolling when the mouse is near the edges

func NewEdgeScroller

func NewEdgeScroller(scrollSpeed float32, margin float64) *EdgeScroller

func (*EdgeScroller) New

func (c *EdgeScroller) New()

func (*EdgeScroller) Type

func (*EdgeScroller) Type() string

func (*EdgeScroller) Update

func (c *EdgeScroller) Update(entity *Entity, dt float32)

type Entity

type Entity struct {
	Pattern string
	// contains filtered or unexported fields
}

func NewEntity

func NewEntity(requires []string) *Entity

func (*Entity) AddComponent

func (e *Entity) AddComponent(component Component)

func (*Entity) Component

func (e *Entity) Component(x interface{}) bool

GetComponent takes a double pointer to a Component, and populates it with the value of the right type.

func (*Entity) DoesRequire

func (e *Entity) DoesRequire(name string) bool

func (*Entity) ID

func (e *Entity) ID() string

func (*Entity) RemoveComponent

func (e *Entity) RemoveComponent(component Component)

type Font

type Font struct {
	URL  string
	Size float64
	BG   Color
	FG   Color
	// contains filtered or unexported fields
}

TODO FG and BG color config

func (*Font) Create

func (f *Font) Create() error

Create is for loading fonts from the disk, given a location

func (*Font) CreatePreloaded

func (f *Font) CreatePreloaded() error

CreatePreloaded is for loading fonts which have already been defined (and loaded) within Preload

func (*Font) Render

func (f *Font) Render(text string) *Texture

func (*Font) TextDimensions

func (f *Font) TextDimensions(text string) (int, int, int)

type Format

type Format int

Format represents a PCM data format.

const (
	Mono8 Format = iota + 1
	Mono16
	Stereo8
	Stereo16
)

func (Format) String

func (f Format) String() string

type Game

type Game struct{}

func (*Game) Close

func (g *Game) Close()

func (*Game) Key

func (g *Game) Key(key Key, modifier Modifier, action Action)

func (*Game) Mouse

func (g *Game) Mouse(x, y float32, action Action)

func (*Game) Preload

func (g *Game) Preload()

func (*Game) Render

func (g *Game) Render()

func (*Game) Resize

func (g *Game) Resize(w, h int)

func (*Game) Scroll

func (g *Game) Scroll(amount float32)

func (*Game) Setup

func (g *Game) Setup()

func (*Game) Type

func (g *Game) Type(char rune)

func (*Game) Update

func (g *Game) Update(dt float32)

type Image

type Image interface {
	Data() interface{}
	Width() int
	Height() int
}

func LoadImage

func LoadImage(data interface{}) Image

type ImageObject

type ImageObject struct {
	// contains filtered or unexported fields
}

func NewImageObject

func NewImageObject(img *image.NRGBA) *ImageObject

func (*ImageObject) Data

func (i *ImageObject) Data() interface{}

func (*ImageObject) Height

func (i *ImageObject) Height() int

func (*ImageObject) Width

func (i *ImageObject) Width() int

type ImageRGBA

type ImageRGBA struct {
	// contains filtered or unexported fields
}

func NewImageRGBA

func NewImageRGBA(img *image.RGBA) *ImageRGBA

func (*ImageRGBA) Data

func (i *ImageRGBA) Data() interface{}

func (*ImageRGBA) Height

func (i *ImageRGBA) Height() int

func (*ImageRGBA) Width

func (i *ImageRGBA) Width() int

type Key

type Key int

type KeyManager

type KeyManager struct {
	// contains filtered or unexported fields
}

func (*KeyManager) Get

func (km *KeyManager) Get(k Key) KeyState

type KeyState

type KeyState struct {
	// contains filtered or unexported fields
}

func (KeyState) Down

func (key KeyState) Down() bool

func (KeyState) JustPressed

func (key KeyState) JustPressed() bool

func (KeyState) JustReleased

func (key KeyState) JustReleased() bool

func (*KeyState) State

func (key *KeyState) State() string

func (KeyState) Up

func (key KeyState) Up() bool

type KeyboardScroller

type KeyboardScroller struct {
	*System
	// contains filtered or unexported fields
}

KeyboardScroller is a Systemer that allows for scrolling when certain keys are pressed

func NewKeyboardScroller

func NewKeyboardScroller(scrollSpeed float32, up, right, down, left Key) *KeyboardScroller

func (*KeyboardScroller) BindKeyboard

func (c *KeyboardScroller) BindKeyboard(up, right, down, left Key)

func (*KeyboardScroller) New

func (c *KeyboardScroller) New()

func (*KeyboardScroller) Type

func (*KeyboardScroller) Type() string

func (*KeyboardScroller) Update

func (c *KeyboardScroller) Update(entity *Entity, dt float32)

type Level

type Level struct {
	Width      int
	Height     int
	TileWidth  int
	TileHeight int
	Tiles      []*tile
	LineBounds []Line
	Images     []*tile
}

func (*Level) Render

func (lvl *Level) Render(b *Batch, render *RenderComponent, space *SpaceComponent)

type Line

type Line struct {
	P1 Point
	P2 Point
}

func (*Line) Angle

func (l *Line) Angle() float32

Returns the line's angle relative to Y = 0

func (*Line) LineIntersection

func (l *Line) LineIntersection(l2 Line) Point

Returns the point where the two lines intersect

func (*Line) PointDistance

func (l *Line) PointDistance(point Point) float32

Returns the squared euclidean distance from a point to a line *segment*

func (*Line) PointDistanceSquared

func (l *Line) PointDistanceSquared(point Point) float32

Returns the squared euclidean distance from a point to a line *segment*

func (*Line) PointSide

func (l *Line) PointSide(point Point) bool

Returns which side of the line the point is on This is useful if you have a point of reference

type Loader

type Loader struct {
	// contains filtered or unexported fields
}

func NewLoader

func NewLoader() *Loader

func (*Loader) Add

func (l *Loader) Add(urls ...string)

func (*Loader) AddFromDir

func (l *Loader) AddFromDir(url string, recurse bool)

func (*Loader) Image

func (l *Loader) Image(name string) *Texture

func (*Loader) Json

func (l *Loader) Json(name string) string

func (*Loader) Level

func (l *Loader) Level(name string) *Level

func (*Loader) Load

func (l *Loader) Load(onFinish func())

func (*Loader) Sound

func (l *Loader) Sound(name string) ReadSeekCloser

type Message

type Message interface {
	Type() string
}

type MessageHandler

type MessageHandler func(msg Message)

type MessageManager

type MessageManager struct {
	// contains filtered or unexported fields
}

func (*MessageManager) Dispatch

func (mm *MessageManager) Dispatch(message Message)

func (*MessageManager) Listen

func (mm *MessageManager) Listen(messageType string, handler MessageHandler)

type Modifier

type Modifier int

type MouseZoomer

type MouseZoomer struct {
	*System
	// contains filtered or unexported fields
}

MouseZoomer is a Systemer that allows for zooming when the scroll wheel is used

func NewMouseZoomer

func NewMouseZoomer(zoomSpeed float32) *MouseZoomer

func (*MouseZoomer) New

func (c *MouseZoomer) New()

func (*MouseZoomer) Type

func (*MouseZoomer) Type() string

func (*MouseZoomer) Update

func (c *MouseZoomer) Update(entity *Entity, dt float32)

type PauseMessage

type PauseMessage struct {
	Pause bool
}

PauseMessage is a message that is sent to (un)pause the world

func (PauseMessage) Type

func (PauseMessage) Type() string

type PauseSystem

type PauseSystem struct {
	*System
}

PauseSystem is a Systemer that listens for Pause messages, and then pauses the entire world

func (*PauseSystem) New

func (ps *PauseSystem) New()

func (PauseSystem) Type

func (PauseSystem) Type() string

func (*PauseSystem) Update

func (*PauseSystem) Update(*Entity, float32)

type Player

type Player struct {
	// contains filtered or unexported fields
}

Player is a basic audio player that plays PCM data. Operations on a nil *Player are no-op, a nil *Player can be used for testing purposes.

func NewPlayer

func NewPlayer(src ReadSeekCloser, format Format, samplesPerSecond int64) (*Player, error)

NewPlayer returns a new Player. It initializes the underlying audio devices and the related resources. If zero values are provided for format and sample rate values, the player determines them from the source's WAV header. An error is returned if the format and sample rate can't be determined.

The audio package is only designed for small audio sources.

func (*Player) Close

func (p *Player) Close() error

Close closes the device and frees the underlying resources used by the player. It should be called as soon as the player is not in-use anymore.

func (*Player) Current

func (p *Player) Current() time.Duration

Current returns the current playback position of the audio that is being played.

func (*Player) Pause

func (p *Player) Pause() error

Pause pauses the player.

func (*Player) Play

func (p *Player) Play(background bool) error

Play buffers the source audio to the audio device and starts to play the source. If the player paused or stopped, it reuses the previously buffered resources to keep playing from the time it has paused or stopped.

func (*Player) Seek

func (p *Player) Seek(background bool, offset time.Duration) error

Seek moves the play head to the given offset relative to the start of the source.

func (*Player) SetVolume

func (p *Player) SetVolume(vol float64)

SetVolume sets the volume of the player. The range of the volume is [0, 1].

func (*Player) State

func (p *Player) State() State

State returns the player's current state.

func (*Player) Stop

func (p *Player) Stop() error

Stop stops the player.

func (*Player) Total

func (p *Player) Total(background bool) time.Duration

Total returns the total duration of the audio source.

func (*Player) Volume

func (p *Player) Volume() float64

Volume returns the current player volume. The range of the volume is [0, 1].

type Point

type Point struct {
	X, Y float32
}

func MinimumTranslation

func MinimumTranslation(rect1 AABB, rect2 AABB) Point

func (*Point) Add

func (p *Point) Add(p2 Point)

func (*Point) AddScalar

func (p *Point) AddScalar(s float32)

func (*Point) Multiply

func (p *Point) Multiply(p2 Point)

func (*Point) MultiplyScalar

func (p *Point) MultiplyScalar(s float32)

func (*Point) Normalize

func (a *Point) Normalize() (Point, float32)

Returns the unit vector from a, and it's magnitude

func (*Point) PointDistance

func (p *Point) PointDistance(p2 Point) float32

func (*Point) PointDistanceSquared

func (p *Point) PointDistanceSquared(p2 Point) float32

func (*Point) ProjectOnto

func (a *Point) ProjectOnto(b Point) Point

Returns the vector produced by projecting a on to b

func (*Point) Set

func (p *Point) Set(x, y float32)

func (*Point) SetTo

func (p *Point) SetTo(v float32)

func (*Point) Subtract

func (p *Point) Subtract(p2 Point)

func (*Point) SubtractScalar

func (p *Point) SubtractScalar(s float32)

type PriorityLevel

type PriorityLevel int
const (
	// HighestGround is the highest PriorityLevel that will be rendered
	HighestGround PriorityLevel = 50
	// HUDGround is a PriorityLevel from which everything isn't being affected by the Camera
	HUDGround    PriorityLevel = 40
	Foreground   PriorityLevel = 30
	MiddleGround PriorityLevel = 20
	ScenicGround PriorityLevel = 10
	// Background is the lowest PriorityLevel that will be rendered
	Background PriorityLevel = 0
	// Hidden indicates that it should not be rendered by the RenderSystem
	Hidden PriorityLevel = -1
)

type ReadSeekCloser

type ReadSeekCloser interface {
	io.ReadSeeker
	io.Closer
}

ReadSeekCloser is an io.ReadSeeker and io.Closer.

type Region

type Region struct {
	// contains filtered or unexported fields
}

func NewRegion

func NewRegion(texture *Texture, x, y, w, h int) *Region

func (*Region) Height

func (r *Region) Height() float32

func (*Region) Render

func (r *Region) Render(b *Batch, render *RenderComponent, space *SpaceComponent)

func (*Region) Texture

func (r *Region) Texture() *webgl.Texture

func (*Region) View

func (r *Region) View() (float32, float32, float32, float32)

func (*Region) Width

func (r *Region) Width() float32

type RenderComponent

type RenderComponent struct {
	Display Renderable
	Scale   Point
	Label   string

	Transparency float32
	Color        uint32
	// contains filtered or unexported fields
}

func NewRenderComponent

func NewRenderComponent(display Renderable, scale Point, label string) *RenderComponent

func (*RenderComponent) SetPriority

func (r *RenderComponent) SetPriority(p PriorityLevel)

func (RenderComponent) Type

func (RenderComponent) Type() string

type RenderSystem

type RenderSystem struct {
	*System
	// contains filtered or unexported fields
}

func (*RenderSystem) AddEntity

func (rs *RenderSystem) AddEntity(e *Entity)

func (*RenderSystem) New

func (rs *RenderSystem) New()

func (*RenderSystem) Post

func (rs *RenderSystem) Post()

func (*RenderSystem) Pre

func (rs *RenderSystem) Pre()

func (*RenderSystem) Priority

func (rs *RenderSystem) Priority() int

func (*RenderSystem) RemoveEntity

func (rs *RenderSystem) RemoveEntity(e *Entity)

func (*RenderSystem) Type

func (*RenderSystem) Type() string

func (*RenderSystem) Update

func (rs *RenderSystem) Update(entity *Entity, dt float32)

type Renderable

type Renderable interface {
	Render(b *Batch, render *RenderComponent, space *SpaceComponent)
}

type Resource

type Resource struct {
	// contains filtered or unexported fields
}

func NewResource

func NewResource(url string) Resource

type SpaceComponent

type SpaceComponent struct {
	Position Point
	Width    float32
	Height   float32
}

func (SpaceComponent) AABB

func (sc SpaceComponent) AABB() AABB

func (SpaceComponent) Type

func (SpaceComponent) Type() string

type Sprite

type Sprite struct {
	Position *Point
	Scale    *Point
	Anchor   *Point
	Rotation float32
	Color    uint32
	Alpha    float32
	Region   *Region
}

func NewSprite

func NewSprite(region *Region, x, y float32) *Sprite

type Spritesheet

type Spritesheet struct {
	CellWidth, CellHeight int // The dimensions of the cells
	// contains filtered or unexported fields
}

Spritesheet is a class that stores a set of tiles from a file, used by tilemaps and animations

func NewSpritesheetFromFile

func NewSpritesheetFromFile(textureName string, cellWidth, cellHeight int) *Spritesheet

Simple handler for creating a new spritesheet from a file textureName is the name of a texture already preloaded with engi.Files.Add

func NewSpritesheetFromTexture

func NewSpritesheetFromTexture(texture *Texture, cellWidth, cellHeight int) *Spritesheet

func (*Spritesheet) Cell

func (s *Spritesheet) Cell(index int) *Region

Get the region at the index i, updates and pulls from cache if need be

func (*Spritesheet) CellCount

func (s *Spritesheet) CellCount() int

func (*Spritesheet) Cells

func (s *Spritesheet) Cells() []*Region

func (Spritesheet) Height

func (s Spritesheet) Height() float32

The amount of tiles on the y-axis of the spritesheet

func (*Spritesheet) Renderable

func (s *Spritesheet) Renderable(index int) Renderable

func (*Spritesheet) Renderables

func (s *Spritesheet) Renderables() []Renderable

func (Spritesheet) Width

func (s Spritesheet) Width() float32

The amount of tiles on the x-axis of the spritesheet

type State

type State int

State indicates the current playing state of the player.

const (
	Unknown State = iota
	Initial
	Playing
	Paused
	Stopped
)

func (State) String

func (s State) String() string

type System

type System struct {
	ShouldSkipOnHeadless bool
	World                *World
	// contains filtered or unexported fields
}

func NewSystem

func NewSystem() *System

func (*System) AddEntity

func (s *System) AddEntity(entity *Entity)

func (System) Entities

func (s System) Entities() []*Entity

func (System) New

func (s System) New()

func (System) Post

func (s System) Post()

func (System) Pre

func (s System) Pre()

func (System) Priority

func (s System) Priority() int

func (*System) RemoveEntity

func (s *System) RemoveEntity(entity *Entity)

func (*System) SetWorld

func (s *System) SetWorld(w *World)

func (System) SkipOnHeadless

func (s System) SkipOnHeadless() bool

type Systemer

type Systemer interface {
	Update(entity *Entity, dt float32)
	Type() string
	Priority() int
	Pre()
	Post()
	New()
	Entities() []*Entity
	AddEntity(entity *Entity)
	RemoveEntity(entity *Entity)
	SkipOnHeadless() bool
	SetWorld(*World)
}

type TMXImgLayer

type TMXImgLayer struct {
	Name   string    `xml:"name,attr"`
	X      float64   `xml:"x,attr"`
	Y      float64   `xml:"y,attr"`
	ImgSrc TMXImgSrc `xml:"image"`
}

type TMXImgSrc

type TMXImgSrc struct {
	Source string `xml:"source,attr"`
}

type TMXLayer

type TMXLayer struct {
	Name        string `xml:"name,attr"`
	Width       int    `xml:"width,attr"`
	Height      int    `xml:"height,attr"`
	TileMapping []uint32
	// This variable doesn't need to persist, used to fill TileMapping
	CompData []byte `xml:"data"`
}

type TMXLevel

type TMXLevel struct {
	Width      int           `xml:"width,attr"`
	Height     int           `xml:"height,attr"`
	TileWidth  int           `xml:"tilewidth,attr"`
	TileHeight int           `xml:"tileheight,attr"`
	Tilesets   []TMXTileset  `xml:"tileset"`
	Layers     []TMXLayer    `xml:"layer"`
	ObjGroups  []TMXObjGroup `xml:"objectgroup"`
	ImgLayers  []TMXImgLayer `xml:"imagelayer"`
}

type TMXObj

type TMXObj struct {
	X         float64       `xml:"x,attr"`
	Y         float64       `xml:"y,attr"`
	Polylines []TMXPolyline `xml:"polyline"`
}

type TMXObjGroup

type TMXObjGroup struct {
	Name    string   `xml:"name,attr"`
	Objects []TMXObj `xml:"object"`
}

type TMXPolyline

type TMXPolyline struct {
	Points string `xml:"points,attr"`
}

type TMXTileset

type TMXTileset struct {
	Firstgid   int           `xml:"firstgid,attr"`
	Name       string        `xml:"name,attr"`
	TileWidth  int           `xml:"tilewidth,attr"`
	TileHeight int           `xml:"tileheight,attr"`
	ImageSrc   TMXTilesetSrc `xml:"image"`
	Image      *Texture
}

type TMXTilesetSrc

type TMXTilesetSrc struct {
	Source string `xml:"source,attr"`
	Width  int    `xml:"width,attr"`
	Height int    `xml:"height,attr"`
}

Just used to create levelTileset->Image

type Texture

type Texture struct {
	// contains filtered or unexported fields
}

func NewTexture

func NewTexture(img Image) *Texture

func (*Texture) Height

func (t *Texture) Height() float32

Height returns the height of the texture.

func (*Texture) Render

func (t *Texture) Render(b *Batch, render *RenderComponent, space *SpaceComponent)

func (*Texture) Texture

func (t *Texture) Texture() *webgl.Texture

func (*Texture) View

func (r *Texture) View() (float32, float32, float32, float32)

func (*Texture) Width

func (t *Texture) Width() float32

Width returns the width of the texture.

type UnpauseComponent

type UnpauseComponent struct{}

UnpauseComponent is a component that indicates whether or not the Entity should be affected by system-wide pauses.

func (UnpauseComponent) Type

func (UnpauseComponent) Type() string

type World

type World struct {
	// contains filtered or unexported fields
}

func (*World) AddEntity

func (w *World) AddEntity(entity *Entity)

func (*World) AddSystem

func (w *World) AddSystem(system Systemer)

func (*World) Entities

func (w *World) Entities() []*Entity

func (*World) RemoveEntity

func (w *World) RemoveEntity(entity *Entity)

func (*World) Systems

func (w *World) Systems() []Systemer

Directories

Path Synopsis
hud

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL