vRp.CD2g_test/game/ranking_list.go

44 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package game
import "github.com/kercylan98/minotaur/utils/generic"
// RankingList 排行榜
type RankingList[CompetitorID comparable, Score generic.Ordered] interface {
// Competitor 声明排行榜竞争者
// - 如果竞争者存在的情况下,会更新已有成绩,否则新增竞争者
Competitor(competitorId CompetitorID, score Score)
// CompetitorIncrease 积分增量的形式竞争排行榜
// - 如果竞争者存在的情况下会更新已有成绩为增加score后的成绩否则新增竞争者
CompetitorIncrease(competitorId CompetitorID, score Score)
// RemoveCompetitor 删除特定竞争者
RemoveCompetitor(competitorId CompetitorID)
// Size 获取竞争者数量
Size() int
// GetRank 获取竞争者排名
GetRank(competitorId CompetitorID) (int, error)
// GetCompetitor 获取特定排名的竞争者
GetCompetitor(rank int) (CompetitorID, error)
// GetCompetitorWithRange 获取第start名到第end名竞争者
GetCompetitorWithRange(start, end int) ([]CompetitorID, error)
// GetScore 获取竞争者成绩
GetScore(competitorId CompetitorID) (Score, error)
// GetAllCompetitor 获取所有竞争者ID
// - 结果为名次有序的
GetAllCompetitor() []CompetitorID
// Clear 清空排行榜
Clear()
// RegRankChangeEvent 排名改变时将立即执行注册的事件处理函数
// - 排名为-1时表示未上榜
RegRankChangeEvent(handle RankChangeEventHandle[CompetitorID, Score])
OnRankChangeEvent(competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score)
// RegRankClearBeforeEvent 在排行榜被清空前执行被注册的事件处理函数
RegRankClearBeforeEvent(handle RankClearBeforeEventHandle[CompetitorID, Score])
OnRankClearBeforeEvent()
}
type (
RankChangeEventHandle[CompetitorID comparable, Score generic.Ordered] func(rankingList RankingList[CompetitorID, Score], competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score)
RankClearBeforeEventHandle[CompetitorID comparable, Score generic.Ordered] func(rankingList RankingList[CompetitorID, Score])
)