Files
vRp.CD2g_test/game/activity/README.md
2024-01-15 10:37:51 +08:00

11 KiB

Activity

Go doc

activity 活动状态管理

目录导航

列出了该 package 下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️

展开 / 折叠目录导航

包级函数定义

函数名称 描述
SetTicker 设置自定义定时器,该方法必须在使用活动系统前调用,且只能调用一次
LoadGlobalData 加载所有活动全局数据
LoadEntityData 加载所有活动实体数据
LoadOrRefreshActivity 加载或刷新活动
DefineNoneDataActivity 声明无数据的活动类型
DefineGlobalDataActivity 声明拥有全局数据的活动类型
DefineEntityDataActivity 声明拥有实体数据的活动类型
DefineGlobalAndEntityDataActivity 声明拥有全局数据和实体数据的活动类型
RegUpcomingEvent 注册即将开始的活动事件处理器
OnUpcomingEvent 即将开始的活动事件
RegStartedEvent 注册活动开始事件处理器
OnStartedEvent 活动开始事件
RegEndedEvent 注册活动结束事件处理器
OnEndedEvent 活动结束事件
RegExtendedShowStartedEvent 注册活动结束后延长展示开始事件处理器
OnExtendedShowStartedEvent 活动结束后延长展示开始事件
RegExtendedShowEndedEvent 注册活动结束后延长展示结束事件处理器
OnExtendedShowEndedEvent 活动结束后延长展示结束事件
RegNewDayEvent 注册新的一天事件处理器
OnNewDayEvent 新的一天事件
NewOptions 创建活动选项

类型定义

类型 名称 描述
STRUCT Activity 活动描述
STRUCT Controller 活动控制器
INTERFACE BasicActivityController 暂无描述...
INTERFACE NoneDataActivityController 无数据活动控制器
INTERFACE GlobalDataActivityController 全局数据活动控制器
INTERFACE EntityDataActivityController 实体数据活动控制器
INTERFACE GlobalAndEntityDataActivityController 全局数据和实体数据活动控制器
STRUCT DataMeta 全局活动数据
STRUCT EntityDataMeta 活动实体数据
STRUCT UpcomingEventHandler 暂无描述...
STRUCT Options 活动选项

详情信息

func SetTicker(size int, options ...timer.Option)

设置自定义定时器,该方法必须在使用活动系统前调用,且只能调用一次


func LoadGlobalData(handler func (activityType any))

加载所有活动全局数据


func LoadEntityData(handler func (activityType any))

加载所有活动实体数据


func LoadOrRefreshActivity(activityType Type, activityId ID, options ...*Options) error

加载或刷新活动

  • 通常在活动配置刷新时候将活动通过该方法注册或刷新

func DefineNoneDataActivity(activityType Type) NoneDataActivityController[Type, ID, *none, none, *none]

声明无数据的活动类型


func DefineGlobalDataActivity(activityType Type) GlobalDataActivityController[Type, ID, Data, none, *none]

声明拥有全局数据的活动类型


func DefineEntityDataActivity(activityType Type) EntityDataActivityController[Type, ID, *none, EntityID, EntityData]

声明拥有实体数据的活动类型


func DefineGlobalAndEntityDataActivity(activityType Type) GlobalAndEntityDataActivityController[Type, ID, Data, EntityID, EntityData]

声明拥有全局数据和实体数据的活动类型


func RegUpcomingEvent(activityType Type, handler UpcomingEventHandler[ID], priority ...int)

注册即将开始的活动事件处理器


func OnUpcomingEvent(activity *Activity[Type, ID])

即将开始的活动事件


func RegStartedEvent(activityType Type, handler StartedEventHandler[ID], priority ...int)

注册活动开始事件处理器


func OnStartedEvent(activity *Activity[Type, ID])

活动开始事件


func RegEndedEvent(activityType Type, handler EndedEventHandler[ID], priority ...int)

注册活动结束事件处理器


func OnEndedEvent(activity *Activity[Type, ID])

活动结束事件


func RegExtendedShowStartedEvent(activityType Type, handler ExtendedShowStartedEventHandler[ID], priority ...int)

注册活动结束后延长展示开始事件处理器


func OnExtendedShowStartedEvent(activity *Activity[Type, ID])

活动结束后延长展示开始事件


func RegExtendedShowEndedEvent(activityType Type, handler ExtendedShowEndedEventHandler[ID], priority ...int)

