mirror of
https://github.com/microsoft/Microsoft-3D-Movie-Maker.git
synced 2024-11-22 10:22:40 +01:00
121 lines
3.2 KiB
C++
121 lines
3.2 KiB
C++
/* Copyright (c) Microsoft Corporation.
|
|
Licensed under the MIT License. */
|
|
|
|
/***************************************************************************
|
|
|
|
ape.h: Actor preview entity
|
|
|
|
Primary Author: ******
|
|
Review Status: REVIEWED - any changes to this file must be reviewed!
|
|
|
|
BASE ---> CMH ---> GOB ---> APE
|
|
|
|
***************************************************************************/
|
|
#ifndef APE_H
|
|
#define APE_H
|
|
|
|
// APE tool types
|
|
enum
|
|
{
|
|
aptNil = 0,
|
|
aptIncCmtl, // Increment CMTL
|
|
aptIncAccessory, // Increment Accessory
|
|
aptGms, // Material (MTRL or CMTL)
|
|
aptLim
|
|
};
|
|
|
|
// Generic material spec
|
|
struct GMS
|
|
{
|
|
bool fValid; // if fFalse, ignore this GMS
|
|
bool fMtrl; // if fMtrl is fTrue, tagMtrl is valid. Else cmid is valid
|
|
long cmid;
|
|
TAG tagMtrl;
|
|
};
|
|
|
|
// Actor preview entity tool
|
|
struct APET
|
|
{
|
|
long apt;
|
|
GMS gms;
|
|
};
|
|
|
|
|
|
/****************************************
|
|
Actor preview entity class
|
|
****************************************/
|
|
typedef class APE *PAPE;
|
|
#define APE_PAR GOB
|
|
#define kclsAPE 'APE'
|
|
class APE : public APE_PAR
|
|
{
|
|
RTCLASS_DEC
|
|
ASSERT
|
|
MARKMEM
|
|
CMD_MAP_DEC(APE)
|
|
|
|
protected:
|
|
PBWLD _pbwld; // BRender world to draw actor in
|
|
PTMPL _ptmpl; // Template (or TDT) of the actor being previewed
|
|
PBODY _pbody; // Body of the actor being previewed
|
|
APET _apet; // Currently selected tool
|
|
PGL _pglgms; // What materials are attached to what body part sets
|
|
long _celn; // Current cel of action
|
|
CLOK _clok; // To time cel cycling
|
|
BLIT _blit; // BRender light data
|
|
BACT _bact; // BRender light actor
|
|
long _anid; // Current action ID
|
|
long _iview; // Current camera view
|
|
bool _fCycleCels;// If cycling cels
|
|
PRCA _prca; // resource source (for cursors)
|
|
long _ibsetOnlyAcc; // ibset of accessory, if only one (else ivNil)
|
|
|
|
protected:
|
|
APE(PGCB pgcb) : GOB(pgcb), _clok(CMH::HidUnique()) {}
|
|
bool _FInit(PTMPL ptmpl, PCOST pcost, long anid, bool fCycleCels,
|
|
PRCA prca);
|
|
void _InitView(void);
|
|
void _SetScale(void);
|
|
void _UpdateView(void);
|
|
bool _FApplyGms(GMS *pgms, long ibset);
|
|
bool _FIncCmtl(GMS *pgms, long ibset, bool fNextAccessory);
|
|
long _CmidNext(long ibset, long icmidCur, bool fNextAccessory);
|
|
|
|
public:
|
|
static PAPE PapeNew(PGCB pgcb, PTMPL ptmpl, PCOST pcost, long anid,
|
|
bool fCycleCels, PRCA prca = pvNil);
|
|
~APE();
|
|
|
|
void SetToolMtrl(PTAG ptagMtrl);
|
|
void SetToolCmtl(long cmid);
|
|
void SetToolIncCmtl(void);
|
|
void SetToolIncAccessory(void);
|
|
|
|
bool FSetAction(long anid);
|
|
bool FCmdNextCel(PCMD pcmd);
|
|
|
|
void SetCustomView(BRA xa, BRA ya, BRA za);
|
|
void ChangeView(void);
|
|
virtual void Draw(PGNV pgnv, RC *prcClip);
|
|
virtual bool FCmdMouseMove(PCMD_MOUSE pcmd);
|
|
virtual bool FCmdTrackMouse(PCMD_MOUSE pcmd);
|
|
|
|
bool FChangeTdt(PSTN pstn, long tdts, PTAG ptagTdf);
|
|
bool FSetTdtMtrl(PTAG ptagMtrl);
|
|
bool FGetTdtMtrlCno(CNO *pcno);
|
|
|
|
void GetTdtInfo(PSTN pstn, long *ptdts, PTAG ptagTdf);
|
|
long Anid(void) { return _anid; }
|
|
long Celn(void) { return _celn; }
|
|
void SetCycleCels(bool fOn);
|
|
bool FIsCycleCels(void) { return _fCycleCels; }
|
|
bool FDisplayCel(long celn);
|
|
long Cbset(void) { return _pbody->Cbset(); }
|
|
|
|
// Returns fTrue if a material was applied to this ibset
|
|
bool FGetMaterial(long ibset, bool *pfMtrl, long *pcmid, TAG *ptagMtrl);
|
|
};
|
|
|
|
|
|
#endif APE_H
|