tge/lib/maxsdk70/include/ireagent.h
2017-04-17 06:17:10 -06:00

81 lines
2.7 KiB
C++
Executable File

/**********************************************************************
*<
FILE: IReagent.h
DESCRIPTION: Declares a class of objects which react
CREATED BY: John Hutchinson
HISTORY: Created January 9, 1999
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#pragma once
#include <IAggregation.h>
class IAggregation;
class IGeomImp;
class IValence;
class ValenceDescIterator;
class IHost;
class IReagent
{
public:
//completes the construction process
virtual void InitializeSubstrate(INode* n) = 0;//completes the construction process
virtual IValence* OpenValence() = 0;
virtual void OpenValenceTM(TimeValue t, Matrix3& tm)= 0;
virtual int OpenValenceIndex() = 0;
virtual void CloseValence(IValence* val, bool done = false)= 0;
virtual int NumValenceTypes() = 0;
virtual Class_ID GetValenceClassID(int which) = 0;
//create a valence given a class descriptor and a node(used for its location)
//may create a new instance of this type
virtual IValence* PrepValence(ClassDesc* cd, INode* me, INode* loc) = 0;
//pass back the chemistry/geometry of the reagent viz-a-viz the current reaction
//Thus this excludes any pending reaction results.
//Currently we assumes one reaction at a time. Could pass a valence to identify which.
virtual IGeomImp* ReactionSite() = 0;
};
class IValence
{
public:
enum bondtype {
eStrongBond,//absorb the node
eWeakBond,//don't absorb the node
eTransientBond,//temporary but affect permanaent change to object stack
eTopicalBond};//unused but coneptually a weaker type of transient bonds which just copy node properties
//set up a controller and possibly record subobj hit data from the host
virtual Control* Locate(INode* host, INode *loc, Control* c, Matrix3& oldP, Matrix3& newP) = 0;//may clone the controller
virtual commitlevels Occupy(Object* obj) = 0;
virtual Object* Occupant()=0;
virtual bool Bind(TimeValue t, IGeomImp &complex_geom, Matrix3& tm, Interval iv, IHost* attentivehost = NULL, bool expedite = false) = 0;
virtual commitlevels Validate(TimeValue t, int action, commitlevels current, Matrix3* tm) = 0;
virtual bondtype BondStrength()=0;
virtual void SetOwner(Object* owner)=0;
virtual void SetMaterialBase(int matidx) = 0;
};
/*
class ValenceDescIterator
{
public:
ValenceDescIterator();
~ValenceDescIterator();
Class_ID First();
virtual bool IsDone();
Class_ID Next();
private:
int m_current;
};
*/
//mechanism to test compatibility needs to be done at the class descriptor level.
//Since this is what gets enumerated at the point prio to the valence getting created.