public SetWindowPacket() { HasVariableBlocks = false; //Type = PacketType.SetFollowCamProperties; Header = new Header(); Header.Frequency = PacketFrequency.Low; Header.ID = 431; Header.Reliable = true; Frustum = new SetFrustumPacket.FrustumBlock(); Camera = new SetCameraPacket.CameraBlock(); }
public SetWindowPacket(Matrix4 matrix, SetCameraPacket.CameraBlock camera) : this() { Frustum.ProjectionMatrix = matrix; Camera = camera; }
private SetCameraPacket.CameraBlock MakeCameraBlock(Vector3 position, Vector3 positionDelta, Rotation rotation, Rotation rotationDelta) { Rotation orientationOffset = new Rotation(Frame.Orientation.Pitch, -Frame.Orientation.Yaw); Vector3 lookAt = orientationOffset.LookAtVector * rotation.Quaternion; //Vector3 eyePos = new Vector3(Frame.Core.EyePosition.Y, Frame.Core.EyePosition.X, -Frame.Core.EyePosition.Z); Vector3 eyePos = Frame.Core.EyePosition; eyePos *= rotation.Quaternion; Vector3 offset = Offset * rotation.Quaternion; if (Frame.Core.ControlMode == ControlMode.Absolute) offset += eyePos / 1000f; Vector3 cameraUp = Vector3.UnitZ * rotation.Quaternion; Vector3 up = Vector3.UnitZ; if (orientationOffset.Yaw != 0.0) up = orientationOffset.Yaw < 0.0 ? Vector3.Cross(lookAt, rotation.LookAtVector) : Vector3.Cross(rotation.LookAtVector, lookAt); SetCameraPacket.CameraBlock block = new SetCameraPacket.CameraBlock(); block.Position = position + offset; block.PositionDelta = positionDelta; block.LookAt = lookAt; block.LookAtDelta = rotationDelta.LookAtVector; block.Up = up; block.TickLength = (uint) Frame.Core.TickLength * 1000; return block; }