47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using FishNet.Serializing;
 | |
| using FishNet.Utility.Extension;
 | |
| using System;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace FishNet.Managing.Timing
 | |
| {
 | |
| 
 | |
|     public struct PreciseTick
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// The current tick.
 | |
|         /// </summary>
 | |
|         public uint Tick;
 | |
|         /// <summary>
 | |
|         /// Percentage into the next tick.
 | |
|         /// </summary>
 | |
|         public double Percent;
 | |
| 
 | |
|         public PreciseTick(uint tick, double percent)
 | |
|         {
 | |
|             Tick = tick;
 | |
|             Percent = percent;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static class PreciseTickSerializer
 | |
|     {
 | |
|         public static void WritePreciseTick(this Writer writer, PreciseTick value)
 | |
|         {
 | |
|             writer.WriteUInt32(value.Tick, AutoPackType.Unpacked);
 | |
|             /* No reason percent should exist beyond these values, but better to be safe.
 | |
|              * There is also no double clamp in Unity so... */
 | |
|             double percent = MathFN.ClampDouble(value.Percent, 0d, 1f);
 | |
|             byte percentByte = (byte)(percent * 100);
 | |
|             writer.WriteByte(percentByte);
 | |
|         }
 | |
| 
 | |
|         public static PreciseTick ReadPreciseTick(this Reader reader)
 | |
|         {
 | |
|             uint tick = reader.ReadUInt32(AutoPackType.Unpacked);
 | |
|             byte percentByte = reader.ReadByte();
 | |
|             double percent = MathFN.ClampDouble((percentByte / 100f), 0d, 1d);
 | |
|             return new PreciseTick(tick, percent);
 | |
|         }
 | |
|     }
 | |
| } |