/********************************************************************** *< FILE: IGameControl.h DESCRIPTION: Controller interfaces for IGame CREATED BY: Neil Hazzard, Discreet HISTORY: created 02/02/02 IGame Version: 1.122 *> Copyright (c) 2002, All Rights Reserved. **********************************************************************/ /*!\file IGameControl.h \brief High level access to MAX's controllers, including Biped and constraints and list controllers High level access to MAX's controllers, including Biped and constraints and list controllers Please note that Point4 controller access is only available for 3ds max 6 and above */ #ifndef __IGAMECONTROL__H #define __IGAMECONTROL__H #pragma once #include "max.h" #include "ISTDPLUG.H" #include "IGameProperty.h" #include "IConversionManager.h" class IGameNode; //! An enum of basic controller types used by IGame /*! These controllers types are used to define the type of controller being queried. */ enum IGameControlType{ IGAME_POS, /*! IGameKeyTab \brief A Tab of IGameKey. Uses Max's Template class Tab */ typedef Tab IGameKeyTab; //!A simple access class for controllers. /*! IGameControl provides a simplified access to the various key frame controllers used throughout max. In max a controller needs to be queried for the key interface and then its class ID checked before casting to the appropriate Key class. This class provide the developer with all the keys based on the key type being asked for. As the game engine may only support certain type of max controllers it is far more efficient for a developer to ask IGame for all the Bezier Postion keys then to check with max for the controller type. This class also provides direct support for Euler Rotation controllers. The developer can use GetControlType to see if the rotation is Euler and can then can use IGAME_EULER_X in the appropriate control access type to retrieve the keys. \br In 3ds max some controllers such as TCB, Linear and Bezier support direct access to their keys. Other controllers are more private and usually base them selves on a float or Point3 controller. If there is no direct access then sampling is the easiest choice. IGame supports two types - Full and Quick. Full samples across the full animation range, whilst Quick only samples where keys are found. The limitation of Quick, is that it does not support IGAME_TM or controllers that do not set keys. \sa Max's Template class Tab \sa GMatrix \sa IGameProperty */ class IGameControl { public: enum MaxControlType{ IGAME_UNKNOWN, /*!