private bool CanHandleCommand(ILocalGame game, ReplayCommandCode code) { // Из-за пинга события могут приходить раньше времени, // в этом случае мы не должны запускать событие в неподходящий момент. // бросать нож можно только когда он на земле if (code == ReplayCommandCode.Throw && game.knifeState != KnifeState.Freeze) { return(false); } // бросать нож можно только когда он на земле if (code == ReplayCommandCode.ThrowDebug && game.knifeState != KnifeState.Freeze) { return(false); } // нельзя перезапускать игру во время полёта ножа if (code == ReplayCommandCode.Restart && (game.knifeState == KnifeState.Falling || game.knifeState == KnifeState.Flying)) { return(false); } // изменчть скорость модно только когда нож воткнут в землю if (code == ReplayCommandCode.ChangeMode && game.knifeState != KnifeState.Freeze) { return(false); } return(true); }
public bool ReadNext(out float time, out ReplayCommandCode code) { if (m_position + 4 + 1 > m_data.Length) { time = 0f; code = ReplayCommandCode.None; return(false); } ReadSingle(m_data, ref m_position, out time); code = (ReplayCommandCode)m_data[m_position++]; return(true); }