stone/application.go
2022-11-06 15:59:06 -05:00

105 lines
2.4 KiB
Go

package stone
import "time"
import "image/color"
type Application struct {
DamageBuffer
title string
backend Backend
config Config
}
func (application *Application) SetSize (width, height int) {
application.DamageBuffer.SetSize(width, height)
}
func (application *Application) SetTitle (title string) {
application.title = title
application.backend.SetTitle(title)
}
func (application *Application) Run (
callback func (application *Application),
) (
err error,
) {
// default values for certain parameters
width, height := application.Size()
if width < 1 { width = 80 }
if height < 1 { height = 20 }
application.DamageBuffer.SetSize(width, height)
// TODO: load these from a file
application.config.colors = [4]color.Color {
color.RGBA { R: 0x2B, G: 0x30, B: 0x3C, A: 0xFF },
color.RGBA { R: 0x4C, G: 0x56, B: 0x6A, A: 0xFF },
color.RGBA { R: 0x2E, G: 0x34, B: 0x40, A: 0xFF },
color.RGBA { R: 0xA8, G: 0x55, B: 0x5D, A: 0xFF },
}
application.config.padding = 4
application.backend, err = instantiateBackend(application)
if err != nil { return }
application.backend.Run(callback)
return
}
func (application *Application) Await (timeout time.Duration) (keepRunning bool) {
keepRunning = application.backend.Await(timeout)
return
}
func (application *Application) Poll () (keepRunning bool) {
keepRunning = application.backend.Poll()
return
}
func (application *Application) Title () (title string) {
title = application.title
return
}
func (application *Application) Config () (config *Config) {
config = &application.config
return
}
func (application *Application) JustPressed (button Button) (pressed bool) {
pressed = application.backend.JustPressed(button)
return
}
func (application *Application) JustReleased (button Button) (released bool) {
released = application.backend.JustReleased(button)
return
}
func (application *Application) Pressed (button Button) (pressed bool) {
pressed = application.backend.Pressed(button)
return
}
func (application *Application) Repeated (button Button) (repeated bool) {
repeated = application.backend.Repeated(button)
return
}
func (application *Application) Typed () (text string) {
text = application.backend.Typed()
return
}
func (application *Application) Resized () (resized bool) {
resized = application.backend.Resized()
return
}
func (application *Application) MousePosition () (x, y int) {
x, y = application.backend.MousePosition()
return
}