public static ReusableList <IUserCmd> FromProtoBuf(UserCmdMessage message) { ReusableList <IUserCmd> list = ReusableList <IUserCmd> .Allocate(); var count = message.UserCmdList.Count; for (int i = 0; i < count; i++) { var item = message.UserCmdList[i]; UserCmd cmd = UserCmd.Allocate(); cmd.RenderTime = item.RenderTime; cmd.FrameInterval = item.FrameInterval; cmd.MoveHorizontal = item.MoveHorizontal; cmd.MoveVertical = item.MoveVertical; cmd.MoveUpDown = item.MoveUpDown; cmd.Seq = item.Seq; cmd.DeltaPitch = item.DeltaPitch; cmd.DeltaYaw = item.DeltaYaw; cmd.Buttons = item.Buttons; cmd.BeState = item.BeState; cmd.SwitchNumber = item.SwitchNumber; cmd.ChangedSeat = item.ChangedSeat; cmd.ChangeChannel = item.ChangeChannel; cmd.SnapshotId = item.SnapshotId; cmd.CurWeapon = item.CurWeapon; cmd.PickUpEquip = item.PickUpEquip; cmd.UseEntityId = item.UseVehicleId; cmd.UseVehicleSeat = item.UseVehicleSeat; cmd.UseType = item.UseType; cmd.BagIndex = item.BagIndex; list.Value.Add(cmd); } return(list); }
public object Deserialize(Stream inStream) { ReusableList <UpdateLatestPacakge> list = ReusableList <UpdateLatestPacakge> .Allocate(); BinaryReader binaryReader = new BinaryReader(inStream); int count = binaryReader.ReadByte(); for (int i = 0; i < count; i++) { UpdateLatestPacakge pacakge = UpdateLatestPacakge.Allocate(); pacakge.Head.Deserialize(binaryReader); var seq = pacakge.Head.UserCmdSeq; var bodyLenght = pacakge.Head.BodyLength; if (MessagePool.GetPackageBySeq(seq) == null) { var baseSeq = pacakge.Head.BaseUserCmdSeq; var old = MessagePool.GetPackageBySeq(baseSeq); if (old != null) { pacakge.CopyUpdateComponentsFrom(old.UpdateComponents); } for (int c = 0; c < pacakge.Head.ComponentCount; c++) { var opType = (ComponentReplicateOperationType)binaryReader.ReadByte(); var patch = CreateEmptyComponentPatch(opType); patch.DeSerialize(binaryReader, _componentSerializerManager); ApplyPatchTo(patch, pacakge.UpdateComponents); patch.ReleaseReference(); } if (pacakge.Head.ComponentCount == pacakge.UpdateComponents.Count) { MessagePool.AddMessage(pacakge); pacakge.AcquireReference(); list.Value.Add(pacakge); } else { _logger.WarnFormat("Skip package {0} with length {1} baseSeq;{2}", pacakge.Head.UserCmdSeq, pacakge.Head.BodyLength, pacakge.Head.BaseUserCmdSeq); } } else { _logger.DebugFormat("Skip package {0} with length {1}", pacakge.Head.UserCmdSeq, pacakge.Head.BodyLength); binaryReader.BaseStream.Seek(bodyLenght, SeekOrigin.Current); } pacakge.ReleaseReference(); } return(list); }
// a list of latest 'SendCount' item, from newest to oldest public ReusableList <TCmd> CreateLatestList() { var rc = ReusableList <TCmd> .Allocate(); int count = 0; foreach (var cmd in _userCmdList) { rc.Value.Add(cmd); count++; if (count >= SendCount) { break; } } return(rc); }
public static ReusableList <IVehicleCmd> FromProtoBuf(VehicleCmdMessage message) { ReusableList <IVehicleCmd> list = ReusableList <IVehicleCmd> .Allocate(); var count = message.VehicleCmdList.Count; for (int i = 0; i < count; ++i) { var item = message.VehicleCmdList[i]; var cmd = VehicleCmd.Allocate(); { cmd.Seq = item.Seq; cmd.PlayerId = item.PlayerId; cmd.VehicleId = item.VehicleId; cmd.MoveHorizontal = item.MoveHorizontal; cmd.MoveVertical = item.MoveVertical; cmd.IsSpeedup = item.IsSpeedup; cmd.IsHandbrake = item.IsHandbrake; cmd.IsHornOn = item.IsHornOn; cmd.IsStunt = item.IsStunt; cmd.IsLeftShift = item.IsLeftShift; cmd.IsRightShift = item.IsRightShift; cmd.ExecuteTime = item.ExecuteTime; cmd.CmdSeq = item.CmdSeq; cmd.Body.Position = Vector3Converter.ProtobufToUnityVector3(item.Body.Position).ShiftedToFixedVector3(); cmd.Body.Rotation = Vector3Converter.ProtobufToUnityQuaternion(item.Body.Rotation); // cmd.Body.Body2WorldPosition = Vector3Converter.ProtobufToUnityVector3(item.Body.Body2WorldPosition); // cmd.Body.Body2WorldRotation = Vector3Converter.ProtobufToUnityQuaternion(item.Body.Body2WorldRotation); cmd.Body.LinearVelocity = Vector3Converter.ProtobufToUnityVector3(item.Body.LinearVelocity); cmd.Body.AngularVelocity = Vector3Converter.ProtobufToUnityVector3(item.Body.AngularVelocity); // cmd.Body.ContactCount = item.Body.ContactCount; cmd.Body.Crashed = item.Body.Crashed; cmd.Body.IsSleeping = item.Body.IsSleeping; var carSteerableCount = item.CarSteerables.Count; for (int j = 0; j < carSteerableCount; ++j) { var steerable = cmd.Steerables[j].Car; var steerableItem = item.CarSteerables[j]; steerable.Position = Vector3Converter.ProtobufToUnityVector3(steerableItem.Position); steerable.Rotation = Vector3Converter.ProtobufToUnityQuaternion(steerableItem.Rotation); steerable.Angle = steerableItem.Angle; // steerable.Grounded = steerableItem.Grounded; // steerable.GroundedOnTerrain = steerableItem.GroundedOnTerrain; // steerable.ColliderSteerAngle = steerableItem.ColliderSteerAngle; // steerable.SteerAngle = steerableItem.SteerAngle; // steerable.MotorTorque = steerableItem.MotorTorque; // // steerable.SuspensionDistance = steerableItem.SuspensionDistance; // steerable.SuspensionSpring = steerableItem.SuspensionSpring; // steerable.SuspensionTargetPosition = steerableItem.SuspensionTargetPosition; // // steerable.SprungMass = steerableItem.SprungMass; // steerable.ForceDistance = steerableItem.ForceDistance; // // steerable.AngularVelocity = steerableItem.AngularVelocity; // steerable.AngularPosition = steerableItem.AngularPosition; // steerable.RotationAngle = steerableItem.RotationAngle; // // steerable.RotationSpeed = steerableItem.RotationSpeed; // steerable.CorrectedRotationSpeed = steerableItem.CorrectedRotationSpeed; // steerable.Jounce = steerableItem.Jounce; // // steerable.TireLowSideSpeedTimers = steerableItem.TireLowSideSpeedTimers; // steerable.TireLowforwardSpeedTimers = steerableItem.TireLowforwardSpeedTimers; // // steerable.Grounded = steerableItem.Grounded; // steerable.Point = Vector3Converter.ProtobufToUnityVector3(steerableItem.Point); // steerable.Normal = Vector3Converter.ProtobufToUnityVector3(steerableItem.Normal); // steerable.ForwardDir = Vector3Converter.ProtobufToUnityVector3(steerableItem.ForwardDir); // steerable.SidewaysDir = Vector3Converter.ProtobufToUnityVector3(steerableItem.SidewaysDir); // steerable.Force = steerableItem.Force; // // steerable.ForwardSlip = steerableItem.ForwardSlip; // steerable.SidewaysSlip = steerableItem.SidewaysSlip; cmd.Steerables[j].Car = steerable; } var shipSteerableCount = item.ShipSteerables.Count; for (int j = 0; j < shipSteerableCount; ++j) { var steerable = cmd.Steerables[j].Ship; var steerableItem = item.ShipSteerables[j]; steerable.Angle = steerableItem.Angle; // steerableItem.Rpm = steerableItem.Rpm; // steerableItem.SpinVelocity = steerableItem.SpinVelocity; // steerableItem.Submerged = steerableItem.Submerged; cmd.Steerables[j].Ship = steerable; } if (carSteerableCount > shipSteerableCount) { cmd.VehicleType = (int)EVehicleType.Car; cmd.SteerableCount = carSteerableCount; } else { cmd.VehicleType = (int)EVehicleType.Ship; cmd.SteerableCount = shipSteerableCount; } }; list.Value.Add(cmd); } return(list); }