vRp.CD2g_test/game/task
kercylan98 22449ff5c3 docs: 优化 README.md 可读性 2024-01-15 17:27:02 +08:00
..
README.md docs: 优化 README.md 可读性 2024-01-15 17:27:02 +08:00
condition.go refactor: #60 重构 game/task 包,支持更灵活的任务配置方式 2023-11-09 12:08:27 +08:00
events.go refactor: #60 重构 game/task 包,支持更灵活的任务配置方式 2023-11-09 12:08:27 +08:00
options.go refactor: #60 重构 game/task 包,支持更灵活的任务配置方式 2023-11-09 12:08:27 +08:00
status.go refactor: #60 重构 game/task 包,支持更灵活的任务配置方式 2023-11-09 12:08:27 +08:00
task.go refactor: #60 重构 game/task 包,支持更灵活的任务配置方式 2023-11-09 12:08:27 +08:00
task_test.go refactor: 移除 slice 包和 hash 包,新增 listings、mappings 包存放数组、切片、映射等数据结构,原 slice、hash 包中的工具函数迁移至 collection 包,与 sher 包合并并移除 sher 包。完善 collection 包测试用例 2024-01-11 17:50:04 +08:00

README.md

Task

Go doc

暂无介绍...

目录导航

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

展开 / 折叠目录导航

包级函数定义

函数名称 描述
Cond 创建任务条件
RegisterRefreshTaskCounterEvent 注册特定任务类型的刷新任务计数器事件处理函数
OnRefreshTaskCounterEvent 触发特定任务类型的刷新任务计数器事件
RegisterRefreshTaskConditionEvent 注册特定任务类型的刷新任务条件事件处理函数
OnRefreshTaskConditionEvent 触发特定任务类型的刷新任务条件事件
WithType 设置任务类型
WithCondition 设置任务完成条件,当满足条件时,任务状态为完成
WithCounter 设置任务计数器,当计数器达到要求时,任务状态为完成
WithOverflowCounter 设置可溢出的任务计数器,当计数器达到要求时,任务状态为完成
WithDeadline 设置任务截止时间,超过截至时间并且任务未完成时,任务状态为失败
WithLimitedDuration 设置任务限时,超过限时时间并且任务未完成时,任务状态为失败
NewTask 生成任务

类型定义

类型 名称 描述
STRUCT Condition 任务条件
STRUCT RefreshTaskCounterEventHandler 暂无描述...
STRUCT Option 任务选项
STRUCT Status 暂无描述...
STRUCT Task 是对任务信息进行描述和处理的结构体

详情信息

func Cond(k any, v any) Condition

创建任务条件

查看 / 收起单元测试

func TestCond(t *testing.T) {
	task := NewTask(WithType("T"), WithCounter(5), WithCondition(Cond("N", 5).Cond("M", 10)))
	task.AssignConditionValueAndRefresh("N", 5)
	task.AssignConditionValueAndRefresh("M", 10)
	RegisterRefreshTaskCounterEvent[*Player](task.Type, func(taskType string, trigger *Player, count int64) {
		fmt.Println("Player", count)
		for _, t := range trigger.tasks[taskType] {
			fmt.Println(t.CurrCount, t.IncrementCounter(count).Status)
		}
	})
	RegisterRefreshTaskConditionEvent[*Player](task.Type, func(taskType string, trigger *Player, condition Condition) {
		fmt.Println("Player", condition)
		for _, t := range trigger.tasks[taskType] {
			fmt.Println(t.CurrCount, t.AssignConditionValueAndRefresh("N", 5).Status)
		}
	})
	RegisterRefreshTaskCounterEvent[*Monster](task.Type, func(taskType string, trigger *Monster, count int64) {
		fmt.Println("Monster", count)
	})
	player := &Player{tasks: map[string][]*Task{task.Type: {task}}}
	OnRefreshTaskCounterEvent(task.Type, player, 1)
	OnRefreshTaskCounterEvent(task.Type, player, 2)
	OnRefreshTaskCounterEvent(task.Type, player, 3)
	OnRefreshTaskCounterEvent(task.Type, new(Monster), 3)
}


func RegisterRefreshTaskCounterEvent[Trigger any](taskType string, handler RefreshTaskCounterEventHandler[Trigger])

注册特定任务类型的刷新任务计数器事件处理函数


func OnRefreshTaskCounterEvent(taskType string, trigger any, count int64)

触发特定任务类型的刷新任务计数器事件


