Example #1
0
    void OtherCommandLogic(EntityBase entity)
    {
        PlayerCommandRecordComponent rc = entity.GetComp <PlayerCommandRecordComponent>();
        //先取服务器缓存
        T cmd = (T)rc.GetServerCache(m_world.FrameCount);

        //没有的话预测一份
        if (cmd == null)
        {
            //Debug.Log("预测输入 id: " + entity.ID + " m_world.FrameCount " + m_world.FrameCount);
            //取最后一次输入缓存,没有的话New一个新的
            if (rc.m_lastInput == null)
            {
                cmd = new T();
            }
            else
            {
                cmd = (T)rc.m_lastInput.DeepCopy();
            }

            cmd.id    = entity.ID;
            cmd.frame = m_world.FrameCount;

            rc.m_forecastInput = cmd;
        }
        else
        {
            //Debug.Log("读取缓存 ");
        }

        rc.m_lastInput = cmd;
        rc.m_inputCache.Add(cmd);

        entity.ChangeComp(cmd);
    }