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); }
private void HandleReplayCommand(ILocalGame game) { float time; ReplayCommandCode code; if (!m_reader.ReadNext(out time, out code)) { RaiseInvalidStream("Failed to read command"); return; } switch (code) { case ReplayCommandCode.Throw: HandleThrow(game); break; case ReplayCommandCode.ThrowDebug: HandleThrowDebug(game); break; case ReplayCommandCode.Restart: HandleRestart(game); break; case ReplayCommandCode.ChangeMode: HandleChangeMode(game); break; default: RaiseInvalidStream("Invalid command code"); break; } }
public override bool PreRestart(ILocalGame game) { if (restart != null) { restart(); } return(base.PreRestart(game)); }
private void HandleRestart(ILocalGame game) { if (!m_reader.ReadRestart()) { RaiseInvalidStream("Failed to read restart"); return; } game.Restart(); }
private void HandleThrow(ILocalGame game) { float force; if (!m_reader.ReadThrow(out force)) { RaiseInvalidStream("Failed to read throw"); return; } game.Throw(force); }
private void HandleChangeMode(ILocalGame game) { KnifeMode knifeMode; if (!m_reader.ReadChangeMode(out knifeMode)) { RaiseInvalidStream("Failed to read change speed"); return; } game.SetKnifeMode(knifeMode); }
public override bool PreThrow(ILocalGame game, float force) { if (m_debug) { m_writer.WriteThrowDebug(game.time, force, game.knifeRotation); } else { m_writer.WriteThrow(game.time, force); } return(true); }
public override bool PreUpdate(ILocalGame game, float deltaTime) { if (m_timeLeftToRestart.HasValue) { m_timeLeftToRestart -= deltaTime; if (m_timeLeftToRestart <= 0) { m_timeLeftToRestart = null; game.Restart(); } } return(base.PreUpdate(game, deltaTime)); }
public override bool PreUpdate(ILocalGame game, float deltaTime) { float time; ReplayCommandCode code; if (m_reader.PeekNext(out time, out code) && time <= game.time) { if (CanHandleCommand(game, code)) { HandleReplayCommand(game); } } return(true); }
private void HandleThrowDebug(ILocalGame game) { float force2, startRotation; if (!m_reader.ReadThrowDebug(out force2, out startRotation)) { RaiseInvalidStream("Failed to read throw debug"); return; } if (game.knifeRotation != startRotation) { RaiseGameOutOfSync(game.knifeRotation - startRotation); } game.Throw(force2); }
public virtual void PostUpdate(ILocalGame game, float deltaTime) { }
public virtual void PostKnifeThrowSuccess(ILocalGame game, ThrowInfo info) { }
public virtual void PostKnifeThrowing(ILocalGame game) { }
public virtual void PostKnifeThrowFail(ILocalGame game, FailInfo failInfo) { }
public virtual void PostKnifeStateChnaged(ILocalGame game, KnifeState knifeState) { }
public virtual void PostKnifeRestart(ILocalGame game) { }
public virtual void PostKnifeModeChnaged(ILocalGame game, KnifeMode knifeMode) { }
public virtual void PostKnifeFlip(ILocalGame game) { }
public override void PostKnifeThrowFail(ILocalGame game, FailInfo failInfo) { base.PostKnifeThrowFail(game, failInfo); m_timeLeftToRestart = m_restartTimeout; }
public virtual bool PreThrow(ILocalGame game, float force) { return(true); }
public virtual bool PreChangeKnifeMode(ILocalGame game, KnifeMode knifeMode) { return(true); }
public virtual bool PreRestart(ILocalGame game) { return(true); }
public override bool PreRestart(ILocalGame game) { m_writer.WriteRestart(game.time); return(base.PreRestart(game)); }
public virtual bool PreUpdate(ILocalGame game, float deltaTime) { return(true); }
public override bool PreChangeKnifeMode(ILocalGame game, KnifeMode knifeMode) { m_writer.WriteChangeMode(game.time, knifeMode); return(base.PreChangeKnifeMode(game, knifeMode)); }