You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
639 lines
18 KiB
639 lines
18 KiB
//@doc
|
|
/******************************************************
|
|
**
|
|
** @module EFFECT.H | Definition file for InternalEffect structure
|
|
**
|
|
** Description:
|
|
** The Data Packager allows virtualization of the
|
|
** commands into the different firmware versions packet format
|
|
** DataPackager - Base class that defines the functionality of all DataPackagers
|
|
** DataPackager100 - DataPackager for Firmware 1.**
|
|
** DataPackager200 - DataPackager for Firmware 2.**
|
|
**
|
|
** Classes:
|
|
** DataPackager
|
|
** DataPackager100 - DataPackager for Firmware 1.**
|
|
** DataPackager200 - DataPackager for Firmware 2.**
|
|
** DataPacket
|
|
**
|
|
** History:
|
|
** Created 1/05/98 Matthew L. Coill (mlc)
|
|
**
|
|
** (c) 1986-1998 Microsoft Corporation. All Rights Reserved.
|
|
******************************************************/
|
|
#ifndef __EFFECT_H__
|
|
#define __EFFECT_H__
|
|
|
|
#include "SW_Error.hpp"
|
|
#include "Hau_Midi.hpp"
|
|
#include "DX_Map.hpp"
|
|
#include "DPack.h" // For ASSUME Macros
|
|
|
|
#ifndef override
|
|
#define override
|
|
#endif
|
|
|
|
#define ET_CUSTOMFORCE_200 0x01
|
|
#define ET_SINE_200 0x02
|
|
#define ET_SQUARE_200 0x03
|
|
#define ET_TRIANGLE_200 0x04
|
|
#define ET_SAWTOOTH_200 0x05
|
|
#define ET_CONSTANTFORCE_200 0x06
|
|
|
|
#define ET_DELAY_200 0x08 // - Not defined
|
|
|
|
#define ET_SPRING_200 0x08
|
|
#define ET_DAMPER_200 0x09
|
|
#define ET_INERTIA_200 0x0A
|
|
#define ET_FRICTION_200 0x0B
|
|
#define ET_WALL_200 0x0C
|
|
#define ET_RAWFORCE_200 0x0D // Needed for mapping
|
|
|
|
#define ID_RTCSPRING_200 1
|
|
|
|
class DataPacket;
|
|
|
|
class Envelope
|
|
{
|
|
protected: // Cannot create the generic envelope
|
|
Envelope() {};
|
|
};
|
|
|
|
class Envelope1XX : public Envelope
|
|
{
|
|
public:
|
|
Envelope1XX(DIENVELOPE* pDIEnvelope, DWORD baseLine, DWORD duration);
|
|
|
|
DWORD m_AttackTime; // Time from attack to sustain
|
|
DWORD m_SustainTime; // Time from sustain to fade
|
|
DWORD m_FadeTime; // Time from fade to end
|
|
DWORD m_StartPercent; // Percentage of max that is start
|
|
DWORD m_SustainPercent; // Percentage of max that is sustained
|
|
DWORD m_EndPercent; // Percentage of max during fade
|
|
};
|
|
|
|
class Envelope200 : public Envelope
|
|
{
|
|
public:
|
|
Envelope200(DIENVELOPE* pDIEnvelope, DWORD sustain, DWORD duration, HRESULT& hr);
|
|
|
|
WORD m_AttackTime; // Time from attack to sustain
|
|
WORD m_FadeStart; // Time from start to fade (attack + sustain)
|
|
BYTE m_StartPercent; // Percentage of max that is start
|
|
BYTE m_SustainPercent; // Percentage of max that is sustained
|
|
BYTE m_EndPercent; // Percentage of max at end of fade
|
|
};
|
|
|
|
//
|
|
// @class InternalEffect class
|
|
//
|
|
class InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
InternalEffect();
|
|
virtual ~InternalEffect();
|
|
|
|
// Ugly! but quick and simple
|
|
static InternalEffect* CreateSpring();
|
|
static InternalEffect* CreateDamper();
|
|
static InternalEffect* CreateInertia();
|
|
static InternalEffect* CreateFriction();
|
|
|
|
static InternalEffect* CreateRTCSpring();
|
|
static InternalEffect* CreateSystemEffect();
|
|
|
|
static InternalEffect* CreateCustomForce();
|
|
|
|
static InternalEffect* CreateSine();
|
|
static InternalEffect* CreateSquare();
|
|
static InternalEffect* CreateTriangle();
|
|
static InternalEffect* CreateSawtoothUp();
|
|
static InternalEffect* CreateSawtoothDown();
|
|
|
|
static InternalEffect* CreateConstantForce();
|
|
|
|
static InternalEffect* CreateRamp();
|
|
|
|
static InternalEffect* CreateWall();
|
|
static InternalEffect* CreateDelay() { return NULL; }
|
|
|
|
static InternalEffect* CreateFromVFX(const DIEFFECT& diOringinal, EFFECT effect, ENVELOPE envelope, BYTE* pEffectParms, DWORD paramSize, HRESULT& hr);
|
|
|
|
virtual HRESULT Create(const DIEFFECT& diEffect);
|
|
virtual HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
virtual UINT GetModifyOnlyNeeded() const { return 0; }
|
|
virtual HRESULT FillModifyOnlyParms() const { return SUCCESS; }
|
|
virtual HRESULT FillCreatePacket(DataPacket& packet) const { return SFERR_NO_SUPPORT; }
|
|
|
|
static BYTE ComputeChecksum(const DataPacket& packet, short int numFields);
|
|
void FillSysExHeader(DataPacket& packet) const;
|
|
void FillHeader1XX(DataPacket& packet, BYTE effectType, BYTE effectID) const;
|
|
void FillHeader200(DataPacket& packet, BYTE effectType, BYTE effectID) const;
|
|
|
|
BYTE GetGlobalID() const { return m_EffectID; }
|
|
BYTE GetDeviceID() const { return m_DeviceEffectID; }
|
|
void SetGlobalID(BYTE id) { m_EffectID = id; }
|
|
void SetDeviceID(BYTE id) { m_DeviceEffectID = id; }
|
|
|
|
// For special modfication of play reapeat
|
|
HRESULT FillModifyPacket200(BYTE packetIndex, BYTE paramIndex, DWORD value) const;
|
|
virtual BYTE GetRepeatIndex() const { return 0xFF; }
|
|
|
|
void SetPlaying(BOOL playState) { m_IsPossiblyPlaying = playState; }
|
|
BOOL IsPossiblyPlaying() const { return m_IsPossiblyPlaying; }
|
|
BOOL IsReallyPlaying(BOOL& multiCheckStop);
|
|
protected:
|
|
HRESULT FillModifyPacket1XX(BYTE packetIndex, BYTE paramIndex, DWORD value) const;
|
|
HRESULT FillModifyPacket200(BYTE packetIndex, BYTE paramIndex, BYTE low, BYTE high) const;
|
|
|
|
BYTE m_EffectID;
|
|
BYTE m_DeviceEffectID;
|
|
DWORD m_Duration;
|
|
DWORD m_Gain;
|
|
DWORD m_SamplePeriod;
|
|
DWORD m_TriggerPlayButton;
|
|
DWORD m_TriggerRepeat;
|
|
DWORD m_AxisMask;
|
|
DWORD m_EffectAngle;
|
|
DWORD m_PercentX; // Percent force X
|
|
DWORD m_PercentY; // Percent force Y
|
|
DWORD m_PercentAdjustment; // Y-Force mapping combination of above
|
|
BOOL m_AxesReversed;
|
|
BOOL m_IsPossiblyPlaying;
|
|
};
|
|
|
|
// ********************** Behavioural Based Effects *****************************/
|
|
|
|
//
|
|
// @class BehaviouralEffect class
|
|
// Spring, Damper, Intertia, Friction, and Wall (till wall gets its own type)
|
|
//
|
|
class BehaviouralEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
BehaviouralEffect() : InternalEffect() {};
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
// Accessors
|
|
long int ConstantX() const { return m_ConditionData[0].lPositiveCoefficient; }
|
|
long int ConstantY() const { return m_ConditionData[1].lPositiveCoefficient; }
|
|
long int CenterX() const { return m_ConditionData[0].lOffset; }
|
|
long int CenterY() const { return m_ConditionData[1].lOffset; }
|
|
|
|
protected:
|
|
DICONDITION m_ConditionData[2]; // We are just dealing with two axis currently
|
|
BYTE m_TypeID;
|
|
};
|
|
|
|
//
|
|
// @class BehaviouralEffect1XX class
|
|
// Spring, Damper, and Inertia
|
|
//
|
|
class BehaviouralEffect1XX : public BehaviouralEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
BehaviouralEffect1XX(BYTE typeID) : BehaviouralEffect() { m_TypeID = typeID; m_HasCenter = TRUE; }
|
|
|
|
virtual override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
protected:
|
|
void AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags) const;
|
|
|
|
BOOL m_HasCenter; // Friction has no center
|
|
};
|
|
|
|
//
|
|
// @class RTCSpring1XX class
|
|
//
|
|
class RTCSpring1XX : public BehaviouralEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
RTCSpring1XX();
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
long int SaturationX() const { return m_ConditionData[0].dwPositiveSaturation; }
|
|
long int SaturationY() const { return m_ConditionData[1].dwPositiveSaturation; }
|
|
long int DeadBandX() const { return m_ConditionData[0].lDeadBand; }
|
|
long int DeadBandY() const { return m_ConditionData[1].lDeadBand; }
|
|
protected:
|
|
void AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags) const;
|
|
};
|
|
|
|
//
|
|
// @class BehaviouralEffect200 class
|
|
// Spring, Damper, and Inertia
|
|
//
|
|
class BehaviouralEffect200 : public BehaviouralEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
BehaviouralEffect200(BYTE typeID) : BehaviouralEffect() { m_TypeID = typeID; }
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
virtual override UINT GetModifyOnlyNeeded() const;
|
|
virtual override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
protected:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
|
|
// Distances and Forces spec'd for the firmware
|
|
void ComputeDsAndFs();
|
|
BYTE m_Ds[4];
|
|
BYTE m_Fs[4];
|
|
};
|
|
|
|
//
|
|
// @class RTCSpring200 class
|
|
//
|
|
class RTCSpring200 : public BehaviouralEffect200
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
RTCSpring200();
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
|
|
long int SaturationX() const { return m_ConditionData[0].dwPositiveSaturation; }
|
|
long int SaturationY() const { return m_ConditionData[1].dwPositiveSaturation; }
|
|
long int DeadBandX() const { return m_ConditionData[0].lDeadBand; }
|
|
long int DeadBandY() const { return m_ConditionData[1].lDeadBand; }
|
|
protected:
|
|
void AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags) const;
|
|
};
|
|
|
|
//
|
|
// @class FrictionEffect1XX class
|
|
//
|
|
class FrictionEffect1XX : public BehaviouralEffect1XX
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
FrictionEffect1XX() : BehaviouralEffect1XX(ET_BE_FRICTION) { m_HasCenter = FALSE; }
|
|
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
};
|
|
|
|
|
|
//
|
|
// @class FrictionEffect200 class
|
|
//
|
|
class FrictionEffect200 : public BehaviouralEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
FrictionEffect200() : BehaviouralEffect() { m_TypeID = ET_FRICTION_200; }
|
|
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
protected:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
};
|
|
|
|
/*
|
|
//
|
|
// @class WallEffect1XX class
|
|
//
|
|
class WallEffect1XX : public BehaviouralEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
WallEffect1XX() : BehaviouralEffect() {};
|
|
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags) const;
|
|
protected:
|
|
void AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags) const;
|
|
};
|
|
*/
|
|
|
|
// ********************* Periodic based Effects *****************************/
|
|
|
|
//
|
|
// @class PeriodicEffect class
|
|
// Sine, Square, Triangle
|
|
//
|
|
class PeriodicEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
PeriodicEffect();
|
|
override ~PeriodicEffect();
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
// Accessors
|
|
long int Magnitude() const { return m_PeriodicData.dwMagnitude; }
|
|
long int Offset() const { return m_PeriodicData.lOffset; }
|
|
virtual long int Phase() const { return m_PeriodicData.dwPhase; }
|
|
long int Period() const { return m_PeriodicData.dwPeriod; }
|
|
protected:
|
|
DIPERIODIC m_PeriodicData; // We are just dealing with two axis currently
|
|
Envelope* m_pEnvelope;
|
|
BYTE m_TypeID;
|
|
};
|
|
|
|
//
|
|
// @class PeriodicEffect1XX class
|
|
//
|
|
class PeriodicEffect1XX : public PeriodicEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
PeriodicEffect1XX(BYTE typeID) : PeriodicEffect() { m_TypeID = typeID; }
|
|
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
protected:
|
|
void DIToJolt(DWORD mag, DWORD off, DWORD gain, DWORD& max, DWORD& min) const;
|
|
static DWORD DIPeriodToJoltFreq(DWORD period);
|
|
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags) const;
|
|
};
|
|
|
|
|
|
//
|
|
// @class PeriodicEffect200 class
|
|
//
|
|
class PeriodicEffect200 : public PeriodicEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
PeriodicEffect200(BYTE typeID) : PeriodicEffect() { m_TypeID = typeID; }
|
|
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
virtual override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
virtual override long int Phase() const;
|
|
protected:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
};
|
|
|
|
//
|
|
// @class SawtoothEffect200 class
|
|
//
|
|
class SawtoothEffect200 : public PeriodicEffect200
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
SawtoothEffect200(BOOL isUp) : PeriodicEffect200(ET_SAWTOOTH_200), m_IsUp(isUp) {};
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
override long int Phase() const;
|
|
protected:
|
|
BOOL m_IsUp;
|
|
};
|
|
|
|
//
|
|
// @class RampEffect200 class
|
|
//
|
|
class RampEffect200 : public SawtoothEffect200
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
RampEffect200() : SawtoothEffect200(TRUE) {};
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
};
|
|
|
|
|
|
// ************************ Miscellaneuous (CustomForce, RampForce, ConstantForce, SystemEffect) *********************//
|
|
|
|
//
|
|
// @class CustomForceEffect class
|
|
//
|
|
class CustomForceEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
CustomForceEffect();
|
|
virtual override ~CustomForceEffect();
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
protected:
|
|
DICUSTOMFORCE m_CustomForceData;
|
|
};
|
|
|
|
//
|
|
// @class CustomForceEffect200 class
|
|
//
|
|
class CustomForceEffect200 : public CustomForceEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
CustomForceEffect200();
|
|
~CustomForceEffect200();
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
private:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
|
|
Envelope200* m_pEnvelope;
|
|
};
|
|
|
|
|
|
/*
|
|
//
|
|
// @class RampForceEffect class
|
|
//
|
|
class RampForceEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
RampForceEffect();
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
// Accessors
|
|
long int StartForce() const { return m_RampForceData.lStart; }
|
|
long int EndForce() const { return m_RampForceData.lEnd; }
|
|
protected:
|
|
DIRAMPFORCE m_RampForceData;
|
|
};
|
|
*/
|
|
|
|
//
|
|
// @class ConstantForceEffect class
|
|
//
|
|
class ConstantForceEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
ConstantForceEffect();
|
|
override ~ConstantForceEffect();
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
|
|
// Accessors
|
|
long int Magnitude() const { return m_ConstantForceData.lMagnitude; }
|
|
protected:
|
|
DICONSTANTFORCE m_ConstantForceData;
|
|
Envelope* m_pEnvelope;
|
|
};
|
|
|
|
//
|
|
// @class ConstantForceEffect200 class
|
|
//
|
|
class ConstantForceEffect200 : public ConstantForceEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
ConstantForceEffect200() : ConstantForceEffect() {};
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
protected:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
};
|
|
|
|
//
|
|
// @class WallEffect class
|
|
//
|
|
class WallEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
WallEffect() : InternalEffect() {};
|
|
|
|
virtual override HRESULT Create(const DIEFFECT& diEffect);
|
|
protected:
|
|
BE_WALL_PARAM m_WallData;
|
|
};
|
|
|
|
//
|
|
// @class WallEffect200 class
|
|
//
|
|
class WallEffect200 : public WallEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
WallEffect200() : WallEffect() {};
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override UINT GetModifyOnlyNeeded() const;
|
|
override HRESULT FillModifyOnlyParms() const;
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
|
|
override BYTE GetRepeatIndex() const;
|
|
private:
|
|
HRESULT AdjustModifyParams(InternalEffect& newEffect, DWORD& modFlags);
|
|
|
|
// Distances and Forces spec'd for the firmware
|
|
void ComputeDsAndFs();
|
|
BYTE m_Ds[4];
|
|
BYTE m_Fs[4];
|
|
};
|
|
|
|
//
|
|
// @class SystemEffect class
|
|
//
|
|
class SystemEffect : public InternalEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
SystemEffect() {};
|
|
};
|
|
|
|
class SystemStickData1XX
|
|
{
|
|
public:
|
|
SystemStickData1XX();
|
|
|
|
void SetFromRegistry(DWORD dwDeviceID);
|
|
|
|
DWORD dwXYConst;
|
|
DWORD dwRotConst;
|
|
DWORD dwSldrConst;
|
|
DWORD dwAJPos;
|
|
DWORD dwAJRot;
|
|
DWORD dwAJSldr;
|
|
DWORD dwSprScl;
|
|
DWORD dwBmpScl;
|
|
DWORD dwDmpScl;
|
|
DWORD dwInertScl;
|
|
DWORD dwVelOffScl;
|
|
DWORD dwAccOffScl;
|
|
DWORD dwYMotBoost;
|
|
DWORD dwXMotSat;
|
|
DWORD dwReserved;
|
|
DWORD dwMasterGain;
|
|
};
|
|
|
|
class SystemEffect1XX : public SystemEffect
|
|
{
|
|
//@access Constructor
|
|
public:
|
|
//@cmember constructor
|
|
SystemEffect1XX();
|
|
|
|
override HRESULT Create(const DIEFFECT& diEffect);
|
|
override HRESULT FillCreatePacket(DataPacket& packet) const;
|
|
override HRESULT Modify(InternalEffect& newEffect, DWORD modFlags);
|
|
protected:
|
|
SystemStickData1XX m_SystemStickData;
|
|
};
|
|
|
|
#endif __EFFECT_H__
|