Redesign dark checkers
This commit is contained in:
parent
a2a7f3ddc5
commit
3516244b73
8 changed files with 28 additions and 39 deletions
|
@ -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
|
||||
|
|
BIN
game/asset/image/checker_side_dark.png
Normal file
BIN
game/asset/image/checker_side_dark.png
Normal file
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 |
BIN
game/asset/image/checker_top_dark.png
Normal file
BIN
game/asset/image/checker_top_dark.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
game/asset/image/checker_top_light.png
Normal file
BIN
game/asset/image/checker_top_light.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -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()
|
||||
|
|
15
game/game.go
15
game/game.go
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue