forked from ar3s3ru/pbg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
models.go
277 lines (246 loc) · 4.73 KB
/
models.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
package pbg
import (
"fmt"
"time"
)
type (
// Interfaccia che rappresenta una sessione utente
Session interface {
Reference() Trainer
Token() string
Expired() bool
}
// Interfaccia che rappresenta un Pokèmon.
//
// Interface that represent a Pokèmon.
Pokèmon interface {
Name() string
Index() int
Type() PokèmonType
BaseStats() [6]int
// Sprites
FrontSprite() string
BackSprite() string
}
// Interfaccia che rappresenta una mossa Pokèmon.
//
// Interface that represents a Pokèmon move.
Move interface {
Name() string
Type() Type
Category() Category
Priority() int
Power() int
Accuracy() int
PPs() int
}
// Interfaccia che rappresenta un Allenatore Pokèmon.
// L'ALlenatore è un modello dell'utente che interagisce col server - indi per cui ha una relazione di composizione
// con l'interfaccia Utente.
//
// Interface that represent a Pokèmon Trainer.
// The Trainer is a model for the user that interacts with the server - as such, it has a composition relationship
// with the User interface.
Trainer interface {
// User fields
Name() string
PasswordHash() []byte
SignUpDate() time.Time
// Trainer fields
Set() bool
Class() TrainerClass
Team() [6]PokèmonTeam
// Procedures (with error handling)
SetTrainer([6]PokèmonTeam, TrainerClass) error
UpdateTrainer([6]PokèmonTeam) error
}
// Interfaccia che rappresenta un Pokèmon all'interno di una squadra.
// Ha una relazione di composizione con un oggetto Pokèmon, ma estende un Pokèmon base con possibile Nickname,
// un numero di mosse (da 1 a 4 possibili), un certo livello, una determinata Natura e Abilità, e un numero di IVs
// ed EVs.
//
// Interface that represent a Pokèmon inside a team.
// It has a composition relationship with a Pokèmon object, but extends the latter with a possible Nickname,
// a certain number of moves (from 1 to 4), a certain level, a specified Nature and Ability, IVs and EVs.
PokèmonTeam interface {
Pokèmon
Moves() [4]Move
Level() int
//GetNature() Nature
//GetAbility() Ability
IVs() [6]int
EVs() [6]int
}
// Categoria di mossa Pokèmon.
//
// Pokèmon move Category.
Category int
// Tipo di mossa Pokèmon.
//
// Pokèmon move Type.
Type int
// Classe di un ALlenatore Pokèmon.
//
// Pokèmon Trainer Class.
TrainerClass int
// Tipo di un Pokèmon; può avere fino a 2 tipi di mossa Pokèmon.
//
// Pokèmon Type; can have up to 2 Pokèmon move type.
PokèmonType [2]Type
)
const (
Physique Category = iota
Special
State
)
const (
Normal Type = iota
Fire
Fighting
Water
Flying
Grass
Poison
Electric
Ground
PsychicT
Rock
Ice
Bug
Dragon
Ghost
Dark
Steel
Fairy
Undefined
)
const (
TrainerC TrainerClass = iota
Beauty
Biker
BirdKeeper
Blackbelt
BugCatcher
Burglar
Channeler
Cooltrainer
CueBall
Engineer
Fisherman
Gambler
Gentleman
Hiker
JrTrainer
Juggler
Lass
PokèManiac
PsychicC
Rocker
Rocket
Sailor
Scientist
SuperNerd
Swimmer
Tamer
Youngster
Chief
)
var (
// Nomi per le varie categorie
CategoryNames = [...]string{
"Physique",
"Special",
"State",
}
// Nomi per i vari tipi
TypeNames = [...]string{
"Normal",
"Fire",
"Fightning",
"Water",
"Flying",
"Grass",
"Poison",
"Electric",
"Ground",
"Psychic",
"Rock",
"Ice",
"Bug",
"Dragon",
"Ghost",
"Dark",
"Steel",
"Fairy",
"???",
}
// Nomi per le varie classi di allenatori
ClassesNames = [...]string{
"Trainer",
"Beauty",
"Biker",
"BirdKeeper",
"Blackbelt",
"Bug Catcher",
"Burglar",
"Channeler",
"Cooltrainer",
"Cue Ball",
"Engineer",
"Fisherman",
"Gambler",
"Gentleman",
"Hiker",
"Trainer Jr.",
"Juggler",
"Lass",
"PokèManiac",
"Psychic",
"Rocker",
"Rocket",
"Sailor",
"Scientist",
"Super Nerd",
"Swimmer",
"Tamer",
"Youngster",
"Chief",
}
)
func (c Category) String() string {
if c == Physique || c == Special || c == State {
return CategoryNames[c]
}
return "Undefined"
}
func (c Category) MarshalJSON() ([]byte, error) {
return []byte(`"` + c.String() + `"`), nil
}
func (t Type) String() string {
if t >= Normal && t <= Undefined {
return TypeNames[t]
}
return "Undefined"
}
func (t Type) MarshalJSON() ([]byte, error) {
return []byte(`"` + t.String() + `"`), nil
}
func (tc TrainerClass) String() string {
if tc >= TrainerC && tc <= Chief {
return ClassesNames[tc]
}
return "Undefined"
}
func (tc TrainerClass) MarshalJSON() ([]byte, error) {
return []byte(`"` + tc.String() + `"`), nil
}
func (pt PokèmonType) String() string {
if pt[1] == -1 {
return pt[0].String()
} else {
return fmt.Sprintf("%s/%s", pt[0].String(), pt[1].String())
}
}
func (pt PokèmonType) MarshalJSON() ([]byte, error) {
return []byte(`"` + pt.String() + `"`), nil
}