300 lines
8.2 KiB
C++
300 lines
8.2 KiB
C++
|
|
#pragma once
|
|
|
|
#include "K3DTypes.h"
|
|
#include "SGameAvatarEx.h"
|
|
|
|
class KViewportObject;
|
|
class KSeqModel;
|
|
|
|
namespace
|
|
{
|
|
enum EFFECT_FILE
|
|
{
|
|
EFFECT_START_FILE = 0,
|
|
EFFECT_MIDDLE_FILE,
|
|
EFFECT_END_FILE,
|
|
EFFECT_FILE_MAX,
|
|
};
|
|
};
|
|
|
|
class SGamePreLoad
|
|
{
|
|
public:
|
|
SGamePreLoad();
|
|
~SGamePreLoad();
|
|
|
|
void RequestThreadLoading( int nFXSet_ID, bool bNotCacheDelete = false );
|
|
void RequestThreadLoading( struct _SKILL_FX* pSkill_fx, bool bNotCacheDelete = false );
|
|
|
|
void Unload( struct _SKILL_FX* pSkill_fx );
|
|
protected:
|
|
void _loadFX( int nFXSet_ID, bool bNotCacheDelete );
|
|
void _unloadFX( int nFXSet_ID );
|
|
};
|
|
|
|
/** 게임상의 Effect
|
|
특정 위치에서 폭발
|
|
특정 위치 쫓아가기 */
|
|
//=============================================================================================================================
|
|
//New
|
|
class SGameEffectEx : public SGameObject
|
|
{
|
|
public:
|
|
enum
|
|
{
|
|
NORMAL_MODE = 0, ///< 기본 모드
|
|
STATE_MODE, ///< 상태 이상 모드
|
|
};
|
|
|
|
enum FX_PLAY_STATE
|
|
{
|
|
PLAY_NORAML = 0,
|
|
PLAY_LOOP,
|
|
PLAY_END,
|
|
};
|
|
|
|
SGameEffectEx( struct FX_DATA * pFX_data, struct _MOTION_FX_SET* pFX_SET );
|
|
~SGameEffectEx();
|
|
|
|
void SetOwner( AR_HANDLE owner ) { m_hOwner = owner; }
|
|
void SetCaster( AR_HANDLE caster ) { m_hCaster = caster; }
|
|
void setTarget(AR_HANDLE target) { m_target = target; } /// 2011.04.04 - prodongi
|
|
AR_HANDLE GetOwner() { return m_hOwner; }
|
|
void SetEffectID( int nEffectID ) { m_nEffectID = nEffectID; }
|
|
int GetEffectID() { return m_nEffectID; }
|
|
|
|
void PlayAnimation( DWORD time, int nAniType = SEQTYPE_NORMAL, float fPlayRate = 4.8f );
|
|
virtual bool Process( DWORD dwTime, unsigned long uProcessBitVector=0 );
|
|
virtual bool Render( unsigned long uRenderBitVector, KViewportObject** ppViewportList, int nViewportCount );
|
|
|
|
void SetDirection( K3DVector &pos, K3DVector &target );
|
|
void SetParentMat( K3DMatrix *pParentMat, const K3DMatrix *pAttachtMat, const K3DMatrix* pEvpMat )
|
|
{
|
|
m_pParentMat = pParentMat;
|
|
m_pAttachMat = pAttachtMat;
|
|
m_pEvPointMatrix = pEvpMat;
|
|
}
|
|
|
|
void SetEventPointSequencer( class KEventPointSeq * pEvPointSeq );
|
|
|
|
bool IsPlaying();
|
|
bool IsEnd() { return m_bEnd; }
|
|
|
|
void SetMode( int nMode );
|
|
int GetMode() { return m_nMode; }
|
|
void SetEndTime( AR_TIME end_time ) { m_arEndTime = end_time; }
|
|
|
|
void ForceEnd() { SetEnd(); }
|
|
|
|
void IsLoopFx( bool bLoop )
|
|
{
|
|
if( bLoop )
|
|
m_nFxPlayState = PLAY_LOOP;
|
|
else if( m_nFxPlayState == PLAY_LOOP )
|
|
{
|
|
if( getStep() == STEP00 )
|
|
{
|
|
setStep(STEP01);
|
|
}
|
|
m_nFxPlayState = PLAY_END;
|
|
}
|
|
}
|
|
|
|
void IsWeaponEffectPos()
|
|
{
|
|
m_bIsWeaponEffectPos = true;
|
|
m_bIsDir = false;
|
|
}
|
|
|
|
unsigned short GetStateHandle() { return m_StateHandle; }
|
|
void SetStateHandle( unsigned short nStateHandle ) { m_StateHandle = nStateHandle; }
|
|
|
|
void SetTargetScale(float fSize, K3DMatrix & matTransform );
|
|
void SetScaleAdjust(float f) { m_fScaleAdjust = f; }
|
|
protected:
|
|
void SetEnd() { m_bEnd = true; }
|
|
void setSound( int nPlayRatio, const char *pSoundName, int nVol, bool bLoop, bool bSoundOption[SOUND_OP_MAX] );
|
|
void _processPlayAni( bool bIsEffect , int nIndex, int nNextIndex, int nNextStep, int nPlayAniType = SEQTYPE_NORMAL );
|
|
void procSyncTargetAdjustedScale(); /// 2011.04.04 타겟의 조정된 스케일 값과 동기화 - prodongi
|
|
|
|
enum
|
|
{
|
|
STEP00,
|
|
STEP01,
|
|
STEP02,
|
|
};
|
|
|
|
int getStep() { return m_nStep; }
|
|
void setStep( int nStep ) { m_nStep = nStep; }
|
|
|
|
AR_HANDLE m_hOwner;
|
|
AR_HANDLE m_hCaster;
|
|
AR_HANDLE m_target; /// 2011.04.04 타겟의 스케일이 변했을 때 체크하기 위해 추가함 - prodongi
|
|
|
|
bool m_bIsDir;
|
|
|
|
int m_nStep;
|
|
|
|
int m_nMode; ///< 기본 모드, 상태 이상 모드
|
|
|
|
int m_nEffectID;
|
|
|
|
bool m_bIsSound[EFFECT_FILE_MAX];
|
|
|
|
bool m_bIsEffect[EFFECT_FILE_MAX];
|
|
KSeqModel * m_pSeq; ///< Effect
|
|
|
|
bool m_bEnd;
|
|
|
|
bool m_bIsWeaponEffectPos;
|
|
|
|
FX_PLAY_STATE m_nFxPlayState;
|
|
|
|
int m_nSoundID;
|
|
std::string m_SoundName;
|
|
bool m_bIsSoundLoop;
|
|
|
|
_MOTION_FX_SET* m_pFX_SET;
|
|
struct FX_DATA* m_pFX_DATA;
|
|
|
|
const K3DMatrix *m_pEvPointMatrix; ///< 이벤트 매트릭스
|
|
const K3DMatrix *m_pAttachMat; ///< 뼈 매트릭스
|
|
K3DMatrix *m_pParentMat; ///< 부모 위치
|
|
|
|
K3DMatrix m_LocalMat;
|
|
K3DMatrix m_ResultMat;
|
|
|
|
// class KEventPointSeq * m_pEvPointSeq;
|
|
K3DMatrix m_DirectionMat;
|
|
|
|
DWORD m_dwTime;
|
|
AR_TIME m_arEndTime;
|
|
|
|
DWORD m_dwPlayTime;
|
|
int m_nCurAniType;
|
|
float m_fCurPlayRate;
|
|
|
|
unsigned short m_StateHandle; ///< 상태 이상 핸들
|
|
|
|
bool m_bTargetSize;
|
|
K3DMatrix m_matTransform;
|
|
|
|
std::string m_strEffectFileName[EFFECT_FILE_MAX];
|
|
std::string m_strSoundFileName[EFFECT_FILE_MAX];
|
|
|
|
float m_fScaleAdjust;
|
|
};
|
|
|
|
//=============================================================================================================================
|
|
//=============================================================================================================================
|
|
/// Old 정리 해서 삭제 시키자.
|
|
class SGameEffect : public SGameObject
|
|
{
|
|
public:
|
|
SGameEffect(AR_HANDLE owner=0, AR_HANDLE state_handle = 0, AR_TIME endtime = 0 );
|
|
virtual ~SGameEffect(void);
|
|
|
|
int GetEffectID() { return m_nEffectID; }
|
|
void SetEffectID( int nEffectID ) { m_nEffectID = nEffectID; }
|
|
void AddEffect( const char * pName );
|
|
|
|
void PlayAnimation( DWORD time, int nAniType = SEQTYPE_NORMAL, float fPlayRate = 4.8f );
|
|
|
|
virtual bool Process( DWORD dwTime, unsigned long uProcessBitVector=0 );
|
|
virtual bool Render( unsigned long uRenderBitVector, KViewportObject** ppViewportList, int nViewportCount );
|
|
void SetOwner( AR_HANDLE hOwner );
|
|
|
|
void SetFlag( int nFlag ) { m_nFlag = nFlag; }
|
|
|
|
void SetDirection( K3DVector &pos, K3DVector &target );
|
|
void SetOwnerDirection( K3DMatrix* pParantMatrix, K3DVector* pDirection );
|
|
void SetParentMat( K3DMatrix *pParentMat, const K3DMatrix *pAttachtMat, const K3DMatrix* pEvpMat )
|
|
{
|
|
m_pParentMat = pParentMat;
|
|
m_pAttachMat = pAttachtMat;
|
|
m_pEvPointMatrix = pEvpMat;
|
|
}
|
|
|
|
void SetEndTime( AR_TIME arEndTime ) { m_arEndTime = arEndTime; }
|
|
void SetEnd() { m_bEnd = TRUE; }
|
|
bool IsPlaying();
|
|
BOOL IsEnd() { return m_bEnd; }
|
|
AR_HANDLE GetHandle() { return m_hOwner; }
|
|
unsigned short GetStateHandle() { return m_StateHandle; }
|
|
void SetStateHandle( unsigned short nStateHandle ) { m_StateHandle = nStateHandle; }
|
|
|
|
void SetEventPointSequencer( class KEventPointSeq * pEvPointSeq );
|
|
void SetTargetScale(float fSize, K3DMatrix & matTransform);
|
|
protected:
|
|
int m_nFlag;
|
|
BOOL m_bEnd;
|
|
AR_HANDLE m_hOwner; ///< 소유자
|
|
|
|
int m_nEffectID; ///< Effect ID, 삭제시 필요
|
|
|
|
unsigned short m_StateHandle; ///< 상태 이상 핸들
|
|
AR_TIME m_arEndTime; ///< 상태 이상 끝나는 시간
|
|
|
|
KSeqModel * m_pSeq; ///< Effect
|
|
|
|
K3DVector m_Pos; ///< 위치
|
|
K3DVector m_Target; ///< 타겟 위치
|
|
|
|
const K3DMatrix *m_pEvPointMatrix; ///< 이벤트 매트릭스
|
|
const K3DMatrix * m_pAttachMat; ///< 상대적인 위치(머리, 팔, 발 등등)
|
|
K3DMatrix * m_pParentMat; ///< 부모 위치
|
|
K3DVector * m_pOwnerDirection;
|
|
K3DMatrix m_LocalMat;
|
|
K3DMatrix m_ResultMat;
|
|
|
|
// class KEventPointSeq * m_pEvPointSeq;
|
|
K3DMatrix m_DirectionMat;
|
|
|
|
DWORD m_dwTime;
|
|
|
|
DWORD m_dwPlayTime;
|
|
int m_nCurAniType;
|
|
float m_fCurPlayRate;
|
|
|
|
DWORD m_dwPlayEndTime; ///< Play 가 끝난 시점
|
|
|
|
bool m_bIsOwnerDir;
|
|
|
|
bool m_bTargetSize;
|
|
K3DMatrix m_matTransform;
|
|
#ifndef NDEBUG
|
|
std::string m_strFileName;
|
|
#endif
|
|
};
|
|
//Play 방법 : 정상 한번, 거꾸로 한번,
|
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
/// 근접 공격 힛팅 이펙트
|
|
class SGameAttackEffect : public SGameObject
|
|
{
|
|
private:
|
|
KSeqModel * m_pSeq;
|
|
|
|
bool m_bTargetSize;
|
|
bool m_bEnd;
|
|
|
|
K3DMatrix m_ResultMat;
|
|
|
|
AR_HANDLE m_hCast;
|
|
AR_HANDLE m_hTarget;
|
|
public:
|
|
void SetEnd() { m_bEnd = true; }
|
|
public:
|
|
bool IsPlaying();
|
|
bool IsEnd() { return m_bEnd; }
|
|
public:
|
|
AR_HANDLE GetCastHandle() { return m_hCast; }
|
|
public:
|
|
virtual bool Process( DWORD dwTime, unsigned long uProcessBitVector=0 );
|
|
virtual bool Render( unsigned long uRenderBitVector, KViewportObject** ppViewportList, int nViewportCount );
|
|
public:
|
|
SGameAttackEffect();
|
|
virtual ~SGameAttackEffect();
|
|
}; |