remove old viewer code
This commit is contained in:
parent
bad9b8050f
commit
64bab97c38
@ -1,91 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"image/color"
|
||||
"log"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
var errorTaskTerminated = errors.New("freego: task terminated")
|
||||
|
||||
type task func() error
|
||||
|
||||
// ViewBoard represents the game board.
|
||||
type ViewBoard struct {
|
||||
size int
|
||||
tiles map[*ViewTile]struct{}
|
||||
tasks []task
|
||||
}
|
||||
|
||||
// NewViewBoard generates a new ViewBoard with giving a size.
|
||||
func NewViewBoard(g *Game) (*ViewBoard, error) {
|
||||
size := g.board.size
|
||||
b := &ViewBoard{
|
||||
size: size,
|
||||
tiles: map[*ViewTile]struct{}{},
|
||||
}
|
||||
for i := 0; i < size; i++ {
|
||||
for j := 0; j < size; j++ {
|
||||
b.tiles[NewViewTile(i, j, g.board.board[i][j])] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
return b, nil
|
||||
}
|
||||
|
||||
//func (b *ViewBoard) tileAt(x, y int) *Tile {
|
||||
// return tileAt(b.tiles, x, y)
|
||||
//}
|
||||
|
||||
// Update updates the board state.
|
||||
func (b *ViewBoard) Update(input *Input) error {
|
||||
for t := range b.tiles {
|
||||
if err := t.Update(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if 0 < len(b.tasks) {
|
||||
t := b.tasks[0]
|
||||
if err := t(); err == errorTaskTerminated {
|
||||
b.tasks = b.tasks[1:]
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if dir, ok := input.Dir(); ok {
|
||||
//if err := b.Move(dir); err != nil {
|
||||
// return err
|
||||
//}
|
||||
log.Println(dir)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Draw draws the board to the given boardImage.
|
||||
func (b *ViewBoard) Draw(boardImage *ebiten.Image) {
|
||||
boardImage.Fill(color.RGBA{0xbb, 0xad, 0xa0, 0xff})
|
||||
for j := 0; j < b.size; j++ {
|
||||
for i := 0; i < b.size; i++ {
|
||||
//v := 0
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
x := i*tileSize + (i+1)*tileMargin
|
||||
y := j*tileSize + (j+1)*tileMargin
|
||||
op.GeoM.Translate(float64(x), float64(y))
|
||||
//op.ColorM.ScaleWithColor(tileBackgroundColor(v))
|
||||
boardImage.DrawImage(tileImage, op)
|
||||
}
|
||||
}
|
||||
for t := range b.tiles {
|
||||
t.Draw(boardImage)
|
||||
}
|
||||
}
|
||||
|
||||
// Size returns the board size.
|
||||
func (b *ViewBoard) Size() (int, int) {
|
||||
x := b.size*tileSize + (b.size+1)*tileMargin
|
||||
y := x
|
||||
return x, y
|
||||
}
|
129
view_tile.go
129
view_tile.go
@ -1,129 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
"log"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/examples/resources/fonts"
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
"github.com/hajimehoshi/ebiten/v2/text"
|
||||
"golang.org/x/image/font"
|
||||
"golang.org/x/image/font/opentype"
|
||||
)
|
||||
|
||||
//ViewTile is a tile in the viewer
|
||||
type ViewTile struct {
|
||||
gameTile *Tile
|
||||
|
||||
// next represents a next tile information after moving.
|
||||
// next is empty when the tile is not about to move.
|
||||
//next TileData
|
||||
|
||||
//movingCount int
|
||||
//startPoppingCount int
|
||||
//poppingCount int
|
||||
}
|
||||
|
||||
var (
|
||||
tileImage = ebiten.NewImage(tileSize, tileSize)
|
||||
)
|
||||
|
||||
var (
|
||||
mplusSmallFont font.Face
|
||||
mplusNormalFont font.Face
|
||||
mplusBigFont font.Face
|
||||
)
|
||||
|
||||
const (
|
||||
tileSize = 80
|
||||
tileMargin = 4
|
||||
)
|
||||
|
||||
func init() {
|
||||
tt, err := opentype.Parse(fonts.MPlus1pRegular_ttf)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
const dpi = 72
|
||||
mplusSmallFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
|
||||
Size: 24,
|
||||
DPI: dpi,
|
||||
Hinting: font.HintingFull,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
mplusNormalFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
|
||||
Size: 32,
|
||||
DPI: dpi,
|
||||
Hinting: font.HintingFull,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
mplusBigFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
|
||||
Size: 48,
|
||||
DPI: dpi,
|
||||
Hinting: font.HintingFull,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
//NewViewTile creates a new view tile
|
||||
func NewViewTile(x, y int, t *Tile) *ViewTile {
|
||||
return &ViewTile{
|
||||
gameTile: t,
|
||||
}
|
||||
}
|
||||
|
||||
// Update updates the tile's animation states.
|
||||
func (t *ViewTile) Update() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Draw draws the current tile to the given boardImage.
|
||||
func (t *ViewTile) Draw(boardImage *ebiten.Image) {
|
||||
j, i := t.gameTile.x, t.gameTile.y
|
||||
v := t.gameTile.entity
|
||||
if v == nil && t.gameTile.Passable() {
|
||||
return
|
||||
}
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
x := i*tileSize + (i+1)*tileMargin
|
||||
y := j*tileSize + (j+1)*tileMargin
|
||||
op.GeoM.Translate(float64(x), float64(y))
|
||||
//op.ColorM.ScaleWithColor(tileBackgroundColor(v))
|
||||
boardImage.DrawImage(tileImage, op)
|
||||
str := "NA"
|
||||
if v == nil {
|
||||
str = "river"
|
||||
} else {
|
||||
str = v.Rank.String()
|
||||
}
|
||||
|
||||
f := mplusBigFont
|
||||
switch {
|
||||
case 3 < len(str):
|
||||
f = mplusSmallFont
|
||||
case 2 < len(str):
|
||||
f = mplusNormalFont
|
||||
}
|
||||
|
||||
bound, _ := font.BoundString(f, str)
|
||||
w := (bound.Max.X - bound.Min.X).Ceil()
|
||||
h := (bound.Max.Y - bound.Min.Y).Ceil()
|
||||
x = x + (tileSize-w)/2
|
||||
y = y + (tileSize-h)/2 + h
|
||||
pieceColor := color.RGBA{0xf9, 0xf6, 0xf2, 0xff}
|
||||
if v != nil {
|
||||
if t.gameTile.entity.Owner == Red {
|
||||
pieceColor = color.RGBA{0xff, 0x0, 0x0, 0xff}
|
||||
} else if t.gameTile.entity.Owner == Blue {
|
||||
pieceColor = color.RGBA{0x0, 0x0, 0xff, 0xff}
|
||||
}
|
||||
}
|
||||
text.Draw(boardImage, str, f, x, y, pieceColor)
|
||||
}
|
60
viewer.go
60
viewer.go
@ -1,60 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
//Viewer is a graphical representation of a freego game
|
||||
type Viewer struct {
|
||||
input *Input
|
||||
board *ViewBoard
|
||||
boardImage *ebiten.Image
|
||||
gameState *Game
|
||||
}
|
||||
|
||||
//NewViewer creates a new viewer
|
||||
func NewViewer(g *Game) (*Viewer, error) {
|
||||
v := &Viewer{
|
||||
input: NewInput(),
|
||||
gameState: g,
|
||||
}
|
||||
var err error
|
||||
v.board, err = NewViewBoard(g)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// Layout implements ebiten.Game's Layout.
|
||||
func (v *Viewer) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
|
||||
return 800, 640
|
||||
}
|
||||
|
||||
// Update updates the current game state.
|
||||
func (v *Viewer) Update() error {
|
||||
v.input.Update()
|
||||
if err := v.board.Update(v.input); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Draw draws the current game to the given screen.
|
||||
func (v *Viewer) Draw(screen *ebiten.Image) {
|
||||
if v.boardImage == nil {
|
||||
w, h := v.board.Size()
|
||||
v.boardImage = ebiten.NewImage(w, h)
|
||||
}
|
||||
screen.Fill(color.RGBA{0xfa, 0xf8, 0xef, 0xff})
|
||||
v.board.Draw(v.boardImage)
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
sw, sh := screen.Size()
|
||||
bw, bh := v.boardImage.Size()
|
||||
x := (sw - bw) / 2
|
||||
y := (sh - bh) / 2
|
||||
op.GeoM.Translate(float64(x), float64(y))
|
||||
screen.DrawImage(v.boardImage, op)
|
||||
}
|
Loading…
Reference in New Issue
Block a user