blob: 1163df9d53b3e1f35f917f1189850e0c9c777cba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package game
func (ctx *Context) RemovePlayerFromJail(playerID PlayerID) {
for i, iJV := range ctx.Visitors.InJail {
if playerID == iJV.VisitorID {
ctx.Visitors.InJail[i] = ctx.Visitors.InJail[len(ctx.Visitors.InJail)-1]
ctx.Visitors.InJail = ctx.Visitors.InJail[:len(ctx.Visitors.InJail)-1]
ctx.Turn.Log = append(ctx.Turn.Log, LogRemoveJail)
}
}
if !ctx.PlayerCanMove(playerID) {
ctx.Players.CanMove = append(ctx.Players.CanMove, 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
ctx.Turn.Log = append(ctx.Turn.Log, LogPutJail)
}
}
}
func (ctx *Context) ProcessJail() {
for _, iJV := range ctx.Visitors.InJail {
visitorID := iJV.VisitorID
turnsLeft := iJV.TurnsLeft
if turnsLeft <= 0 {
ctx.RemovePlayerFromJail(visitorID)
} else {
ctx.PutPlayerInJail(visitorID)
}
}
}
func (ctx *Context) JailPardon() {
currID := ctx.Turn.Current
ctx.RemovePlayerFromJail(currID)
ctx.Players.Alive[currID.Index()].PardonCards -= 1
}
func (ctx *Context) JailBuyout() {
currID := ctx.Turn.Current
ctx.RemovePlayerFromJail(currID)
ctx.AdjustPlayerMoney(currID, -JailBuyoutCost)
}
|