54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package achievements
|
|
|
|
import "time"
|
|
|
|
// Requirement represents a single achievement requirement
|
|
type Requirement struct {
|
|
AchievementID uint32 `json:"achievement_id"`
|
|
Name string `json:"name"`
|
|
QtyRequired uint32 `json:"qty_required"`
|
|
}
|
|
|
|
// Reward represents a single achievement reward
|
|
type Reward struct {
|
|
AchievementID uint32 `json:"achievement_id"`
|
|
Reward string `json:"reward"`
|
|
}
|
|
|
|
// UpdateItem represents a single achievement progress update
|
|
type UpdateItem struct {
|
|
AchievementID uint32 `json:"achievement_id"`
|
|
ItemUpdate uint32 `json:"item_update"`
|
|
}
|
|
|
|
// Update represents achievement completion/progress data
|
|
type Update struct {
|
|
ID uint32 `json:"id"`
|
|
CompletedDate time.Time `json:"completed_date"`
|
|
UpdateItems []UpdateItem `json:"update_items"`
|
|
}
|
|
|
|
// NewUpdate creates a new achievement update with empty slices
|
|
func NewUpdate() *Update {
|
|
return &Update{
|
|
UpdateItems: make([]UpdateItem, 0),
|
|
}
|
|
}
|
|
|
|
// AddUpdateItem adds an update item to the achievement update
|
|
func (u *Update) AddUpdateItem(item UpdateItem) {
|
|
u.UpdateItems = append(u.UpdateItems, item)
|
|
}
|
|
|
|
// Clone creates a deep copy of the achievement update
|
|
func (u *Update) Clone() *Update {
|
|
clone := &Update{
|
|
ID: u.ID,
|
|
CompletedDate: u.CompletedDate,
|
|
UpdateItems: make([]UpdateItem, len(u.UpdateItems)),
|
|
}
|
|
|
|
copy(clone.UpdateItems, u.UpdateItems)
|
|
return clone
|
|
}
|