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