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); } } }
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); } } }
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; }