aboutsummaryrefslogtreecommitdiff
path: root/internal/casino/types.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/casino/types.go')
-rw-r--r--internal/casino/types.go121
1 files changed, 121 insertions, 0 deletions
diff --git a/internal/casino/types.go b/internal/casino/types.go
new file mode 100644
index 0000000..f284869
--- /dev/null
+++ b/internal/casino/types.go
@@ -0,0 +1,121 @@
+package casino
+
+import "fmt"
+
+type GameName string
+
+const (
+ GameSlots GameName = "slots"
+)
+
+type TableConfig struct {
+ ID string `yaml:"id"`
+ Game GameName `yaml:"game"`
+ MaxPlayers int `yaml:"max_players,omitempty"`
+ BettingTicks int `yaml:"betting_ticks,omitempty"`
+ MinBet int `yaml:"min_bet,omitempty"`
+ MaxBet int `yaml:"max_bet,omitempty"`
+}
+
+type MachineConfig struct {
+ ID string `yaml:"id"`
+ Game GameName `yaml:"game"`
+ Variant string `yaml:"variant,omitempty"`
+ MinBet int `yaml:"min_bet,omitempty"`
+ MaxBet int `yaml:"max_bet,omitempty"`
+ SpinTicks int `yaml:"spin_ticks,omitempty"`
+ Payout float64 `yaml:"payout,omitempty"`
+}
+
+func (c MachineConfig) Normalize() MachineConfig {
+ if c.MinBet <= 0 {
+ c.MinBet = 1
+ }
+ if c.MaxBet <= 0 {
+ c.MaxBet = int(^uint(0) >> 1)
+ }
+ if c.SpinTicks <= 0 {
+ c.SpinTicks = 2
+ }
+ if c.Variant == "" {
+ c.Variant = "huff_and_even_more_puff"
+ }
+ if c.Payout <= 0 {
+ c.Payout = 0.97
+ }
+ return c
+}
+
+func (c TableConfig) Normalize() TableConfig {
+ if c.MaxPlayers <= 0 {
+ c.MaxPlayers = 8
+ }
+ if c.BettingTicks <= 0 {
+ c.BettingTicks = 20
+ }
+ if c.MinBet <= 0 {
+ c.MinBet = 1
+ }
+ if c.MaxBet <= 0 {
+ c.MaxBet = int(^uint(0) >> 1)
+ }
+ return c
+}
+
+type Wager struct {
+ Total int
+ Chips int
+ Credits int
+}
+
+type Wallet interface {
+ Wager(amount int) (Wager, bool)
+ PayCredits(amount int)
+}
+
+type EventType string
+
+const (
+ EventJoined EventType = "joined"
+ EventBetting EventType = "betting"
+ EventBetPlaced EventType = "bet_placed"
+ EventRoundStarted EventType = "round_started"
+ EventResult EventType = "result"
+ EventPayout EventType = "payout"
+ EventTimedOut EventType = "timed_out"
+ EventLeft EventType = "left"
+ EventClosed EventType = "closed"
+)
+
+type Event struct {
+ RoomID int
+ TableID string
+ Type EventType
+ Player string
+ Message string
+ PrivateMessage string
+ PrivateTo string
+ Color string
+ Public bool
+ Slot *SlotSnapshot
+}
+
+type SlotSnapshot struct {
+ Grid [3][5]string
+ StoppedReels int
+}
+
+func (e Event) String() string {
+ if e.Message != "" {
+ return e.Message
+ }
+ return fmt.Sprintf("%s at %s", e.Type, e.TableID)
+}
+
+type Participant struct {
+ Name string
+ Connected bool
+ HasBet bool
+ Wager Wager
+ Wallet Wallet
+}