注册活动结束后延长展示结束事件处理器


func OnExtendedShowEndedEvent(activity *Activity[Type, ID])

活动结束后延长展示结束事件


func RegNewDayEvent(activityType Type, handler NewDayEventHandler[ID], priority ...int)

注册新的一天事件处理器


func OnNewDayEvent(activity *Activity[Type, ID])

新的一天事件


func NewOptions() *Options

创建活动选项


Activity STRUCT

活动描述

type Activity[Type generic.Basic, ID generic.Basic] struct {
	id                ID
	t                 Type
	options           *Options
	state             byte
	lazy              bool
	tickerKey         string
	retention         time.Duration
	retentionKey      string
	mutex             sync.RWMutex
	getLastNewDayTime func() time.Time
	setLastNewDayTime func(time.Time)
	clearData         func()
	initializeData    func()
}

Controller STRUCT

活动控制器

type Controller[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct {
	t          Type
	activities map[ID]*Activity[Type, ID]
	globalData map[ID]*DataMeta[Data]
	entityData map[ID]map[EntityID]*EntityDataMeta[EntityData]
	entityTof  reflect.Type
	globalInit func(activityId ID, data *DataMeta[Data])
	entityInit func(activityId ID, entityId EntityID, data *EntityDataMeta[EntityData])
	mutex      sync.RWMutex
}

BasicActivityController INTERFACE

type BasicActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] interface {
	IsOpen(activityId ID) bool
	IsShow(activityId ID) bool
	IsOpenOrShow(activityId ID) bool
	Refresh(activityId ID)
}

NoneDataActivityController INTERFACE

无数据活动控制器

type NoneDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] interface {
	BasicActivityController[Type, ID, Data, EntityID, EntityData]
	InitializeNoneData(handler func(activityId ID, data *DataMeta[Data])) NoneDataActivityController[Type, ID, Data, EntityID, EntityData]
}

GlobalDataActivityController INTERFACE

全局数据活动控制器

type GlobalDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] interface {
	BasicActivityController[Type, ID, Data, EntityID, EntityData]
	GetGlobalData(activityId ID) Data
	InitializeGlobalData(handler func(activityId ID, data *DataMeta[Data])) GlobalDataActivityController[Type, ID, Data, EntityID, EntityData]
}

EntityDataActivityController INTERFACE

实体数据活动控制器

type EntityDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] interface {
	BasicActivityController[Type, ID, Data, EntityID, EntityData]
	GetEntityData(activityId ID, entityId EntityID) EntityData
	InitializeEntityData(handler func(activityId ID, entityId EntityID, data *EntityDataMeta[EntityData])) EntityDataActivityController[Type, ID, Data, EntityID, EntityData]
}

GlobalAndEntityDataActivityController INTERFACE

全局数据和实体数据活动控制器

type GlobalAndEntityDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] interface {
	BasicActivityController[Type, ID, Data, EntityID, EntityData]
	GetGlobalData(activityId ID) Data
	GetEntityData(activityId ID, entityId EntityID) EntityData
	InitializeGlobalAndEntityData(handler func(activityId ID, data *DataMeta[Data]), entityHandler func(activityId ID, entityId EntityID, data *EntityDataMeta[EntityData])) GlobalAndEntityDataActivityController[Type, ID, Data, EntityID, EntityData]
}

DataMeta STRUCT

全局活动数据

type DataMeta[Data any] struct {
	once       sync.Once
	Data       Data
	LastNewDay time.Time
}

EntityDataMeta STRUCT

活动实体数据

type EntityDataMeta[Data any] struct {
	once       sync.Once
	Data       Data
	LastNewDay time.Time
}

UpcomingEventHandler STRUCT

type UpcomingEventHandler[ID generic.Basic] func(activityId ID)

Options STRUCT

活动选项

type Options struct {
	Tl   *times.StateLine[byte]
	Loop time.Duration
}

func (*Options) WithUpcomingTime(t time.Time) *Options

设置活动预告时间


func (*Options) WithStartTime(t time.Time) *Options

设置活动开始时间


func (*Options) WithEndTime(t time.Time) *Options

设置活动结束时间


func (*Options) WithExtendedShowTime(t time.Time) *Options

设置延长展示时间


func (*Options) WithLoop(interval time.Duration) *Options

设置活动循环,时间间隔小于等于 0 表示不循环

  • 当活动状态展示结束后,会根据该选项设置的时间间隔重新开始