diff --git a/game/builtin/ranking_list.go b/game/builtin/ranking_list.go index dcf0b38..18ddfca 100644 --- a/game/builtin/ranking_list.go +++ b/game/builtin/ranking_list.go @@ -50,6 +50,13 @@ func (slf *RankingList[CompetitorID, Score]) Competitor(competitorId CompetitorI } else { slf.competitor(competitorId, score, rank, len(slf.scores)-1) } + if len(slf.rankChangeEventHandles) > 0 { + newRank, err := slf.GetRank(competitorId) + if err != nil { + panic(err) + } + slf.OnRankChangeEvent(competitorId, rank, newRank, v, score) + } } else { if slf.rankCount > 0 && len(slf.scores) >= slf.rankCount { last := slf.scores[len(slf.scores)-1] @@ -58,6 +65,13 @@ func (slf *RankingList[CompetitorID, Score]) Competitor(competitorId CompetitorI } } slf.competitor(competitorId, score, 0, len(slf.scores)-1) + if len(slf.rankChangeEventHandles) > 0 { + newRank, err := slf.GetRank(competitorId) + if err != nil { + panic(err) + } + slf.OnRankChangeEvent(competitorId, newRank, newRank, score, score) + } } } diff --git a/game/ranking_list.go b/game/ranking_list.go index 3841567..7821348 100644 --- a/game/ranking_list.go +++ b/game/ranking_list.go @@ -29,6 +29,7 @@ type RankingList[CompetitorID comparable, Score generic.Ordered] interface { Clear() // RegRankChangeEvent 排名改变时将立即执行注册的事件处理函数 + // - 当竞争者为新加入时,oldRank 和 oldScore 均与 newRank 和 newScore 相同 RegRankChangeEvent(handle RankChangeEventHandle[CompetitorID, Score]) OnRankChangeEvent(competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score) }