Files
firestorm/Gameleap/code/mw4/Tools/3DSPlugins/MaxControls/ExpCtrl.h
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

306 lines
9.9 KiB
C++

#ifndef __EXPCTRL__H
#define __EXPCTRL__H
#include "ctrl.h"
#include "units.h"
#include "exprlib.h"
#define EXPR_POS_CONTROL_CNAME GetString(IDS_DB_POSITION_EXPR)
#define EXPR_P3_CONTROL_CNAME GetString(IDS_DB_POINT3_EXPR)
#define EXPR_FLOAT_CONTROL_CNAME GetString(IDS_DB_FLOAT_EXPR)
#define EXPR_SCALE_CONTROL_CNAME GetString(IDS_DB_SCALE_EXPR)
#define EXPR_ROT_CONTROL_CNAME GetString(IDS_DB_ROTATION_EXPR)
#define EXPR_TICKS 0
#define EXPR_SECS 1
#define EXPR_FRAMES 2
#define EXPR_NTIME 3
class ExprControl;
// for the debug floater window
class ExprDebug : public TimeChangeCallback {
public:
HWND hWnd;
ExprControl *ec;
TimeValue t;
static int winX, winY;
ExprDebug(HWND hParent, ExprControl *exprControl);
~ExprDebug();
void Invalidate();
void SetTime(TimeValue tm) { t = tm; }
void Update();
void Init(HWND hWnd);
void TimeChanged(TimeValue t) { SetTime(t); Update(); }
};
// scalar variables
class SVar {
public:
TSTR name;
int regNum; // register number variable is assigned to
int refID; // < 0 means constant
float val; // value, if constant
int subNum;
int offset; // tick offset
};
class VVar {
public:
TSTR name;
int regNum; // reg num this var is assigned to
int refID; // < 0 means constant
Point3 val; // value, if const
int subNum;
int offset; // tick offset
};
MakeTab(SVar);
MakeTab(VVar);
class VarRef {
public:
VarRef() { client = NULL; refCt = 0; }
VarRef(ReferenceTarget *c) { client = c; refCt = 1; }
ReferenceTarget *client;
int refCt;
};
MakeTab(VarRef);
class ExprControl : public StdControl
{
public:
int type;
Expr expr;
int timeSlots[4];
int sRegCt;
int vRegCt;
int curIndex;
Point3 curPosVal;
float curFloatVal;
Interval ivalid;
Interval range;
HWND hParams;
IObjParam * ip;
SVarTab sVars;
VVarTab vVars;
VarRefTab refTab;
TSTR desc;
HFONT hFixedFont;
HWND hDlg;
ExprDebug *edbg;
static int winX, winY;
void updRegCt(int val, int type);
BOOL dfnVar(int type, TCHAR *buf, int slot, int offset);
int getVarCount(int type) { return type == SCALAR_VAR ? sVars.Count() : vVars.Count(); }
TCHAR * getVarName(int type, int i);
int getVarOffset(int type, int i);
int getRegNum(int type, int i);
float getScalarValue(int i);
Point3 getVectorValue(int i);
BOOL assignScalarValue(int i, float val);
BOOL assignVectorValue(int i, Point3 &val);
BOOL assignController(int type, int i, ReferenceTarget *client, int subNum);
void deleteAllVars();
ExprControl(int type, ExprControl &ctrl);
ExprControl(int type, BOOL loading);
~ExprControl();
// Animatable methods
int TrackParamsType() { return TRACKPARAMS_WHOLE; }
void DeleteThis() { delete this; }
int IsKeyable() { return 0; }
BOOL IsAnimated() {return TRUE;}
Interval GetTimeRange(DWORD flags) { return range; }
void EditTimeRange(Interval range,DWORD flags);
void Hold();
void MapKeys( TimeMap *map, DWORD flags );
void BeginEditParams( IObjParam *ip, ULONG flags,Animatable *prev );
void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next );
void EditTrackParams(
TimeValue t, // The horizontal position of where the user right clicked.
ParamDimensionBase *dim,
TCHAR *pname,
HWND hParent,
IObjParam *ip,
DWORD flags);
// Reference methods
int NumRefs() { return StdControl::NumRefs() + refTab.Count(); }
ReferenceTarget* GetReference(int i);
void SetReference(int i, RefTargetHandle rtarg);
RefResult NotifyRefChanged(Interval, RefTargetHandle, PartID&, RefMessage);
void RefDeleted();
IOResult Save(ISave *isave);
IOResult Load(ILoad *iload);
// Control methods
void Copy(Control *from);
RefTargetHandle Clone(RemapDir& remap=NoRemap()) {
ExprControl *ctrl = new ExprControl(this->type, *this);
CloneControl(ctrl,remap);
return ctrl;
}
BOOL IsLeaf() { return TRUE; }
void GetValueLocalTime(TimeValue t, void *val, Interval &valid, GetSetMethod method=CTRL_ABSOLUTE);
void SetValueLocalTime(TimeValue t, void *val, int commit, GetSetMethod method) {}
void Extrapolate(Interval range,TimeValue t,void *val,Interval &valid,int type);
void *CreateTempValue();
void DeleteTempValue(void *val);
void ApplyValue(void *val, void *delta);
void MultiplyValue(void *val, float m);
void GetAbsoluteControlValue(INode *node,TimeValue t,Point3 *pt,Interval &iv);
};
class ExprPosControl : public ExprControl
{
public:
ExprPosControl(ExprPosControl &ctrl) : ExprControl(EXPR_POS_CONTROL_CLASS_ID, ctrl) {}
ExprPosControl(BOOL loading=FALSE) : ExprControl(EXPR_POS_CONTROL_CLASS_ID, loading) {}
~ExprPosControl() {}
RefTargetHandle Clone(RemapDir& remap=NoRemap()) { return(new ExprPosControl(*this)); }
void GetClassName(TSTR& s) { s = EXPR_POS_CONTROL_CNAME; }
Class_ID ClassID() { return Class_ID(EXPR_POS_CONTROL_CLASS_ID,0); }
SClass_ID SuperClassID() { return CTRL_POSITION_CLASS_ID; }
};
class ExprP3Control : public ExprControl
{
public:
ExprP3Control(ExprP3Control &ctrl) : ExprControl(EXPR_P3_CONTROL_CLASS_ID, ctrl) {}
ExprP3Control(BOOL loading=FALSE) : ExprControl(EXPR_P3_CONTROL_CLASS_ID, loading) {}
~ExprP3Control() {}
RefTargetHandle Clone(RemapDir& remap=NoRemap()) { return(new ExprP3Control(*this)); }
void GetClassName(TSTR& s) { s = EXPR_P3_CONTROL_CNAME; }
Class_ID ClassID() { return Class_ID(EXPR_P3_CONTROL_CLASS_ID,0); }
SClass_ID SuperClassID() { return CTRL_POINT3_CLASS_ID; }
};
class ExprFloatControl : public ExprControl
{
public:
ExprFloatControl(ExprFloatControl &ctrl) : ExprControl(EXPR_FLOAT_CONTROL_CLASS_ID, ctrl) {}
ExprFloatControl(BOOL loading=FALSE) : ExprControl(EXPR_FLOAT_CONTROL_CLASS_ID, loading) {}
~ExprFloatControl() {}
RefTargetHandle Clone(RemapDir& remap=NoRemap()) { return(new ExprFloatControl(*this)); }
void GetClassName(TSTR& s) { s = EXPR_FLOAT_CONTROL_CNAME; }
Class_ID ClassID() { return Class_ID(EXPR_FLOAT_CONTROL_CLASS_ID,0); }
SClass_ID SuperClassID() { return CTRL_FLOAT_CLASS_ID; }
};
class ExprScaleControl : public ExprControl
{
public:
ExprScaleControl(ExprScaleControl &ctrl) : ExprControl(EXPR_SCALE_CONTROL_CLASS_ID, ctrl) {}
ExprScaleControl(BOOL loading=FALSE) : ExprControl(EXPR_SCALE_CONTROL_CLASS_ID, loading) {}
~ExprScaleControl() {}
RefTargetHandle Clone(RemapDir& remap=NoRemap()) { return(new ExprScaleControl(*this)); }
void GetClassName(TSTR& s) { s = EXPR_SCALE_CONTROL_CNAME; }
Class_ID ClassID() { return Class_ID(EXPR_SCALE_CONTROL_CLASS_ID,0); }
SClass_ID SuperClassID() { return CTRL_SCALE_CLASS_ID; }
};
class ExprRotControl : public ExprControl
{
public:
ExprRotControl(ExprRotControl &ctrl) : ExprControl(EXPR_ROT_CONTROL_CLASS_ID, ctrl) {}
ExprRotControl(BOOL loading=FALSE) : ExprControl(EXPR_ROT_CONTROL_CLASS_ID, loading) {}
~ExprRotControl() {}
RefTargetHandle Clone(RemapDir& remap=NoRemap()) { return(new ExprRotControl(*this)); }
void GetClassName(TSTR& s) { s = EXPR_ROT_CONTROL_CNAME; }
Class_ID ClassID() { return Class_ID(EXPR_ROT_CONTROL_CLASS_ID,0); }
SClass_ID SuperClassID() { return CTRL_ROTATION_CLASS_ID; }
};
//********************************************************
// EXPRESSION CONTROL
//********************************************************
static Class_ID exprPosControlClassID(EXPR_POS_CONTROL_CLASS_ID,0);
class ExprPosClassDesc:public ClassDesc
{
public:
int IsPublic() { return 1; }
void * Create(BOOL loading) { return new ExprPosControl(loading); }
const TCHAR * ClassName() { return EXPR_POS_CONTROL_CNAME; }
SClass_ID SuperClassID() { return CTRL_POSITION_CLASS_ID; }
Class_ID ClassID() { return exprPosControlClassID; }
const TCHAR* Category() { return _T(""); }
};
static ExprPosClassDesc exprPosCD;
ClassDesc* GetExprPosCtrlDesc();
static Class_ID exprP3ControlClassID(EXPR_P3_CONTROL_CLASS_ID,0);
class ExprP3ClassDesc:public ClassDesc
{
public:
int IsPublic() { return 1; }
void * Create(BOOL loading) { return new ExprP3Control(loading); }
const TCHAR * ClassName() { return EXPR_P3_CONTROL_CNAME; }
SClass_ID SuperClassID() { return CTRL_POINT3_CLASS_ID; }
Class_ID ClassID() { return exprP3ControlClassID; }
const TCHAR* Category() { return _T(""); }
};
static ExprP3ClassDesc exprP3CD;
ClassDesc* GetExprP3CtrlDesc();
static Class_ID exprFloatControlClassID(EXPR_FLOAT_CONTROL_CLASS_ID,0);
class ExprFloatClassDesc:public ClassDesc
{
public:
int IsPublic() { return 1; }
void * Create(BOOL loading) { return new ExprFloatControl(loading); }
const TCHAR * ClassName() { return EXPR_FLOAT_CONTROL_CNAME; }
SClass_ID SuperClassID() { return CTRL_FLOAT_CLASS_ID; }
Class_ID ClassID() { return exprFloatControlClassID; }
const TCHAR* Category() { return _T(""); }
};
static ExprFloatClassDesc exprFloatCD;
ClassDesc* GetExprFloatCtrlDesc();
static Class_ID exprScaleControlClassID(EXPR_SCALE_CONTROL_CLASS_ID,0);
class ExprScaleClassDesc:public ClassDesc
{
public:
int IsPublic() { return 1; }
void * Create(BOOL loading) { return new ExprScaleControl(loading); }
const TCHAR * ClassName() { return EXPR_SCALE_CONTROL_CNAME; }
SClass_ID SuperClassID() { return CTRL_SCALE_CLASS_ID; }
Class_ID ClassID() { return exprScaleControlClassID; }
const TCHAR* Category() { return _T(""); }
};
static ExprScaleClassDesc exprScaleCD;
ClassDesc* GetExprScaleCtrlDesc();
static Class_ID exprRotControlClassID(EXPR_ROT_CONTROL_CLASS_ID,0);
class ExprRotClassDesc:public ClassDesc
{
public:
int IsPublic() { return 1; }
void * Create(BOOL loading) { return new ExprRotControl(loading); }
const TCHAR * ClassName() { return EXPR_ROT_CONTROL_CNAME; }
SClass_ID SuperClassID() { return CTRL_ROTATION_CLASS_ID; }
Class_ID ClassID() { return exprRotControlClassID; }
const TCHAR* Category() { return _T(""); }
};
static ExprFloatClassDesc exprRotCD;
ClassDesc* GetExprRotCtrlDesc();
#endif