protected override void ClientWrite(VRage.Library.Collections.BitStream stream) { base.ClientWrite(stream); stream.WriteBool(m_character != null); if (m_character != null) { var physGroup = MyExternalReplicable.FindByObject(m_character).FindStateGroup<MyCharacterPhysicsStateGroup>(); long? supportId = null; if (physGroup != null) { physGroup.SetSupport(physGroup.FindSupportDelegate()); supportId = physGroup.GetSupportId(); } stream.WriteBool(supportId.HasValue); if (supportId.HasValue) { stream.WriteInt64(supportId.Value); } Vector3 position = m_character.MoveIndicator; stream.WriteHalf(position.X); stream.WriteHalf(position.Y); stream.WriteHalf(position.Z); Vector2 rotate = m_character.RotationIndicator; stream.WriteFloat(rotate.X); stream.WriteFloat(rotate.Y); stream.WriteFloat(m_character.RollIndicator); // Movement state, 2B stream.WriteUInt16((ushort)m_character.GetNetworkMovementState()); // Movement flag. stream.WriteUInt16((ushort)m_character.PreviousMovementFlags); // Flags, 6 bits bool hasJetpack = m_character.JetpackComp != null; stream.WriteBool(hasJetpack ? m_character.JetpackComp.TurnedOn : false); stream.WriteBool(hasJetpack ? m_character.JetpackComp.DampenersTurnedOn : false); stream.WriteBool(m_character.LightEnabled); // TODO: Remove stream.WriteBool(m_character.ZoomMode == MyZoomModeEnum.IronSight); stream.WriteBool(m_character.RadioBroadcaster.WantsToBeEnabled); // TODO: Remove stream.WriteBool(m_character.TargetFromCamera); stream.WriteFloat(m_character.HeadLocalXAngle); stream.WriteFloat(m_character.HeadLocalYAngle); if ((hasJetpack && m_character.JetpackComp.TurnedOn) == false) { MatrixD matrix = m_character.WorldMatrix; stream.WriteQuaternionNorm(Quaternion.CreateFromForwardUp(matrix.Forward, matrix.Up)); } } }
protected virtual void ClientWrite(VRage.Library.Collections.BitStream stream, EndpointId forClient, uint timestamp, int maxBitPosition) { MatrixD matrix = Entity.WorldMatrix; stream.WriteQuaternionNorm(Quaternion.CreateFromForwardUp(matrix.Forward, matrix.Up)); stream.Write(matrix.Translation); }
void ServerWrite(VRage.Library.Collections.BitStream stream, ulong clientId) { stream.WriteUInt32(m_serverClientData[clientId]); var matrix = Entity.WorldMatrix; stream.Write(matrix.Translation); stream.WriteQuaternionNorm(Quaternion.CreateFromForwardUp(matrix.Forward, matrix.Up)); //HalfVector3 linear = Entity.Physics != null ? Vector3.Round(Entity.Physics.LinearVelocity * MyEntityPhysicsStateGroup.EffectiveSimulationRatio, MyEntityPhysicsStateGroup.NUM_DECIMAL_PRECISION) : Vector3.Zero; Vector3 linear = Entity.Physics != null ? Entity.Physics.LinearVelocity * MyEntityPhysicsStateGroup.EffectiveSimulationRatio : Vector3.Zero; stream.Write(linear); Vector3 angular = Entity.Physics != null ? Entity.Physics.AngularVelocity * MyEntityPhysicsStateGroup.EffectiveSimulationRatio : Vector3.Zero; stream.Write(angular); m_clientUpdateFlag[clientId] = false; CustomServerWrite(m_serverClientData[clientId], stream); }