Files
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

176 lines
5.5 KiB
C++

/**********************************************************************
*<
FILE: mapping.h
DESCRIPTION:
CREATED BY: Rolf Berteig
HISTORY: 10/21/95
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#ifndef __MAPPING__
#define __MAPPING__
class MappingMod : public Modifier {
public:
DWORD flags;
float aspect;
Control *tmControl;
static IObjParam *ip;
void* GetInterface(ULONG id);
void InitControl(ModContext &mc,Object *obj,int type,TimeValue t);
void Move(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE);
void Rotate(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Quat& val, BOOL localOrigin=FALSE);
void Scale(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE);
Matrix3 CompMatrix(TimeValue t,ModContext *mc, Matrix3 *ntm,BOOL applySize=TRUE, BOOL applyAxis=TRUE);
void DoIcon(PolyLineProc& lp,BOOL sel);
int HitTest(TimeValue t, INode* inode, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt, ModContext* mc);
int Display(TimeValue t, INode* inode, ViewExp *vpt, int flags, ModContext *mc);
void GetWorldBoundBox(TimeValue t,INode* inode, ViewExp *vpt, Box3& box, ModContext *mc);
void GetSubObjectCenters(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc);
void GetSubObjectTMs(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc);
void ViewportAlign();
virtual void EnterNormalAlign()=0;
virtual void ExitNormalAlign()=0;
virtual void EnterRegionFit()=0;
virtual void ExitRegionFit()=0;
virtual int GetMapType()=0;
virtual void SetMapType(int type)=0;
virtual float GetTile(TimeValue t,int which)=0;
virtual void SetTile(TimeValue t,int which, float tile)=0;
virtual BOOL GetFlip(int which)=0;
virtual void SetFlip(int which,BOOL flip)=0;
virtual float GetLength(TimeValue t)=0;
virtual float GetWidth(TimeValue t)=0;
virtual float GetHeight(TimeValue t)=0;
virtual int GetAxis()=0;
virtual void SetLength(TimeValue t,float v)=0;
virtual void SetWidth(TimeValue t,float v)=0;
virtual void SetHeight(TimeValue t,float v)=0;
virtual void SetAxis(int v)=0;
virtual int GetFirstParamVer()=0;
virtual int GetPBlockVersion()=0;
virtual void EnterAcquire()=0;
virtual void ExitAcquire()=0;
};
#define I_MAPPINGINTERFACE 0x9836d7f1
#define GetMappingInterface(anim) ((MappingMod*)anim->GetInterface(I_MAPPINGINTERFACE))
#define TM_REF 0
#define PBLOCK_REF 1
// Flags
#define CONTROL_FIT (1<<0)
#define CONTROL_CENTER (1<<1)
#define CONTROL_ASPECT (1<<2)
#define CONTROL_UNIFORM (1<<3)
#define CONTROL_HOLD (1<<4)
#define CONTROL_INIT (1<<5)
#define CONTROL_OP (CONTROL_FIT|CONTROL_CENTER|CONTROL_ASPECT|CONTROL_UNIFORM)
#define CONTROL_INITPARAMS (1<<10)
#define CID_FACEALIGNMAP 0x4f298c7a
#define CID_REGIONFIT 0x4f298c7b
class FaceAlignMouseProc : public MouseCallBack {
public:
MappingMod *mod;
IObjParam *ip;
FaceAlignMouseProc(MappingMod *m,IObjParam *i) {mod=m;ip=i;}
int proc(HWND hWnd, int msg, int point, int flags, IPoint2 m);
void FaceAlignMap(HWND hWnd,IPoint2 m);
};
class FaceAlignMode : public CommandMode {
public:
ChangeFGObject fgProc;
FaceAlignMouseProc proc;
IObjParam *ip;
MappingMod *mod;
FaceAlignMode(MappingMod *m,IObjParam *i)
: fgProc(m), proc(m,i) {ip=i;mod=m;}
int Class() {return MOVE_COMMAND;}
int ID() {return CID_FACEALIGNMAP;}
MouseCallBack *MouseProc(int *numPoints) {*numPoints=2;return &proc;}
ChangeForegroundCallback *ChangeFGProc() {return &fgProc;}
BOOL ChangeFG(CommandMode *oldMode) {return oldMode->ChangeFGProc() != &fgProc;}
void EnterMode();
void ExitMode();
};
class RegionFitMouseProc : public MouseCallBack {
public:
MappingMod *mod;
IObjParam *ip;
IPoint2 om;
RegionFitMouseProc(MappingMod *m,IObjParam *i) {mod=m;ip=i;}
int proc(HWND hWnd, int msg, int point, int flags, IPoint2 m);
void RegionFitMap(HWND hWnd,IPoint2 m);
};
class RegionFitMode : public CommandMode {
public:
ChangeFGObject fgProc;
RegionFitMouseProc proc;
IObjParam *ip;
MappingMod *mod;
RegionFitMode(MappingMod *m,IObjParam *i)
: fgProc(m), proc(m,i) {ip=i;mod=m;}
int Class() {return MOVE_COMMAND;}
int ID() {return CID_REGIONFIT;}
MouseCallBack *MouseProc(int *numPoints) {*numPoints=2;return &proc;}
ChangeForegroundCallback *ChangeFGProc() {return &fgProc;}
BOOL ChangeFG(CommandMode *oldMode) {return oldMode->ChangeFGProc() != &fgProc;}
void EnterMode();
void ExitMode();
};
class PickAcquire :
public PickModeCallback,
public PickNodeCallback {
public:
MappingMod *mod;
IObjParam *ip;
PickAcquire() {mod = NULL; ip = NULL;}
BOOL HitTest(IObjParam *ip,HWND hWnd,ViewExp *vpt,IPoint2 m,int flags);
BOOL Pick(IObjParam *ip,ViewExp *vpt);
void EnterMode(IObjParam *ip);
void ExitMode(IObjParam *ip);
BOOL RightClick(IObjParam *ip,ViewExp *vpt) {return TRUE;}
BOOL Filter(INode *node);
MappingMod *FindFirstMap(ReferenceTarget *ref);
void AcquireMapping(
MappingMod *toMod, ModContext *toMC, INode *toNode,
MappingMod *fromMod, ModContext *fromMC, INode *fromNode,
int type);
};
class FixDimsPLCB : public PostLoadCallback {
public:
MappingMod *mod;
FixDimsPLCB(MappingMod *m) {mod=m;}
void proc(ILoad *iload);
};
#endif //__MAPPING__