sprite stuff

This commit is contained in:
2025-08-25 11:56:44 -04:00
parent a7b3a6cd4a
commit 8b1bfc8a01
5 changed files with 269 additions and 18 deletions

90
tools/spritedit/main.go Normal file
View File

@@ -0,0 +1,90 @@
package main
import (
"bytes"
"github.com/ebitenui/ebitenui"
"github.com/ebitenui/ebitenui/image"
"github.com/ebitenui/ebitenui/widget"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/text/v2"
"golang.org/x/image/colornames"
"golang.org/x/image/font/gofont/goregular"
)
type Editor struct {
ui *ebitenui.UI
}
func NewEditor() *Editor {
root := widget.NewContainer(
widget.ContainerOpts.BackgroundImage(
image.NewNineSliceColor(colornames.Gainsboro),
))
root.AddChild(
widget.NewButton(
widget.ButtonOpts.TextLabel("Open Sprite Sheet..."),
widget.ButtonOpts.TextFace(DefaultFont()),
widget.ButtonOpts.TextColor(&widget.ButtonTextColor{
Idle: colornames.Gainsboro,
Hover: colornames.Gainsboro,
Pressed: colornames.Gainsboro,
}),
widget.ButtonOpts.Image(&widget.ButtonImage{
Idle: DefaultNineSlice(colornames.Darkslategray),
Hover: DefaultNineSlice(Mix(colornames.Darkslategray, colornames.Mediumseagreen, 0.4)),
Disabled: DefaultNineSlice(Mix(colornames.Darkslategray, colornames.Gainsboro, 0.8)),
Pressed: PressedNineSlice(Mix(colornames.Darkslategray, colornames.Black, 0.4)),
PressedHover: PressedNineSlice(Mix(colornames.Darkslategray, colornames.Black, 0.4)),
}),
widget.ButtonOpts.WidgetOpts(
widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
VerticalPosition: widget.AnchorLayoutPositionCenter,
HorizontalPosition: widget.AnchorLayoutPositionCenter,
}),
widget.WidgetOpts.MinSize(180, 48),
),
),
)
return &Editor{
ui: &ebitenui.UI{Container: root},
}
}
func (e *Editor) Update() error {
e.ui.Update()
return nil
}
func (e *Editor) Draw(screen *ebiten.Image) {
e.ui.Draw(screen)
}
func (e *Editor) Layout(w, h int) (int, int) {
return w, h
}
func DefaultFont() *text.Face {
s, err := text.NewGoTextFaceSource(bytes.NewReader(goregular.TTF))
if err != nil {
panic(err)
}
var f text.Face
f = &text.GoTextFace{
Source: s,
Size: 20,
}
return &f
}
func main() {
ebiten.SetWindowSize(480, 320)
ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
if err := ebiten.RunGame(NewEditor()); err != nil {
panic(err)
}
}