summaryrefslogtreecommitdiffstats
path: root/game/jail.go
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)
}