From: Skullheadx Date: Sun, 7 Jun 2026 00:58:59 +0000 (-0400) Subject: jail affect event stack X-Git-Url: http://git.skullheadx.com/nixos/static/gitweb.js?a=commitdiff_plain;h=3e5648eaf87d653b840977f990bfb23ab1720ce5;p=monopoly-web.git jail affect event stack --- diff --git a/game/chance.go b/game/chance.go index bda1a54..57971a7 100644 --- a/game/chance.go +++ b/game/chance.go @@ -50,7 +50,7 @@ func (ctx *Context) ProcessChance() { } case 4: - ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: visitorID, TurnsLeft: JailDefaultTurns}) + ctx.PutPlayerInJail(visitorID) case 5: ctx.Turn.MoveQueue = append(ctx.Turn.MoveQueue, GetPlayerMoveDistance(currentPos, SpecialSpaces.ReadingRailroad)) case 6: diff --git a/game/chest.go b/game/chest.go index c43289a..a00f492 100644 --- a/game/chest.go +++ b/game/chest.go @@ -59,7 +59,7 @@ func (ctx *Context) ProcessChest() { case 12: ctx.AdjustPlayerMoney(visitorID, 25) case 13: - ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: visitorID, TurnsLeft: JailDefaultTurns}) + ctx.PutPlayerInJail(visitorID) case 14: ctx.Players.Alive[ctx.Turn.Current.Index()].GetOutOfJailCards++ case 15: diff --git a/game/game.go b/game/game.go index bf5e1c0..84cb7a1 100644 --- a/game/game.go +++ b/game/game.go @@ -4,7 +4,15 @@ import ( "math/rand/v2" ) -func initTurn(pID PlayerID) Turn { +func initTurn(pID PlayerID, inJail bool) Turn { + + eS := []EventType{EventEndTurn} + if inJail { + eS = append(eS, EventJail) + } else { + eS = append(eS, EventRollDice) + } + return Turn{ Current: pID, Ended: false, @@ -12,6 +20,7 @@ func initTurn(pID PlayerID) Turn { NumDiceRolled: 0, RolledDoubles: false, MoveQueue: []int32{}, + EventStack: eS, InDebt: false, Modifier: Modifiers{ RailroadRentMultiplier: 1, @@ -47,7 +56,7 @@ func InitCtx(randSeed rand.Source, players []Player) *Context { Alive: players, CanMove: playerIDs, }, - Turn: initTurn(startingPlayerID), + Turn: initTurn(startingPlayerID, false), Visitors: Visitors{ Unowned: []UnownedPropertyVisitor{}, Color: []OwnedColorVisitor{}, @@ -151,14 +160,15 @@ func (ctx *Context) RollDice() { } if ctx.Turn.NumDiceRolled >= 3 { - ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: ctx.Turn.Current, TurnsLeft: JailDefaultTurns}) + ctx.PutPlayerInJail(ctx.Turn.Current) } } func (ctx *Context) EndTurn() { nextTurnPlayerID := PlayerID{id: (ctx.Turn.Current.id + 1) % int32(len(ctx.Players.Alive))} - ctx.Turn = initTurn(nextTurnPlayerID) + ctx.Turn = initTurn(nextTurnPlayerID, !ctx.PlayerCanMove(nextTurnPlayerID)) + // TODO: send options list to the next player } func (ctx *Context) IsMortgaged(propID PropertyID) bool { diff --git a/game/jail.go b/game/jail.go index cdccb74..8b6ae80 100644 --- a/game/jail.go +++ b/game/jail.go @@ -18,11 +18,14 @@ func (ctx *Context) RemovePlayerFromJail(playerID PlayerID) { } } -func (ctx *Context) RemovePlayerFromMoveable(pID PlayerID) { +func (ctx *Context) PutPlayerInJail(pID PlayerID) { for i, cM := range ctx.Players.CanMove { if pID == cM { ctx.Players.CanMove[i] = ctx.Players.CanMove[len(ctx.Players.CanMove)-1] ctx.Players.CanMove = ctx.Players.CanMove[:len(ctx.Players.CanMove)-1] + ctx.Turn.EventStack = ctx.Turn.EventStack[0:1] + ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: pID, TurnsLeft: JailDefaultTurns}) + ctx.Turn.DiceRollsRemaining = 0 } } } @@ -35,7 +38,7 @@ func (ctx *Context) ProcessJail() { if turnsLeft <= 0 { ctx.RemovePlayerFromJail(visitorID) } else { - ctx.RemovePlayerFromMoveable(visitorID) + ctx.PutPlayerInJail(visitorID) } } diff --git a/game/movement.go b/game/movement.go index 68233a9..62a01ce 100644 --- a/game/movement.go +++ b/game/movement.go @@ -53,9 +53,7 @@ func (ctx *Context) AdvancePlayer(playerID PlayerID, currentPosition SpaceID, di case TypeTax: ctx.Visitors.Tax = append(ctx.Visitors.Tax, TaxVisitor{visitorID: playerID, taxID: prop.SubIndexID}) case TypePolice: // hardcoding to send straight to jail - ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: playerID, TurnsLeft: JailDefaultTurns}) - case TypeJail: - ctx.Visitors.InJail = append(ctx.Visitors.InJail, InJailVisitor{visitorID: playerID, TurnsLeft: JailDefaultTurns}) + ctx.PutPlayerInJail(playerID) case TypeColor: propID := ctx.getPropID(nextPos) ownerID := ctx.Properties.Owners[propID.Index()].OwnerID