Update dice image

This commit is contained in:
Trevor Slocum 2024-10-09 17:11:25 -07:00
parent 5a84d2da7b
commit dbba3541a7
6 changed files with 53 additions and 31 deletions

View file

@ -1,3 +1,8 @@
1.4.3:
- Print error message when connection fails
- Support navigating lists using arrow keys
- Update dice image
1.4.2:
- Add About dialog
- Redesign dark checkers

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1382,25 +1382,24 @@ func (b *board) Draw(screen *ebiten.Image) {
}
dividerHeight := float64(etk.Scale(15))
r := b.spaceRects[bgammon.SpaceHomePlayer]
checkerY := float64(b.y+int(b.verticalBorderSize)+r[1]+r[3]) + 3
checkerHeight := (b.spaceWidth + b.overlapSize*4 - dividerHeight*2) / 15
checkerY := float64(b.y+b.h-int(b.verticalBorderSize)) - checkerHeight - float64(etk.Scale(4))
checkers := len(b.spaceSprites[bgammon.SpaceHomePlayer])
var checkerOffset float64
for i := 0; i < checkers; i++ {
checkerOffset = 0
if i >= 10 {
checkerOffset = dividerHeight * 2
checkerOffset = dividerHeight*2 - float64(etk.Scale(2))
} else if i >= 5 {
checkerOffset = dividerHeight
checkerOffset = dividerHeight - float64(etk.Scale(2))
} else {
checkerOffset = 0
}
b.drawChecker(screen, imgCheckerSideLight, float64(b.x+b.w)-b.spaceWidth, checkerY-checkerHeight*float64(i+1)-checkerOffset, b.flipBoard, true)
}
checkerY = float64(b.y+int(b.verticalBorderSize)) + 1
checkerY = float64(b.y+int(b.verticalBorderSize)) - checkerHeight - 3
checkers = len(b.spaceSprites[bgammon.SpaceHomeOpponent])
for i := 0; i < checkers; i++ {
checkerOffset = 0

View file

@ -33,13 +33,12 @@ import (
"github.com/hajimehoshi/ebiten/v2/audio/wav"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/nfnt/resize"
"golang.org/x/image/font/opentype"
"golang.org/x/text/language"
)
const (
AppVersion = "v1.4.2"
AppVersion = "v1.4.3"
baseButtonHeight = 54
MaxDebug = 2
DefaultServerAddress = "wss://ws.bgammon.org:1338"
@ -195,6 +194,30 @@ var (
cubesImageSize = 0.0
)
func resizeImage(source *ebiten.Image, size int) *ebiten.Image {
if size == 0 {
size = 1
}
bounds := source.Bounds()
if bounds.Dx() == size && bounds.Dy() == size {
return source
}
scale, yScale := float64(size)/float64(bounds.Dx()), float64(size)/float64(bounds.Dy())
if yScale < scale {
scale = yScale
}
op := &ebiten.DrawImageOptions{}
op.Filter = ebiten.FilterLinear
op.GeoM.Scale(scale, scale)
dx := float64(size) - float64(bounds.Dx())*scale
op.GeoM.Translate(dx/2, 0)
dy := float64(size) - float64(bounds.Dy())*scale
op.GeoM.Translate(0, dy/2)
img := ebiten.NewImage(size, size)
img.DrawImage(source, op)
return img
}
func loadImageAssets(width int) {
if width == loadedCheckerWidth {
return
@ -206,7 +229,7 @@ func loadImageAssets(width int) {
imgCheckerSideLight = loadAsset("asset/image/checker_side_light.png", width)
imgCheckerSideDark = loadAsset("asset/image/checker_side_dark.png", width)
resizeDice := func(img image.Image, scale float64) *ebiten.Image {
resizeDice := func(img *ebiten.Image, scale float64) *ebiten.Image {
if game == nil {
panic("nil game")
}
@ -228,24 +251,24 @@ func loadImageAssets(width int) {
} else {
cubesImageSize = float64(diceSize) * scale
}
return ebiten.NewImageFromImage(resize.Resize(uint(float64(diceSize)*scale), 0, img, resize.Lanczos3))
return resizeImage(img, int(float64(diceSize)*scale))
}
const size = 184
imgDice = ebiten.NewImageFromImage(loadImage("asset/image/dice.png"))
imgDice1 = resizeDice(imgDice.SubImage(image.Rect(0, 0, size*1, size*1)), 1)
imgDice2 = resizeDice(imgDice.SubImage(image.Rect(size*1, 0, size*2, size*1)), 1)
imgDice3 = resizeDice(imgDice.SubImage(image.Rect(size*2, 0, size*3, size*1)), 1)
imgDice4 = resizeDice(imgDice.SubImage(image.Rect(0, size*1, size*1, size*2)), 1)
imgDice5 = resizeDice(imgDice.SubImage(image.Rect(size*1, size*1, size*2, size*2)), 1)
imgDice6 = resizeDice(imgDice.SubImage(image.Rect(size*2, size*1, size*3, size*2)), 1)
imgDice1 = resizeDice(imgDice.SubImage(image.Rect(0, 0, size*1, size*1)).(*ebiten.Image), 1)
imgDice2 = resizeDice(imgDice.SubImage(image.Rect(size*1, 0, size*2, size*1)).(*ebiten.Image), 1)
imgDice3 = resizeDice(imgDice.SubImage(image.Rect(size*2, 0, size*3, size*1)).(*ebiten.Image), 1)
imgDice4 = resizeDice(imgDice.SubImage(image.Rect(0, size*1, size*1, size*2)).(*ebiten.Image), 1)
imgDice5 = resizeDice(imgDice.SubImage(image.Rect(size*1, size*1, size*2, size*2)).(*ebiten.Image), 1)
imgDice6 = resizeDice(imgDice.SubImage(image.Rect(size*2, size*1, size*3, size*2)).(*ebiten.Image), 1)
imgCubes = ebiten.NewImageFromImage(loadImage("asset/image/cubes.png"))
imgCubes2 = resizeDice(imgCubes.SubImage(image.Rect(0, 0, size*1, size*1)), 0.6)
imgCubes4 = resizeDice(imgCubes.SubImage(image.Rect(size*1, 0, size*2, size*1)), 0.6)
imgCubes8 = resizeDice(imgCubes.SubImage(image.Rect(size*2, 0, size*3, size*1)), 0.6)
imgCubes16 = resizeDice(imgCubes.SubImage(image.Rect(0, size*1, size*1, size*2)), 0.6)
imgCubes32 = resizeDice(imgCubes.SubImage(image.Rect(size*1, size*1, size*2, size*2)), 0.6)
imgCubes64 = resizeDice(imgCubes.SubImage(image.Rect(size*2, size*1, size*3, size*2)), 0.6)
imgCubes2 = resizeDice(imgCubes.SubImage(image.Rect(0, 0, size*1, size*1)).(*ebiten.Image), 0.6)
imgCubes4 = resizeDice(imgCubes.SubImage(image.Rect(size*1, 0, size*2, size*1)).(*ebiten.Image), 0.6)
imgCubes8 = resizeDice(imgCubes.SubImage(image.Rect(size*2, 0, size*3, size*1)).(*ebiten.Image), 0.6)
imgCubes16 = resizeDice(imgCubes.SubImage(image.Rect(0, size*1, size*1, size*2)).(*ebiten.Image), 0.6)
imgCubes32 = resizeDice(imgCubes.SubImage(image.Rect(size*1, size*1, size*2, size*2)).(*ebiten.Image), 0.6)
imgCubes64 = resizeDice(imgCubes.SubImage(image.Rect(size*2, size*1, size*3, size*2)).(*ebiten.Image), 0.6)
imgProfileBirthday1 = ebiten.NewImageFromImage(loadImage("asset/image/profile_birthday_1.png"))
@ -306,7 +329,7 @@ func loadAudioAssets() {
randomizeByteSlice(homeMultiSounds)
}
func loadImage(assetPath string) image.Image {
func loadImage(assetPath string) *ebiten.Image {
f, err := assetFS.Open(assetPath)
if err != nil {
panic(err)
@ -317,17 +340,15 @@ func loadImage(assetPath string) image.Image {
log.Fatal(err)
}
return img
return ebiten.NewImageFromImage(img)
}
func loadAsset(assetPath string, width int) *ebiten.Image {
img := loadImage(assetPath)
if width > 0 {
imgResized := resize.Resize(uint(width), 0, img, resize.Lanczos3)
return ebiten.NewImageFromImage(imgResized)
return resizeImage(img, width)
}
return ebiten.NewImageFromImage(img)
return img
}
func LoadBytes(p string) []byte {

1
go.mod
View file

@ -13,7 +13,6 @@ require (
github.com/coder/websocket v1.8.12
github.com/hajimehoshi/ebiten/v2 v2.8.1
github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
golang.org/x/image v0.21.0
golang.org/x/sys v0.26.0
golang.org/x/text v0.19.0

2
go.sum
View file

@ -99,8 +99,6 @@ github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa1
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=