}
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:
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:
"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,
NumDiceRolled: 0,
RolledDoubles: false,
MoveQueue: []int32{},
+ EventStack: eS,
InDebt: false,
Modifier: Modifiers{
RailroadRentMultiplier: 1,
Alive: players,
CanMove: playerIDs,
},
- Turn: initTurn(startingPlayerID),
+ Turn: initTurn(startingPlayerID, false),
Visitors: Visitors{
Unowned: []UnownedPropertyVisitor{},
Color: []OwnedColorVisitor{},
}
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 {
}
}
-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
}
}
}
if turnsLeft <= 0 {
ctx.RemovePlayerFromJail(visitorID)
} else {
- ctx.RemovePlayerFromMoveable(visitorID)
+ ctx.PutPlayerInJail(visitorID)
}
}
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