Пример #1
0
 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();
 }
Пример #2
0
 public SetWindowPacket(Matrix4 matrix, SetCameraPacket.CameraBlock camera)
     : this()
 {
     Frustum.ProjectionMatrix = matrix;
     Camera = camera;
 }
Пример #3
0
        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;
        }