Files
ZacharyZhang-NYandClaude Opus 5.5 03e1f91706 Upgrade MyGo to v0.5.5
Elements are now pass-scoped value handles: tests that read bounds
after a frame bind a ui.Handle. pixel tells frames apart by the build
pass's root, since the Tester clock no longer moves on its own.

Fix the regressions the upgrade brought:
- Clipboard reads in input handlers go through c.Services().
- MyGo notes an overlay's opener after building it, so AutoFocus
  inside lost it; pixel.AutoFocus focuses through a Handle, and
  archtest bans the raw call. Dialogs hand the focus back again.
- Elements around a press stay hovered: Tooltip tells a press-given
  focus by focus arriving under the pointer.
- The web host moves the Tester clock with real time, at most 500 ms
  a call, and gives components the real clock.

The gallery's source index also accepts CRLF checkouts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 01:31:08 -04:00

76 lines
1.3 KiB
Go

package display
import (
"fmt"
"github.com/egoist/mygo/ui"
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/pixel"
)
type Rarity uint8
const (
Common Rarity = iota
Uncommon
Rare
Epic
Legendary
)
// Slot is the rarity's color.
func (r Rarity) Slot() pixel.Slot {
if r > Legendary {
panic(fmt.Sprintf("display: unknown Rarity %d", r))
}
return [...]pixel.Slot{pixel.Faint, pixel.Good, pixel.Info, pixel.Magic, pixel.Warn}[r]
}
func (r Rarity) name(k pixel.Kit) string {
return k.Msg([...]string{"common", "uncommon", "rare", "epic", "legendary"}[r])
}
var (
gem = pixel.MustSprite(`
...eeeee...
..e#l#l#e..
.e##l#l##e.
eeeeeeeeeee
e#ll###ss#e
.e#l###s#e.
..e#l#s#e..
...e#s#e...
....e#e....
.....e.....
`)
glint = pixel.MustSprite(`
..#..
..#..
##.##
..#..
..#..
.....
..#..
.#.#.
..#..
.....
`)
)
type GemOptions struct {
Scale int
}
// Gem is a cut gem by rarity, sparkling in steps.
func Gem(c *ui.Context, r Rarity, o GemOptions) ui.Element {
k, sc := pixel.K(c), scale(o.Scale)
ink := r.Slot()
return art(c, k, r.name(k), (gem.W+3)*sc, (gem.H+2)*sc, func(g pixel.Canvas) {
g.Sprite(0, 2*sc, gem, 0, ink, sc)
if f := g.Step(4) % 4; f < 2 {
g.Sprite(gem.W*sc-2*sc, 0, glint, f, pixel.Lit, sc)
}
})
}