Redesign dark checkers

This commit is contained in:
Trevor Slocum 2024-09-18 12:01:22 -07:00
parent a2a7f3ddc5
commit 3516244b73
8 changed files with 28 additions and 39 deletions

View file

@ -1,3 +1,6 @@
1.4.2:
- Redesign dark checkers
1.4.1:
- Fix locale detection on Windows and Linux
- Support undoing moves using backspace key

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -957,7 +957,7 @@ func (b *board) MuteSounds() {
func (b *board) newSprite(white bool) *Sprite {
s := &Sprite{}
s.colorWhite = white
s.w, s.h = imgCheckerTop.Bounds().Dx(), imgCheckerTop.Bounds().Dy()
s.w, s.h = imgCheckerTopLight.Bounds().Dx(), imgCheckerTopLight.Bounds().Dy()
return s
}
@ -1253,42 +1253,25 @@ func (b *board) updateBackgroundImage() {
}
func (b *board) drawChecker(target *ebiten.Image, checker *ebiten.Image, x float64, y float64, white bool, side bool) {
// Draw shadow.
if !side {
op := &ebiten.DrawImageOptions{}
op.Filter = ebiten.FilterLinear
op.GeoM.Translate(x, y)
op.ColorScale.Scale(0, 0, 0, 1)
target.DrawImage(checker, op)
}
// Draw checker.
checkerScale := 0.94
height := b.spaceWidth
if side {
height = 80
}
op := &ebiten.DrawImageOptions{}
op.Filter = ebiten.FilterLinear
op.GeoM.Translate(-b.spaceWidth/2, -height/2)
op.GeoM.Scale(checkerScale, checkerScale)
op.GeoM.Translate((b.spaceWidth/2)+x, (height/2)+y)
op.GeoM.Translate(x, y)
c := lightCheckerColor
if !white {
c = darkCheckerColor
}
op.ColorScale.Scale(0, 0, 0, 1)
r := float32(c.R) / 0xff
g := float32(c.G) / 0xff
bl := float32(c.B) / 0xff
r := float32(checkerColor.R) / 0xff
g := float32(checkerColor.G) / 0xff
bl := float32(checkerColor.B) / 0xff
op.ColorScale.SetR(r)
op.ColorScale.SetG(g)
op.ColorScale.SetB(bl)
if !white {
if checker == imgCheckerTopLight {
checker = imgCheckerTopDark
} else {
checker = imgCheckerSideDark
}
}
target.DrawImage(checker, op)
}
@ -1335,7 +1318,7 @@ func (b *board) drawSprite(target *ebiten.Image, sprite *Sprite) {
// Schedule another frame
scheduleFrame()
}
b.drawChecker(target, imgCheckerTop, x, y, sprite.colorWhite, false)
b.drawChecker(target, imgCheckerTopLight, x, y, sprite.colorWhite, false)
}
func (b *board) innerBoardCenter(right bool) int {
@ -1424,7 +1407,7 @@ func (b *board) Draw(screen *ebiten.Image) {
} else {
checkerOffset = 0
}
b.drawChecker(screen, imgCheckerSide, float64(b.x+b.w)-b.spaceWidth, checkerY-checkerHeight*float64(i+1)-checkerOffset, b.flipBoard, true)
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
@ -1438,7 +1421,7 @@ func (b *board) Draw(screen *ebiten.Image) {
} else {
checkerOffset = 0
}
b.drawChecker(screen, imgCheckerSide, float64(b.x+b.w)-b.spaceWidth, float64(checkerY+checkerHeight*float64(i)+checkerOffset), !b.flipBoard, true)
b.drawChecker(screen, imgCheckerSideLight, float64(b.x+b.w)-b.spaceWidth, float64(checkerY+checkerHeight*float64(i)+checkerOffset), !b.flipBoard, true)
}
b.stateLock.Lock()
@ -1666,7 +1649,7 @@ func (b *board) setRect(x, y, w, h int) {
for i := 0; i < b.Sprites.num; i++ {
s := b.Sprites.sprites[i]
s.w, s.h = imgCheckerTop.Bounds().Dx(), imgCheckerTop.Bounds().Dy()
s.w, s.h = imgCheckerTopLight.Bounds().Dx(), imgCheckerTopLight.Bounds().Dy()
}
b.setSpaceRects()

View file

@ -58,8 +58,10 @@ var resizeDuration = 250 * time.Millisecond
var assetFS embed.FS
var (
imgCheckerTop *ebiten.Image
imgCheckerSide *ebiten.Image
imgCheckerTopLight *ebiten.Image
imgCheckerTopDark *ebiten.Image
imgCheckerSideLight *ebiten.Image
imgCheckerSideDark *ebiten.Image
imgDice *ebiten.Image
imgDice1 *ebiten.Image
@ -83,8 +85,7 @@ var (
)
var (
lightCheckerColor = color.RGBA{232, 211, 162, 255}
darkCheckerColor = color.RGBA{0, 0, 0, 255}
checkerColor = color.RGBA{232, 211, 162, 255}
)
const maxStatusWidthRatio = 0.5
@ -196,8 +197,10 @@ func loadImageAssets(width int) {
}
loadedCheckerWidth = width
imgCheckerTop = loadAsset("asset/image/checker_top.png", width)
imgCheckerSide = loadAsset("asset/image/checker_side.png", width)
imgCheckerTopLight = loadAsset("asset/image/checker_top_light.png", width)
imgCheckerTopDark = loadAsset("asset/image/checker_top_dark.png", width)
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 {
if game == nil {