服务端倒带(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);
}
相关推荐
CS创新实验室7 分钟前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
IMPYLH1 小时前
HTML 的 <data> 元素
前端·html
西门吹-禅1 小时前
java springboot N+1问题
java·开发语言·spring boot
YHHLAI1 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
DLYSB_1 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19872 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
海石2 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode
AI小码2 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
海石2 小时前
1400分的dp汗流浃背之【交替子数组计数】
算法·leetcode
奋发向前wcx2 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先