diff options
Diffstat (limited to 'internal/casino/types.go')
| -rw-r--r-- | internal/casino/types.go | 121 |
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 +} |
