Exemple #1
0
        public override void LateTick()
        {
            ReckoningCore.Tick(null);
            ReckoningCore.Move();
            ReckoningCore.Quantize();

            Core.Move();
            Core.Quantize();
            Position = Core.Position;

            if (Player.Team == Team.Spectators)
            {
                Position = new Vector2(Input.TargetX, Input.TargetY);
            }

            {
                var predicted = new SnapshotCharacter();
                var current   = new SnapshotCharacter();

                ReckoningCore.Write(predicted);
                Core.Write(current);

                if (ReckoningTick + Server.TickSpeed * 3 < Server.Tick || !current.Equals(predicted))
                {
                    ReckoningTick = Server.Tick;
                    SendCore.Fill(Core);
                    ReckoningCore.Fill(Core);
                }
            }
        }
Exemple #2
0
        public override void TickDefered()
        {
            ReckoningCore.Tick(false);
            ReckoningCore.Move();
            ReckoningCore.Quantize();

            Core.Move();
            Core.Quantize();
            Position = Core.Position;

            var events = Core.TriggeredEvents;
            var mask   = GameContext.MaskAllExceptOne(Player.ClientId);

            if (events.HasFlag(CoreEvents.GROUND_JUMP))
            {
                GameContext.CreateSound(Position, Sound.PLAYER_JUMP, mask);
            }

            if (events.HasFlag(CoreEvents.HOOK_ATTACH_PLAYER))
            {
                GameContext.CreateSound(Position, Sound.HOOK_ATTACH_PLAYER, GameContext.MaskAll());
            }

            if (events.HasFlag(CoreEvents.HOOK_ATTACH_GROUND))
            {
                GameContext.CreateSound(Position, Sound.HOOK_ATTACH_GROUND, mask);
            }

            if (events.HasFlag(CoreEvents.HOOK_HIT_NOHOOK))
            {
                GameContext.CreateSound(Position, Sound.HOOK_NOATTACH, mask);
            }

            if (Player.Team == Team.SPECTATORS)
            {
                Position = new Vector2(Input.TargetX, Input.TargetY);
            }

            {
                var predicted = new SnapObj_Character();
                var current   = new SnapObj_Character();

                ReckoningCore.Write(predicted);
                Core.Write(current);

                if (ReckoningTick + Server.TickSpeed * 3 < Server.Tick || !predicted.Compare(current))
                {
                    ReckoningTick = Server.Tick;
                    Core.FillTo(SendCore);
                    Core.FillTo(ReckoningCore);
                }
            }
        }
Exemple #3
0
        public override void Init(BasePlayer player, Vector2 spawnPos)
        {
            Player   = player;
            Position = spawnPos;

            IsAlive       = true;
            Health        = 0;
            Armor         = 0;
            EmoteStopTick = -1;
            Emote         = Emote.Normal;

            Core                      = Kernel.Get <BaseCharacterCore>();
            SendCore                  = Kernel.Get <BaseCharacterCore>();
            ReckoningCore             = Kernel.Get <BaseCharacterCore>();
            ReckoningCore.IsPredicted = true;

            Core.Reset();
            Core.Init(GameWorld.WorldCore, GameContext.MapCollision);
            Core.Position = Position;

            var worldCore = new WorldCore(
                GameWorld.WorldCore.CharacterCores.Length,
                Kernel.Get <BaseTuningParams>());

            ReckoningCore.Init(worldCore, GameContext.MapCollision);

            GameContext.CreatePlayerSpawn(spawnPos);
            GameWorld.WorldCore.CharacterCores[player.ClientId] = Core;

            Input           = new SnapshotPlayerInput();
            LatestPrevInput = new SnapshotPlayerInput();
            LatestInput     = new SnapshotPlayerInput();
            LastAction      = -1;

            HitObjects = new List <Entity>();
            NinjaStat  = new NinjaStat();

            ActiveWeapon = Weapon.Hammer;
            LastWeapon   = Weapon.Gun;
            QueuedWeapon = (Weapon)(-1);
            Weapons      = new WeaponStat[(int)Weapon.NumWeapons];
            Weapons[(int)Weapon.Hammer].Got  = true;
            Weapons[(int)Weapon.Hammer].Ammo = -1;

            Destroyed += OnDestroyed;
            Reseted   += OnReseted;
        }