]> Skullheadx's Git Forge - monopoly-web.git/commitdiff
jail affect event stack
authorSkullheadx <admonty1@protonmail.com>
Sun, 7 Jun 2026 00:58:59 +0000 (20:58 -0400)
committerSkullheadx <admonty1@protonmail.com>
Sun, 7 Jun 2026 01:11:30 +0000 (21:11 -0400)
game/chance.go
game/chest.go
game/game.go
game/jail.go
game/movement.go

index bda1a54ffda239a395f8abc62fe98dec4438c12a..57971a70f13787933db8daebe84302fc3ad8a71d 100644 (file)
@@ -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:
index c43289a2db8936c00de10be190af2267f1c6a8b6..a00f4925c9cfba427649d5a407623608d49adf6d 100644 (file)
@@ -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:
index bf5e1c003962638004970a704cd717a8e53d6654..84cb7a1929bbffcc7e857b487b0762455339dee4 100644 (file)
@@ -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 {
index cdccb749e077b0494599f33350e5b29a5c0dd787..8b6ae803e46b37acfb11ad6f84113dc6e7a42365 100644 (file)
@@ -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)
                }
 
        }
index 68233a909c19bb852fe5b756802619f6a65470a3..62a01ce59d45bd39059e1a6c27e930d8d3a8138f 100644 (file)
@@ -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