fix: 修复 activity 类型转换错误问题,增加案例目录 activity/internal/example

This commit is contained in:
kercylan98 2023-11-24 15:02:03 +08:00
parent 605a308d55
commit 3a3394752c
6 changed files with 61 additions and 7 deletions

View File

@ -112,7 +112,7 @@ func (slf *Activity[Type, ID]) refresh() {
slf.mutex.Lock()
defer slf.mutex.Unlock()
curr := time.Now()
if slf.state = slf.options.Tl.GetStateByTime(curr); slf.state == stateUpcoming {
if slf.state = slf.options.Tl.GetStateByTime(curr); slf.state == stateUpcoming || (slf.state == stateStarted && !slf.options.Tl.HasState(stateUpcoming)) {
ticker.StopTimer(slf.retentionKey)
slf.initializeData()
}

View File

@ -9,22 +9,22 @@ import (
type none byte
// DefineNoneDataActivity 声明无数据的活动类型
func DefineNoneDataActivity[Type, ID generic.Basic](activityType Type) NoneDataActivityController[Type, ID, none, none, none] {
return regController(&Controller[Type, ID, none, none, none]{
func DefineNoneDataActivity[Type, ID generic.Basic](activityType Type) NoneDataActivityController[Type, ID, *none, none, *none] {
return regController(&Controller[Type, ID, *none, none, *none]{
t: activityType,
})
}
// DefineGlobalDataActivity 声明拥有全局数据的活动类型
func DefineGlobalDataActivity[Type, ID generic.Basic, Data any](activityType Type) GlobalDataActivityController[Type, ID, Data, none, none] {
return regController(&Controller[Type, ID, Data, none, none]{
func DefineGlobalDataActivity[Type, ID generic.Basic, Data any](activityType Type) GlobalDataActivityController[Type, ID, Data, none, *none] {
return regController(&Controller[Type, ID, Data, none, *none]{
t: activityType,
})
}
// DefineEntityDataActivity 声明拥有实体数据的活动类型
func DefineEntityDataActivity[Type, ID, EntityID generic.Basic, EntityData any](activityType Type) EntityDataActivityController[Type, ID, none, EntityID, EntityData] {
return regController(&Controller[Type, ID, none, EntityID, EntityData]{
func DefineEntityDataActivity[Type, ID, EntityID generic.Basic, EntityData any](activityType Type) EntityDataActivityController[Type, ID, *none, EntityID, EntityData] {
return regController(&Controller[Type, ID, *none, EntityID, EntityData]{
t: activityType,
})
}

View File

@ -0,0 +1,24 @@
package activities
import (
"github.com/kercylan98/minotaur/game/activity"
"github.com/kercylan98/minotaur/game/activity/internal/example/types"
"github.com/kercylan98/minotaur/utils/super"
"time"
)
var (
DemoActivity = activity.DefineEntityDataActivity[int, int, string, *types.DemoActivityData](1).InitializeEntityData(func(activityId int, entityId string, data *activity.EntityDataMeta[*types.DemoActivityData]) {
// 模拟数据库加载
_ = super.UnmarshalJSON([]byte(`{"last_new_day": "2021-01-01 00:00:00", "data": {"login_num": 3}}`), data)
})
)
func init() {
// 模拟配置加载活动
if err := activity.LoadOrRefreshActivity(1, 1, activity.NewOptions().
WithStartTime(time.Now().Add(time.Second*3)),
); err != nil {
panic(err)
}
}

View File

@ -0,0 +1,15 @@
package demoactivity
import (
"github.com/kercylan98/minotaur/game/activity"
"github.com/kercylan98/minotaur/game/activity/internal/example/activities"
"github.com/kercylan98/minotaur/utils/log"
)
func init() {
activity.RegStartedEvent(1, onActivityStart)
}
func onActivityStart(id int) {
log.Info("activity start", log.Int("id", id), log.Any("entity", activities.DemoActivity.GetEntityData(id, "demo_entity")))
}

View File

@ -0,0 +1,10 @@
package main
import (
_ "github.com/kercylan98/minotaur/game/activity/internal/example/activities/demoactivity"
"time"
)
func main() {
time.Sleep(time.Second * 5)
}

View File

@ -0,0 +1,5 @@
package types
type DemoActivityData struct {
LoginNum int `json:"login_num"` // 登录次数
}