123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef CAMERA_COMPONENT_H
- #define CAMERA_COMPONENT_H
- #ifndef COMPONENT_H
- #include "T3D/components/component.h"
- #endif
- #ifndef _SCENERENDERSTATE_H_
- #include "scene/sceneRenderState.h"
- #endif
- #ifndef _MBOX_H_
- #include "math/mBox.h"
- #endif
- #ifndef ENTITY_H
- #include "T3D/entity.h"
- #endif
- #ifndef CORE_INTERFACES_H
- #include "T3D/components/coreInterfaces.h"
- #endif
- class SceneRenderState;
- struct CameraScopeQuery;
- //////////////////////////////////////////////////////////////////////////
- ///
- ///
- //////////////////////////////////////////////////////////////////////////
- class CameraComponent : public Component, public CameraInterface
- {
- typedef Component Parent;
- F32 mCameraFov; ///< The camera vertical FOV in degrees.
- Point2F mClientScreen; ///< The dimensions of the client's screen. Used to calculate the aspect ratio.
- F32 mCameraDefaultFov; ///< Default vertical FOV in degrees.
- F32 mCameraMinFov; ///< Min vertical FOV allowed in degrees.
- F32 mCameraMaxFov; ///< Max vertical FOV allowed in degrees.
- protected:
- Point3F mPosOffset;
- RotationF mRotOffset;
- StringTableEntry mTargetNode;
- S32 mTargetNodeIdx;
- bool mUseParentTransform;
- enum
- {
- FOVMask = Parent::NextFreeMask,
- OffsetMask = Parent::NextFreeMask << 1,
- NextFreeMask = Parent::NextFreeMask << 2,
- };
- public:
- CameraComponent();
- virtual ~CameraComponent();
- DECLARE_CONOBJECT(CameraComponent);
- virtual bool onAdd();
- virtual void onRemove();
- static void initPersistFields();
- static bool _setCameraFov(void *object, const char *index, const char *data);
- virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream);
- virtual void unpackUpdate(NetConnection *con, BitStream *stream);
- static bool _setNode(void *object, const char *index, const char *data);
- static bool _setPosOffset(void *object, const char *index, const char *data);
- static bool _setRotOffset(void *object, const char *index, const char *data);
- void setRotOffset(RotationF rot)
- {
- mRotOffset = rot;
- setMaskBits(OffsetMask);
- }
- RotationF getRotOffset()
- {
- return mRotOffset;
- }
- Point3F getPosOffset()
- {
- return mPosOffset;
- }
- /// Gets the minimum viewing distance, maximum viewing distance, camera offsetand rotation
- /// for this object, if the world were to be viewed through its eyes
- /// @param min Minimum viewing distance
- /// @param max Maximum viewing distance
- /// @param offset Offset of the camera from the origin in local space
- /// @param rot Rotation matrix
- virtual void getCameraParameters(F32 *min, F32* max, Point3F* offset, MatrixF* rot);
- /// Gets the camera to world space transform matrix
- /// @todo Find out what pos does
- /// @param pos TODO: Find out what this does
- /// @param mat Camera transform (out)
- virtual bool getCameraTransform(F32* pos, MatrixF* mat);
- /// Returns the vertical field of view in degrees for
- /// this object if used as a camera.
- virtual F32 getCameraFov() { return mCameraFov; }
- /// Returns the default vertical field of view in degrees
- /// if this object is used as a camera.
- virtual F32 getDefaultCameraFov() { return mCameraDefaultFov; }
- /// Sets the vertical field of view in degrees for this
- /// object if used as a camera.
- /// @param yfov The vertical FOV in degrees to test.
- virtual void setCameraFov(F32 fov);
- /// Returns true if the vertical FOV in degrees is within
- /// allowable parameters of the datablock.
- /// @param yfov The vertical FOV in degrees to test.
- /// @see ShapeBaseData::cameraMinFov
- /// @see ShapeBaseData::cameraMaxFov
- virtual bool isValidCameraFov(F32 fov);
- /// @}
- virtual Frustum getFrustum();
- /// Control object scoping
- void onCameraScopeQuery(NetConnection *cr, CameraScopeQuery *camInfo);
- void setForwardVector(VectorF newForward, VectorF upVector = VectorF::Zero);
- void setPosition(Point3F newPos);
- void setRotation(RotationF newRot);
- protected:
- DECLARE_CALLBACK(F32, validateCameraFov, (F32 fov));
- };
- #endif // CAMERA_BEHAVIOR_H
|