added --tps and --background

This commit is contained in:
2024-03-25 20:32:09 +01:00
parent b41d23a2fd
commit b384795e53
3 changed files with 48 additions and 15 deletions

View File

@@ -78,6 +78,8 @@ Options:
-s --shader <kage file> Shader to run -s --shader <kage file> Shader to run
-g --geometry <WIDTHxHEIGHT> Window size -g --geometry <WIDTHxHEIGHT> Window size
-p --position <XxY> Position of image0 -p --position <XxY> Position of image0
-b --background <png file> Image to load as background
-t --tps <ticks/s> At how many ticks per second to run
--map-flag <name> Map Flag uniform to <name> --map-flag <name> Map Flag uniform to <name>
--map-ticks <name> Map Flag uniform to <name> --map-ticks <name> Map Flag uniform to <name>
--map-slider <name> Map Flag uniform to <name> --map-slider <name> Map Flag uniform to <name>

View File

@@ -32,7 +32,7 @@ import (
) )
const ( const (
VERSION string = "0.0.3" VERSION string = "0.0.4"
Usage string = `This is kage-viewer, a shader viewer. Usage string = `This is kage-viewer, a shader viewer.
Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \ Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \
@@ -44,6 +44,8 @@ Options:
-s --shader <kage file> Shader to run -s --shader <kage file> Shader to run
-g --geometry <WIDTHxHEIGHT> Window size -g --geometry <WIDTHxHEIGHT> Window size
-p --position <XxY> Position of image0 -p --position <XxY> Position of image0
-b --background <png file> Image to load as background
-t --tps <ticks/s> At how many ticks per second to run
--map-flag <name> Map Flag uniform to <name> --map-flag <name> Map Flag uniform to <name>
--map-ticks <name> Map Flag uniform to <name> --map-ticks <name> Map Flag uniform to <name>
--map-slider <name> Map Flag uniform to <name> --map-slider <name> Map Flag uniform to <name>
@@ -54,13 +56,15 @@ Options:
) )
type Config struct { type Config struct {
Showversion bool `koanf:"version"` // -v Showversion bool `koanf:"version"` // -v
Debug bool `koanf:"debug"` // -d Debug bool `koanf:"debug"` // -d
Config string `koanf:"config"` // -c Config string `koanf:"config"` // -c
Image []string `koanf:"image"` // -i Image []string `koanf:"image"` // -i
Shader string `koanf:"shader"` // -s Shader string `koanf:"shader"` // -s
Geo string `koanf:"geometry"` // -g Background string `koanf:"background"` // -b
Posision string `koanf:"position"` // -p TPS int `koanf:"tps"` // -t
Geo string `koanf:"geometry"` // -g
Posision string `koanf:"position"` // -p
Flag string `koanf:"map-flag"` Flag string `koanf:"map-flag"`
Ticks string `koanf:"map-ticks"` Ticks string `koanf:"map-ticks"`
Mouse string `koanf:"map-mouse"` Mouse string `koanf:"map-mouse"`
@@ -91,6 +95,8 @@ func InitConfig() (*Config, error) {
flagset.StringP("map-ticks", "", "Ticks", "map ticks uniform") flagset.StringP("map-ticks", "", "Ticks", "map ticks uniform")
flagset.StringP("map-mouse", "", "Mouse", "map mouse uniform") flagset.StringP("map-mouse", "", "Mouse", "map mouse uniform")
flagset.StringP("map-slider", "", "Slider", "map slider uniform") flagset.StringP("map-slider", "", "Slider", "map slider uniform")
flagset.StringP("background", "b", "", "background image")
flagset.IntP("tps", "t", 60, "ticks per second")
if err := flagset.Parse(os.Args[1:]); err != nil { if err := flagset.Parse(os.Args[1:]); err != nil {
return nil, fmt.Errorf("failed to parse program arguments: %w", err) return nil, fmt.Errorf("failed to parse program arguments: %w", err)

39
game.go
View File

@@ -30,13 +30,14 @@ import (
) )
type Game struct { type Game struct {
Conf *Config Conf *Config
Images []*asset.LiveAsset[*ebiten.Image] Images []*asset.LiveAsset[*ebiten.Image]
Shader *asset.LiveAsset[*ebiten.Shader] Shader *asset.LiveAsset[*ebiten.Shader]
Cursor []float64 Cursor []float64
Ticks int Ticks int
Slider float64 Slider float64
Flag int Flag int
Background *asset.LiveAsset[*ebiten.Image]
} }
func LoadImage(name string) (*ebiten.Image, error) { func LoadImage(name string) (*ebiten.Image, error) {
@@ -71,8 +72,21 @@ func (game *Game) Init() error {
return fmt.Errorf("failed to load shader %s: %s", game.Conf.Shader, err) return fmt.Errorf("failed to load shader %s: %s", game.Conf.Shader, err)
} }
if game.Conf.Background != "" {
slog.Debug("Loading background", "image", game.Conf.Background)
img, err := asset.NewLiveAsset[*ebiten.Image](game.Conf.Background)
if err != nil {
return fmt.Errorf("failed to load image %s: %s", game.Conf.Background, err)
}
game.Background = img
}
game.Shader = shader game.Shader = shader
ebiten.SetMaxTPS(game.Conf.TPS)
return nil return nil
} }
@@ -128,6 +142,12 @@ func (game *Game) Update() error {
fmt.Println("warn: shader reloading error:", game.Shader.Error()) fmt.Println("warn: shader reloading error:", game.Shader.Error())
} }
if game.Background != nil {
if game.Background.Error() != nil {
fmt.Println("warn: background image reloading error:", game.Background.Error())
}
}
if game.CheckInput() { if game.CheckInput() {
slog.Debug("Key pressed", slog.Debug("Key pressed",
game.Conf.Flag, game.Flag, game.Conf.Flag, game.Flag,
@@ -146,6 +166,11 @@ func (game *Game) Update() error {
} }
func (game *Game) Draw(screen *ebiten.Image) { func (game *Game) Draw(screen *ebiten.Image) {
if game.Background != nil {
op := &ebiten.DrawImageOptions{}
screen.DrawImage(game.Background.Value(), op)
}
op := &ebiten.DrawRectShaderOptions{} op := &ebiten.DrawRectShaderOptions{}
op.Uniforms = map[string]any{ op.Uniforms = map[string]any{