Files
vRp.CD2g_test/game/activity

Activity

activity 活动状态管理

Go doc

目录

列出了该 package 下所有的函数,可通过目录进行快捷跳转 ❤️

展开 / 折叠目录

包级函数定义

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

结构体定义

结构体 描述
Activity 活动描述
Controller 活动控制器
BasicActivityController 暂无描述...
NoneDataActivityController 无数据活动控制器
GlobalDataActivityController 全局数据活动控制器
EntityDataActivityController 实体数据活动控制器
GlobalAndEntityDataActivityController 全局数据和实体数据活动控制器
DataMeta 全局活动数据
EntityDataMeta 活动实体数据
UpcomingEventHandler 暂无描述...
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

活动描述

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

活动控制器

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

type BasicActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct{}

NoneDataActivityController

无数据活动控制器

type NoneDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct{}

GlobalDataActivityController

全局数据活动控制器

type GlobalDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct{}

EntityDataActivityController

实体数据活动控制器

type EntityDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct{}

GlobalAndEntityDataActivityController

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

type GlobalAndEntityDataActivityController[Type generic.Basic, ID generic.Basic, Data any, EntityID generic.Basic, EntityData any] struct{}

DataMeta

全局活动数据

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

EntityDataMeta

活动实体数据

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

UpcomingEventHandler

type UpcomingEventHandler[ID generic.Basic] struct{}

Options

活动选项

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 表示不循环

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