-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
operations.go
136 lines (132 loc) · 5.29 KB
/
operations.go
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package main
import (
"fmt"
"github.com/BigJk/end_of_eden/game"
"github.com/samber/lo"
"math/rand"
)
func Shuffle[T any](rnd *rand.Rand, collection []T) []T {
rnd.Shuffle(len(collection), func(i, j int) {
collection[i], collection[j] = collection[j], collection[i]
})
return collection
}
var Operations = map[string]func(rnd *rand.Rand, s *game.Session) string{
"FinishPlayerTurn": func(rnd *rand.Rand, s *game.Session) string {
s.FinishPlayerTurn()
return "Finish player turn"
},
"FinishFight": func(rnd *rand.Rand, s *game.Session) string {
s.FinishFight()
return "Finish fight"
},
"CastCard": func(rnd *rand.Rand, s *game.Session) string {
guid := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances(), s.GetActors()}))[0]
target := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances(), s.GetActors()}))[0]
s.CastCard(guid, target)
return fmt.Sprintf("Cast card with guid '%s' on '%s'", guid, target)
},
"AddActorFromEnemy": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
enemyId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Enemies)}))[0]
s.AddActorFromEnemy(enemyId)
return fmt.Sprintf("Added enemy '%s'", enemyId)
},
"SetEvent": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
eventId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Events)}))[0]
s.SetEvent(eventId)
return fmt.Sprintf("Set event '%s'", eventId)
},
"SetGameState": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
eventId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Events)}))[0]
s.SetGameState(Shuffle(rnd, []game.GameState{game.GameStateGameOver, game.GameStateMerchant, game.GameStateRandom, game.GameStateEvent, game.GameStateFight, game.GameState("")})[0])
return fmt.Sprintf("Set event '%s'", eventId)
},
"FinishEvent": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
eventId := Shuffle(rnd, lo.Flatten([][]string{lo.Keys(res.Events)}))[0]
event := res.Events[eventId]
choice := rnd.Intn(len(event.Choices) + 1)
s.FinishEvent(choice)
return fmt.Sprintf("Finish event '%s' with choice %d", eventId, choice)
},
"CleanUpFight": func(rnd *rand.Rand, s *game.Session) string {
s.CleanUpFight()
return "Clean up fight"
},
"SetupFight": func(rnd *rand.Rand, s *game.Session) string {
s.SetupFight()
return "Setup fight"
},
"SetupMerchant": func(rnd *rand.Rand, s *game.Session) string {
s.SetupMerchant()
return "Setup merchant"
},
"LeaveMerchant": func(rnd *rand.Rand, s *game.Session) string {
s.LeaveMerchant()
return "Leave merchant"
},
"GivePlayerGold": func(rnd *rand.Rand, s *game.Session) string {
gold := rnd.Intn(100)
s.GivePlayerGold(gold)
return fmt.Sprintf("Give %d gold to player", gold)
},
"PlayerGiveActionPoints": func(rnd *rand.Rand, s *game.Session) string {
actionPoints := rnd.Intn(5)
s.PlayerGiveActionPoints(actionPoints)
return fmt.Sprintf("Give %d action points to player", actionPoints)
},
"AddCard": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
cardId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Cards)}))[0]
s.GiveCard(cardId, game.PlayerActorID)
return fmt.Sprintf("Give '%s' card to player", cardId)
},
"AddArtifact": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
artifactId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Artifacts)}))[0]
s.GiveArtifact(artifactId, game.PlayerActorID)
return fmt.Sprintf("Give '%s' artifact to player", artifactId)
},
"PlayerBuyCard": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
cardId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Cards)}))[0]
s.PlayerBuyCard(cardId)
return fmt.Sprintf("Buy '%s' card as player", cardId)
},
"PlayerBuyArtifact": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
artifactId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.Artifacts)}))[0]
s.PlayerBuyArtifact(artifactId)
return fmt.Sprintf("Buy '%s' artifact as player", artifactId)
},
"AddStatusEffect": func(rnd *rand.Rand, s *game.Session) string {
res := s.GetResources()
effectId := Shuffle(rnd, lo.Flatten([][]string{{""}, lo.Keys(res.StatusEffects)}))[0]
stacks := rnd.Intn(10)
s.GiveStatusEffect(effectId, game.PlayerActorID, stacks)
return fmt.Sprintf("Give '%s' status effect with %d stacks to player", effectId, stacks)
},
"BuyUpgradeCard": func(rnd *rand.Rand, s *game.Session) string {
cardId := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances()}))[0]
s.BuyUpgradeCard(cardId)
return fmt.Sprintf("Buy upgrading card '%s'", cardId)
},
"BuyRemoveCard": func(rnd *rand.Rand, s *game.Session) string {
cardId := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances()}))[0]
s.BuyRemoveCard(cardId)
return fmt.Sprintf("Buy removing card '%s'", cardId)
},
"UpgradeCard": func(rnd *rand.Rand, s *game.Session) string {
cardId := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances()}))[0]
s.UpgradeCard(cardId)
return fmt.Sprintf("Upgrading card '%s'", cardId)
},
"UpgradeRandomCard": func(rnd *rand.Rand, s *game.Session) string {
guid := Shuffle(rnd, lo.Flatten([][]string{{""}, s.GetInstances(), s.GetActors()}))[0]
s.UpgradeRandomCard(guid)
return fmt.Sprintf("Upgrade random card '%s'", guid)
},
}