func RegisterRefreshTaskConditionEvent[Trigger any](taskType string, handler RefreshTaskConditionEventHandler[Trigger])

注册特定任务类型的刷新任务条件事件处理函数


func OnRefreshTaskConditionEvent(taskType string, trigger any, condition Condition)

触发特定任务类型的刷新任务条件事件


func WithType(taskType string) Option

设置任务类型


func WithCondition(condition Condition) Option

设置任务完成条件,当满足条件时,任务状态为完成

  • 任务条件值需要变更时可通过 Task.AssignConditionValueAndRefresh 方法变更
  • 当多次设置该选项时,后面的设置会覆盖之前的设置

func WithCounter(counter int64, initCount ...int64) Option

设置任务计数器,当计数器达到要求时,任务状态为完成

  • 一些场景下,任务计数器可能会溢出,此时可通过 WithOverflowCounter 设置可溢出的任务计数器
  • 当多次设置该选项时,后面的设置会覆盖之前的设置
  • 如果需要初始化计数器的值,可通过 initCount 参数设置

func WithOverflowCounter(counter int64, initCount ...int64) Option

设置可溢出的任务计数器,当计数器达到要求时,任务状态为完成

  • 当多次设置该选项时,后面的设置会覆盖之前的设置
  • 如果需要初始化计数器的值,可通过 initCount 参数设置

func WithDeadline(deadline time.Time) Option

设置任务截止时间,超过截至时间并且任务未完成时,任务状态为失败


func WithLimitedDuration(start time.Time, duration time.Duration) Option

设置任务限时,超过限时时间并且任务未完成时,任务状态为失败


func NewTask(options ...Option) *Task

生成任务


Condition STRUCT

任务条件

type Condition map[any]any

func (Condition) Cond(k any, v any) Condition

创建任务条件


func (Condition) GetString(key any) string

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetInt(key any) int

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetInt8(key any) int8

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetInt16(key any) int16

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetInt32(key any) int32

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetInt64(key any) int64

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetUint(key any) uint

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetUint8(key any) uint8

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetUint16(key any) uint16

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetUint32(key any) uint32

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetUint64(key any) uint64

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetFloat32(key any) float32

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetFloat64(key any) float64

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetBool(key any) bool

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetTime(key any) time.Time

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetDuration(key any) time.Duration

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetByte(key any) byte

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetBytes(key any) []byte

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetRune(key any) rune

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetRunes(key any) []rune

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


func (Condition) GetAny(key any) any

获取特定类型的任务条件值,该值必须与预期类型一致,否则返回零值


RefreshTaskCounterEventHandler STRUCT

type RefreshTaskCounterEventHandler[Trigger any] func(taskType string, trigger Trigger, count int64)

Option STRUCT

任务选项

type Option func(task *Task)

Status STRUCT

type Status byte

func (Status) String() string


Task STRUCT

是对任务信息进行描述和处理的结构体

type Task struct {
	Type            string
	Status          Status
	Cond            Condition
	CondValue       map[any]any
	Counter         int64
	CurrCount       int64
	CurrOverflow    bool
	Deadline        time.Time
	StartTime       time.Time
	LimitedDuration time.Duration
}

func (*Task) IsComplete() bool

判断任务是否已完成


func (*Task) IsFailed() bool

判断任务是否已失败


func (*Task) IsReward() bool

判断任务是否已领取奖励


func (*Task) ReceiveReward() bool

领取任务奖励,当任务状态为已完成时,才能领取奖励,此时返回 true并且任务状态变更为已领取奖励


func (*Task) IncrementCounter(incr int64) *Task

增加计数器的值,当 incr 为负数时,计数器的值不会发生变化

  • 如果需要溢出计数器,可通过 WithOverflowCounter 设置可溢出的任务计数器

func (*Task) DecrementCounter(decr int64) *Task

减少计数器的值,当 decr 为负数时,计数器的值不会发生变化


func (*Task) AssignConditionValueAndRefresh(key any, value any) *Task

分配条件值并刷新任务状态


func (*Task) AssignConditionValueAndRefreshByCondition(condition Condition) *Task

分配条件值并刷新任务状态


func (*Task) ResetStatus() *Task

重置任务状态

  • 该函数会将任务状态重置为已接受状态后,再刷新任务状态
  • 当任务条件变更,例如任务计数要求为 10已经完成的情况下将任务计数要求变更为 5 或 20此时任务状态由于是已完成或已领取状态不会自动刷新需要调用该函数刷新任务状态