81 lines
2.9 KiB
Go
81 lines
2.9 KiB
Go
package display
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
|
|
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/pixel"
|
|
)
|
|
|
|
var faceBase = []string{
|
|
"...eeeeee...",
|
|
"..eyyyyyye..",
|
|
".eyyyyyyyye.",
|
|
"eyyyyyyyyyye",
|
|
"eyyyyyyyyyye",
|
|
"eyyyyyyyyyye",
|
|
"eyyyyyyyyyye",
|
|
"eyyyyyyyyyye",
|
|
"eyyyyyyyyyye",
|
|
".eyyyyyyyye.",
|
|
"..eyyyyyye..",
|
|
"...eeeeee...",
|
|
}
|
|
|
|
// EmojiNames lists the faces in order.
|
|
var EmojiNames = []string{"smile", "grin", "laugh", "wink", "love", "cool", "wow", "sad",
|
|
"cry", "angry", "sleep", "sick", "dead", "think", "meh", "blush"}
|
|
|
|
// features are each face's rows over the base.
|
|
var features = map[string]map[int]string{
|
|
"smile": {4: "...k....k...", 5: "...k....k...", 7: "..k......k..", 8: "...kkkkkk..."},
|
|
"grin": {4: "...k....k...", 5: "...k....k...", 7: "..kkkkkkkk..", 8: "..kllllllk..", 9: "...kkkkkk..."},
|
|
"laugh": {4: "...k....k...", 5: "..k.k..k.k..", 7: "..kkkkkkkk..", 8: "..krrrrrrk..", 9: "...kkkkkk..."},
|
|
"wink": {4: "........k...", 5: "..kkk...k...", 7: "..k......k..", 8: "...kkkkkk..."},
|
|
"love": {3: "..r.r..r.r..", 4: "..rrr..rrr..", 5: "...r....r...", 7: "..k......k..", 8: "...kkkkkk..."},
|
|
"cool": {4: ".kkkkkkkkkk.", 5: "..kkk..kkk..", 7: "..k.........", 8: "...kkkkk...."},
|
|
"wow": {4: "..kk....kk..", 5: "..kk....kk..", 7: ".....kk.....", 8: "....k..k....", 9: ".....kk....."},
|
|
"sad": {4: "...k....k...", 5: "...k....k...", 8: "...kkkkkk...", 9: "..k......k.."},
|
|
"cry": {4: "..kkk..kkk..", 5: "..c......c..", 6: "..c......c..", 8: "...kkkkkk...", 9: "..k......k.."},
|
|
"angry": {3: "..k......k..", 4: "...kk..kk...", 5: "...k....k...", 8: "...kkkkkk...", 9: "..k......k.."},
|
|
"sleep": {0: ".........kkk", 1: "..........k.", 2: ".........kkk", 5: "..kkk..kkk..", 8: "....kkkk...."},
|
|
"sick": {4: "..kkk..kkk..", 5: "...k....k...", 7: "..g.g.g.g...", 8: "...g.g.g.g..", 9: "...kk..kk..."},
|
|
"dead": {3: "..k.k..k.k..", 4: "...k....k...", 5: "..k.k..k.k..", 8: "...kkkkkk..."},
|
|
"think": {3: "..kkk.......", 4: "...k....k...", 5: "...k....k...", 8: ".....kkk...."},
|
|
"meh": {4: "...k....k...", 5: "...k....k...", 8: "...kkkkkk..."},
|
|
"blush": {4: "...k....k...", 5: "...k....k...", 6: ".AA......AA.", 7: "..k......k..", 8: "...kkkkkk..."},
|
|
}
|
|
|
|
var emoji = func() map[string]*pixel.Sprite {
|
|
out := map[string]*pixel.Sprite{}
|
|
for _, name := range EmojiNames {
|
|
rows := append([]string(nil), faceBase...)
|
|
for i, over := range features[name] {
|
|
row := []byte(rows[i])
|
|
for j := range over {
|
|
if over[j] != '.' {
|
|
row[j] = over[j]
|
|
}
|
|
}
|
|
rows[i] = string(row)
|
|
}
|
|
out[name] = pixel.MustSprite(strings.Join(rows, "\n"))
|
|
}
|
|
return out
|
|
}()
|
|
|
|
type EmojiOptions struct {
|
|
Scale int
|
|
}
|
|
|
|
// Emoji draws one of sixteen hand-placed faces by name.
|
|
func Emoji(c *ui.Context, name string, o EmojiOptions) *ui.Element {
|
|
sp, ok := emoji[name]
|
|
if !ok {
|
|
panic(fmt.Sprintf("display: no emoji %q", name))
|
|
}
|
|
return Icon(c, sp, IconOptions{Scale: o.Scale, Label: name})
|
|
}
|