fix: 修复 activity 类型转换错误问题,增加案例目录 activity/internal/example
This commit is contained in:
parent
605a308d55
commit
3a3394752c
|
@ -112,7 +112,7 @@ func (slf *Activity[Type, ID]) refresh() {
|
||||||
slf.mutex.Lock()
|
slf.mutex.Lock()
|
||||||
defer slf.mutex.Unlock()
|
defer slf.mutex.Unlock()
|
||||||
curr := time.Now()
|
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)
|
ticker.StopTimer(slf.retentionKey)
|
||||||
slf.initializeData()
|
slf.initializeData()
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,22 +9,22 @@ import (
|
||||||
type none byte
|
type none byte
|
||||||
|
|
||||||
// DefineNoneDataActivity 声明无数据的活动类型
|
// DefineNoneDataActivity 声明无数据的活动类型
|
||||||
func DefineNoneDataActivity[Type, ID generic.Basic](activityType Type) NoneDataActivityController[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]{
|
return regController(&Controller[Type, ID, *none, none, *none]{
|
||||||
t: activityType,
|
t: activityType,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefineGlobalDataActivity 声明拥有全局数据的活动类型
|
// DefineGlobalDataActivity 声明拥有全局数据的活动类型
|
||||||
func DefineGlobalDataActivity[Type, ID generic.Basic, Data any](activityType Type) GlobalDataActivityController[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]{
|
return regController(&Controller[Type, ID, Data, none, *none]{
|
||||||
t: activityType,
|
t: activityType,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefineEntityDataActivity 声明拥有实体数据的活动类型
|
// DefineEntityDataActivity 声明拥有实体数据的活动类型
|
||||||
func DefineEntityDataActivity[Type, ID, EntityID generic.Basic, EntityData any](activityType Type) EntityDataActivityController[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]{
|
return regController(&Controller[Type, ID, *none, EntityID, EntityData]{
|
||||||
t: activityType,
|
t: activityType,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -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")))
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package types
|
||||||
|
|
||||||
|
type DemoActivityData struct {
|
||||||
|
LoginNum int `json:"login_num"` // 登录次数
|
||||||
|
}
|
Loading…
Reference in New Issue