/****************************************************************************** *< FILE: delegexp.h DESCRIPTION: Export Interface Functionality for Crowd Delegate CREATED BY: Susan Amkraut HISTORY: created December, 1999 *> Copyright (c) Unreal Pictures, Inc. 1999 All Rights Reserved. *******************************************************************************/ #ifndef DELEGEXP_H #define DELEGEXP_H #ifdef BLD_DELEG #define DELEGexport __declspec( dllexport ) #else #define DELEGexport __declspec( dllimport ) #endif #include "max.h" // This is the interface ID for a Delegate Interface #define I_DELEGINTERFACE 0x00100101 // This is the Class ID for Vector Field Objects. #ifndef BLD_DELEG #define DELEG_CLASSID Class_ID(0x40c07baa, 0x245c7fe6) #define CROWD_CLASS_ID Class_ID(0x60144302, 0x43455584) // to avoid selecting a crowd #endif // Sample Code, starting with an INode(node) // // Object *o = node->GetObjectRef(); // if ((o->ClassID() == DELEG_CLASS_ID) // { // // // Get the Delegate Export Interface from the node // IDelegate *Iface = (IDelegate *) o->GetInterface(I_DELEGINTERFACE); // // // Get the delegate's average speed at time t // float AverageSpeed = Iface->GetAverageSpeed(t); // } // // // Release the interface. NOTE that this function is currently inactive under MAX. // //o->ReleaseInterface(I_DELEGINTERFACE,Iface); // } // IDelegate: This class can be returned by calling the method GetInterface() from a Delegate node class IDelegate { public: DELEGexport virtual ~IDelegate() {} DELEGexport virtual BOOL IsComputing() {return FALSE;} DELEGexport virtual BOOL IsConstrainedInZ() {return FALSE;} DELEGexport virtual Point3 GetCurrentPosition() {return Point3(0.0,0.0,0.0);} DELEGexport virtual Point3 GetCurrentVelocity() {return Point3(0.0,0.0,0.0);} DELEGexport virtual Point3 GetPreviousVelocity() {return Point3(0.0,0.0,0.0);} DELEGexport virtual float GetCurrentSpeed() {return 1.0;} DELEGexport virtual float GetAverageSpeed(TimeValue t) {return 1.0;} DELEGexport virtual float GetMaxAccel(TimeValue t){return 1.0;} DELEGexport virtual float GetMaxHeadingVel(TimeValue t) {return 1.0;} DELEGexport virtual float GetMaxHeadingAccel(TimeValue t){return 1.0;} DELEGexport virtual float GetMaxPitchVel(TimeValue t) {return 1.0;} DELEGexport virtual float GetMaxPitchAccel(TimeValue t){return 1.0;} DELEGexport virtual float GetMaxIncline(TimeValue t){return 1.0;} DELEGexport virtual float GetMaxDecline(TimeValue t){return 1.0;} DELEGexport virtual Point3 GetSimStartVelocity(INode *n, TimeValue StartTime) {return Point3(0.0,0.0,0.0);} DELEGexport virtual int GetIndex() {return 0;} DELEGexport virtual BOOL OkToDisplayMyForces() {return 1;} DELEGexport virtual BOOL OkToDisplayMyVelocity() {return 1;} DELEGexport virtual BOOL OkToDisplayMyCogStates() {return 1;} DELEGexport virtual void LineDisplay(Point3& pt1, Point3& pt2, Color clr, BOOL scale) {} DELEGexport virtual void BboxDisplay(Point3& pt1, Point3& pt2, Color clr) {} DELEGexport virtual void SphereDisplay(Point3& pt1, float radius, Color clr) {} DELEGexport virtual void TextDisplay(Point3& pt1, Color clr, TCHAR *str) {} DELEGexport virtual BOOL IsAssignmentActive(int AssignIndex, TimeValue t) {return TRUE;} DELEGexport virtual void ClearBacktracking() {} DELEGexport virtual BOOL NeedsBacktracking() {return FALSE;} DELEGexport virtual void SetBacktracking(int frame) {} DELEGexport virtual int GetRandId() {return 0;} DELEGexport virtual Matrix3 GetTM(INode *node,TimeValue t){return Matrix3();} DELEGexport virtual BOOL ComputingBiped() {return FALSE;} DELEGexport virtual BOOL ReactToMe() {return FALSE;} }; #endif