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); }
private Packet Listener(Packet p, IPEndPoint source) { if (Enabled && p is SetCameraPacket) { SetCameraPacket.CameraBlock camera = (p as SetCameraPacket).Camera; mCore.Update(camera.Position, camera.PositionDelta, new Rotation(camera.LookAt), new Rotation(camera.LookAtDelta)); } return(p); }