112 lines
2.5 KiB
Go
112 lines
2.5 KiB
Go
|
package person
|
||
|
|
||
|
import (
|
||
|
"github.com/ectrc/snow/storage"
|
||
|
"github.com/google/uuid"
|
||
|
)
|
||
|
|
||
|
type Quest struct {
|
||
|
ID string
|
||
|
TemplateID string
|
||
|
Objectives []string
|
||
|
ObjectiveCounts []int64
|
||
|
BundleID string
|
||
|
ScheduleID string
|
||
|
}
|
||
|
|
||
|
func NewQuest(templateID string, bundleID string, scheduleID string) *Quest {
|
||
|
return &Quest{
|
||
|
ID: uuid.New().String(),
|
||
|
TemplateID: templateID,
|
||
|
Objectives: []string{},
|
||
|
ObjectiveCounts: []int64{},
|
||
|
BundleID: bundleID,
|
||
|
ScheduleID: scheduleID,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func FromDatabaseQuest(quest *storage.DB_Quest, profileType *string) *Quest {
|
||
|
return &Quest{
|
||
|
ID: quest.ID,
|
||
|
TemplateID: quest.TemplateID,
|
||
|
Objectives: quest.Objectives,
|
||
|
ObjectiveCounts: quest.ObjectiveCounts,
|
||
|
BundleID: quest.BundleID,
|
||
|
ScheduleID: quest.ScheduleID,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) Delete() {
|
||
|
//storage.Repo.DeleteQuest(q.ID)
|
||
|
q.ObjectiveCounts = []int64{}
|
||
|
q.Objectives = []string{}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) AddObjective(objective string, count int64) {
|
||
|
q.Objectives = append(q.Objectives, objective)
|
||
|
q.ObjectiveCounts = append(q.ObjectiveCounts, count)
|
||
|
}
|
||
|
|
||
|
func (q *Quest) SetObjectiveCount(objective string, count int64) {
|
||
|
for i, obj := range q.Objectives {
|
||
|
if obj == objective {
|
||
|
q.ObjectiveCounts[i] = count
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) UpdateObjectiveCount(objective string, delta int64) {
|
||
|
for i, obj := range q.Objectives {
|
||
|
if obj == objective {
|
||
|
q.ObjectiveCounts[i] += delta
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) GetObjectiveCount(objective string) int64 {
|
||
|
for i, obj := range q.Objectives {
|
||
|
if obj == objective {
|
||
|
return q.ObjectiveCounts[i]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
func (q *Quest) GetObjectiveIndex(objective string) int {
|
||
|
for i, obj := range q.Objectives {
|
||
|
if obj == objective {
|
||
|
return i
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return -1
|
||
|
}
|
||
|
|
||
|
func (q *Quest) RemoveObjective(objective string) {
|
||
|
for i, obj := range q.Objectives {
|
||
|
if obj == objective {
|
||
|
q.Objectives = append(q.Objectives[:i], q.Objectives[i+1:]...)
|
||
|
q.ObjectiveCounts = append(q.ObjectiveCounts[:i], q.ObjectiveCounts[i+1:]...)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) ToDatabase(profileId string) *storage.DB_Quest {
|
||
|
return &storage.DB_Quest{
|
||
|
ProfileID: profileId,
|
||
|
ID: q.ID,
|
||
|
TemplateID: q.TemplateID,
|
||
|
Objectives: q.Objectives,
|
||
|
ObjectiveCounts: q.ObjectiveCounts,
|
||
|
BundleID: q.BundleID,
|
||
|
ScheduleID: q.ScheduleID,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (q *Quest) Save() {
|
||
|
//storage.Repo.SaveQuest(q.ToDatabase())
|
||
|
}
|