Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 4
0
        private void HandleRestart(ILocalGame game)
        {
            if (!m_reader.ReadRestart())
            {
                RaiseInvalidStream("Failed to read restart");
                return;
            }

            game.Restart();
        }
Exemplo n.º 5
0
        private void HandleThrow(ILocalGame game)
        {
            float force;

            if (!m_reader.ReadThrow(out force))
            {
                RaiseInvalidStream("Failed to read throw");
                return;
            }

            game.Throw(force);
        }
Exemplo n.º 6
0
        private void HandleChangeMode(ILocalGame game)
        {
            KnifeMode knifeMode;

            if (!m_reader.ReadChangeMode(out knifeMode))
            {
                RaiseInvalidStream("Failed to read change speed");
                return;
            }

            game.SetKnifeMode(knifeMode);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
 public virtual void PostUpdate(ILocalGame game, float deltaTime)
 {
 }
Exemplo n.º 12
0
 public virtual void PostKnifeThrowSuccess(ILocalGame game, ThrowInfo info)
 {
 }
Exemplo n.º 13
0
 public virtual void PostKnifeThrowing(ILocalGame game)
 {
 }
Exemplo n.º 14
0
 public virtual void PostKnifeThrowFail(ILocalGame game, FailInfo failInfo)
 {
 }
Exemplo n.º 15
0
 public virtual void PostKnifeStateChnaged(ILocalGame game, KnifeState knifeState)
 {
 }
Exemplo n.º 16
0
 public virtual void PostKnifeRestart(ILocalGame game)
 {
 }
Exemplo n.º 17
0
 public virtual void PostKnifeModeChnaged(ILocalGame game, KnifeMode knifeMode)
 {
 }
Exemplo n.º 18
0
 public virtual void PostKnifeFlip(ILocalGame game)
 {
 }
Exemplo n.º 19
0
        public override void PostKnifeThrowFail(ILocalGame game, FailInfo failInfo)
        {
            base.PostKnifeThrowFail(game, failInfo);

            m_timeLeftToRestart = m_restartTimeout;
        }
Exemplo n.º 20
0
 public virtual bool PreThrow(ILocalGame game, float force)
 {
     return(true);
 }
Exemplo n.º 21
0
 public virtual bool PreChangeKnifeMode(ILocalGame game, KnifeMode knifeMode)
 {
     return(true);
 }
Exemplo n.º 22
0
 public virtual bool PreRestart(ILocalGame game)
 {
     return(true);
 }
Exemplo n.º 23
0
        public override bool PreRestart(ILocalGame game)
        {
            m_writer.WriteRestart(game.time);

            return(base.PreRestart(game));
        }
Exemplo n.º 24
0
 public virtual bool PreUpdate(ILocalGame game, float deltaTime)
 {
     return(true);
 }
Exemplo n.º 25
0
        public override bool PreChangeKnifeMode(ILocalGame game, KnifeMode knifeMode)
        {
            m_writer.WriteChangeMode(game.time, knifeMode);

            return(base.PreChangeKnifeMode(game, knifeMode));
        }