/// <summary> /// Handles mouse scroll wheel. This camera zooms based on mouse scrolling /// </summary> /// <param name="distance">Amount mouse scroll wheel has moved</param> private void HandleMouseScroll(int distance) { if (distance > 0) { MsgCameraZoomIn camZoomMsg = ObjectPool.Aquire <MsgCameraZoomIn>(); camZoomMsg.UniqueTarget = this.parentEntity.UniqueID; this.parentEntity.Game.SendMessage(camZoomMsg); } else { MsgCameraZoomOut camZoomMsg = ObjectPool.Aquire <MsgCameraZoomOut>(); camZoomMsg.UniqueTarget = this.parentEntity.UniqueID; this.parentEntity.Game.SendMessage(camZoomMsg); } }
/// <summary> /// Handles a message sent to this component. /// </summary> /// <param name="message">Message to be handled</param> /// <returns>True, if handled, otherwise false</returns> /// <exception cref="ArgumentException">Thrown if a <see cref="MessageType"/> is not handled properly."/></exception> public override bool ExecuteMessage(IMessage message) { switch (message.Type) { case MessageType.CameraZoomIn: { MsgCameraZoomIn zoomMsg = message as MsgCameraZoomIn; message.TypeCheck(zoomMsg); ZoomPerspectiveIn(); } return(true); case MessageType.CameraZoomOut: { MsgCameraZoomOut zoomMsg = message as MsgCameraZoomOut; message.TypeCheck(zoomMsg); ZoomPerspectiveOut(); } return(true); case MessageType.GetCameraValues: { MsgCameraGetValues msgCamValues = message as MsgCameraGetValues; message.TypeCheck(msgCamValues); msgCamValues.AspectRatio = this.aspectRatio; msgCamValues.FOV = this.fov; msgCamValues.NearPlane = this.nearPlane; msgCamValues.FarPlane = this.farPlane; msgCamValues.ViewMatrix = this.viewMatrix; } return(true); case MessageType.CameraGetViewMatrix: { MsgGetViewMatrix getViewMsg = message as MsgGetViewMatrix; message.TypeCheck(getViewMsg); getViewMsg.ViewMatrix = this.viewMatrix; } return(true); case MessageType.CameraGetProjectionMatrix: { MsgGetProjectionMatrix getProjMsg = message as MsgGetProjectionMatrix; message.TypeCheck(getProjMsg); getProjMsg.ProjectionMatrix = this.projectionMatrix; } return(true); case MessageType.GraphicsSettingsChanged: { if (this.lockAspectRatioToViewport) { this.aspectRatio = this.parentEntity.Game.GraphicsDevice.Viewport.AspectRatio; if (this.aspectRatio < float.Epsilon) { throw new ArgumentOutOfRangeException("aspectRatio cannot be zero or a negative value"); } this.UpdateProjectionMatrix(); } } return(true); default: return(false); } }