blob: 02378bc715e490c341afe32e7fa6e0ec587cc44c [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// uistate contains the UIState struct that holds all variables relevant to creating and updating the app UI
// uistate also contains View, which defines different UI views
package uistate
import (
"time"
"hearts/img/coords"
"hearts/img/staticimg"
"hearts/logic/card"
"hearts/logic/table"
"golang.org/x/mobile/exp/gl/glutil"
"golang.org/x/mobile/exp/sprite"
"v.io/v23/context"
"v.io/v23/syncbase"
)
type View string
const (
None View = "None"
Opening View = "Opening"
Discovery View = "Discovery"
Pass View = "Pass"
Take View = "Take"
Table View = "Table"
Play View = "Play"
Score View = "Score"
Split View = "Split"
)
const (
numPlayers int = 4
numSuits int = 4
cardSize float32 = 35
cardScaler float32 = .5
topPadding float32 = 15
bottomPadding float32 = 5
)
type UIState struct {
StartTime time.Time
Images *glutil.Images
Eng sprite.Engine
Scene *sprite.Node
Cards []*card.Card
TableCards []*card.Card
BackgroundImgs []*staticimg.StaticImg
EmptySuitImgs []*staticimg.StaticImg
DropTargets []*staticimg.StaticImg
Buttons []*staticimg.StaticImg
Other []*staticimg.StaticImg
CurCard *card.Card
CurImg *staticimg.StaticImg
// lastMouseXY is in Px: divide by pixelsPerPt to get Pt
LastMouseXY *coords.Vec
NumPlayers int
NumSuits int
CardSize float32
CardScaler float32
TopPadding float32
BottomPadding float32
// windowSize is in Pt
WindowSize *coords.Vec
CardDim *coords.Vec
TableCardDim *coords.Vec
PlayerIconDim *coords.Vec
PixelsPerPt float32
Overlap *coords.Vec
Padding float32
CurView View
CurTable *table.Table
Done bool
Texs map[string]sprite.SubTex
CurPlayerIndex int
Ctx *context.T
Service syncbase.Service
Debug bool
Shutdown func()
GameID int
}
func MakeUIState() *UIState {
return &UIState{
StartTime: time.Now(),
Cards: make([]*card.Card, 0),
TableCards: make([]*card.Card, 0),
BackgroundImgs: make([]*staticimg.StaticImg, 0),
EmptySuitImgs: make([]*staticimg.StaticImg, 0),
DropTargets: make([]*staticimg.StaticImg, 0),
Buttons: make([]*staticimg.StaticImg, 0),
Other: make([]*staticimg.StaticImg, 0),
LastMouseXY: coords.MakeVec(-1, -1),
NumPlayers: numPlayers,
NumSuits: numSuits,
CardSize: cardSize,
CardScaler: cardScaler,
TopPadding: topPadding,
BottomPadding: bottomPadding,
WindowSize: coords.MakeVec(-1, -1),
CardDim: coords.MakeVec(cardSize, cardSize),
TableCardDim: coords.MakeVec(cardSize*cardScaler, cardSize*cardScaler),
PlayerIconDim: coords.MakeVec(2*cardSize/3, 2*cardSize/3),
Overlap: coords.MakeVec(3*cardSize*cardScaler/4, 3*cardSize*cardScaler/4),
Padding: float32(5),
CurView: None,
Done: false,
CurPlayerIndex: 0,
Debug: true,
}
}