Add Zukitchi widget with animations, moods, and frame-based rendering

This commit is contained in:
Arindy 2026-01-02 10:57:14 +01:00
parent 0a7e89307f
commit 3e765c7b95
2 changed files with 1274 additions and 29 deletions

View File

@ -21,14 +21,13 @@ func Zukitchi() ZukitchiOptions {
}
var mood = make([]string, 0)
var frames = 1
var frame = 0
var lastFrame = time.Now()
var pet = zukitchi.New()
func createZukitchi(ctx context.Context, _ terminalapi.Terminal, _ interface{}) widgetapi.Widget {
widget := util.PanicOnErrorWithResult(text.New())
changeMood("sleep")
go util.Periodic(ctx, 1*time.Minute, pet.Run())
go util.Periodic(ctx, util.RedrawInterval, func() error {
return draw(widget)
})
@ -36,25 +35,14 @@ func createZukitchi(ctx context.Context, _ terminalapi.Terminal, _ interface{})
return widget
}
func changeMood(moodToChangeTo string) {
switch moodToChangeTo {
case "sleep":
mood = zukitchi.Sleep(0)
break
}
frames = len(mood)
frame = 0
}
func draw(widget *text.Text) error {
if time.Since(lastFrame) < 1*time.Second {
return nil
}
widget.Reset()
if err := widget.Write(mood[frame], text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil {
if err := widget.Write(pet.NextFrame(), text.WriteCellOpts(cell.FgColor(cell.ColorBlack), cell.BgColor(cell.ColorGreen))); err != nil {
return err
}
frame = (frame + 1) % frames
lastFrame = time.Now()
return nil
}

File diff suppressed because it is too large Load Diff