服务端倒带(Server-Side Rewind)命中判定系统

这个图要从右向左看

3.3 🔑 帧查找(双链表二分查找)

cpp 复制代码
// 第368-423行
FFramePackage GetFrameToCheck(ABlasterCharacter* HitCharacter, float HitTime)
{
    const TDoubleLinkedList<FFramePackage>& History = HitCharacter->GetLagCompensation()->FrameHistory;
    
    // 边界检查
    if (History.GetTail()->GetValue().Time > HitTime) return FFramePackage(); // 延迟太大
    if (History.GetTail()->GetValue().Time == HitTime) return History.GetTail()->GetValue();
    if (History.GetHead()->GetValue().Time <= HitTime) return History.GetHead()->GetValue();

    // ═══ 双指针二分查找 ═══
    auto* Younger = History.GetHead(); // 较新帧
    auto* Older = Younger;              // 较旧帧
    while (Older->GetValue().Time > HitTime)
    {
        if (Older->GetNextNode() == nullptr) break;
        Older = Older->GetNextNode();
        if (Older->GetValue().Time > HitTime) Younger = Older;
    }
    // 此时: Older.Time <= HitTime < Younger.Time

    if (Older->GetValue().Time == HitTime)
        return Older->GetValue();  // 精确匹配

    return InterpBetweenFrames(Older->GetValue(), Younger->GetValue(), HitTime);
}
相关推荐
user20585561518139 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode9 小时前
Redis 在生产项目的使用
前端·后端
LiaCode9 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战9 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
风骏时光牛马9 小时前
# Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例
前端
weedsfly9 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
xiaodaoluanzha9 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端
Csvn9 小时前
Fetch 请求竞态终结者:AbortController 不只是用来"取消"的
前端
阡陌Jony9 小时前
关于前端路由中的参数问题的学习(一): params,query, hash(#)
前端
阡陌Jony9 小时前
缓存相关学习笔记(一):Service Worker 缓存
前端