forked from metin-server/m2dev-client-src
file encoding to utf-8
This commit is contained in:
@@ -112,7 +112,7 @@ void CActorInstance::OnUpdate()
|
||||
}
|
||||
|
||||
|
||||
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
|
||||
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
|
||||
IBackground& CActorInstance::GetBackground()
|
||||
{
|
||||
return IBackground::Instance();
|
||||
@@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position)
|
||||
m_v3FishingPosition = rv3Position;
|
||||
}
|
||||
|
||||
// ActorInstanceMotion.cpp 에 넣도록 하자
|
||||
// ActorInstanceMotion.cpp 에 넣도록 하자
|
||||
void CActorInstance::Move()
|
||||
{
|
||||
if (m_isWalking)
|
||||
@@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess()
|
||||
|
||||
void CActorInstance::__AccumulationMovement(float fRot)
|
||||
{
|
||||
// NOTE - 일단은 WAIT로 미끄러짐 방지
|
||||
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
|
||||
// NOTE - 일단은 WAIT로 미끄러짐 방지
|
||||
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
|
||||
if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
|
||||
return;
|
||||
|
||||
@@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
|
||||
return;
|
||||
}
|
||||
|
||||
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
|
||||
// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
|
||||
// 단 BGObject에 대해서만.
|
||||
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
|
||||
// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
|
||||
// 단 BGObject에 대해서만.
|
||||
|
||||
if (isAttacking() )
|
||||
return;
|
||||
@@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
|
||||
{
|
||||
BlockMovement();
|
||||
|
||||
//Movement초기화
|
||||
//Movement초기화
|
||||
/* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
|
||||
|
||||
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
||||
@@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_
|
||||
return;
|
||||
}
|
||||
|
||||
// Body는 하나임을 가정합니다.
|
||||
// Body는 하나임을 가정합니다.
|
||||
|
||||
if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f)
|
||||
return;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
// class CActorInstance
|
||||
|
||||
// Note : 캐릭터의 Lighting, Local Point Light, Weapon Trace 등의 효과와 콤보 데이타, 사운드 데이타,
|
||||
// 모션 데이타 들을 추상적, 총체적으로 관리하는 개별 매니저가 될 것이다.
|
||||
// Note : 캐릭터의 Lighting, Local Point Light, Weapon Trace 등의 효과와 콤보 데이타, 사운드 데이타,
|
||||
// 모션 데이타 들을 추상적, 총체적으로 관리하는 개별 매니저가 될 것이다.
|
||||
|
||||
#include "FlyTarget.h"
|
||||
#include "RaceData.h"
|
||||
@@ -64,7 +64,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
virtual void OnChangeShape() = 0;
|
||||
};
|
||||
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
|
||||
private:
|
||||
static IBackground& GetBackground();
|
||||
|
||||
@@ -217,7 +217,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
CActorInstance();
|
||||
virtual ~CActorInstance();
|
||||
|
||||
// 20041201.myevan.인스턴스베이스용 함수
|
||||
// 20041201.myevan.인스턴스베이스용 함수
|
||||
void INSTANCEBASE_Transform();
|
||||
void INSTANCEBASE_Deform();
|
||||
|
||||
@@ -294,13 +294,13 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Motion Queueing System
|
||||
void SetMotionMode(int iMotionMode); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
void SetMotionMode(int iMotionMode); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
int GetMotionMode();
|
||||
void SetLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f);
|
||||
bool InterceptOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f);
|
||||
bool InterceptLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f);
|
||||
bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다.
|
||||
void SetMotionLoopCount(int iCount);
|
||||
|
||||
bool IsPushing();
|
||||
@@ -346,9 +346,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Battle
|
||||
// Input
|
||||
// 하위로 옮길 가능성이 있는 코드들
|
||||
// 네트웍 연동시 전투 관련은 플레이어를 제외하곤 단순히 Showing Type이기 때문에
|
||||
// 조건 검사가 필요 없다.
|
||||
// 하위로 옮길 가능성이 있는 코드들
|
||||
// 네트웍 연동시 전투 관련은 플레이어를 제외하곤 단순히 Showing Type이기 때문에
|
||||
// 조건 검사가 필요 없다.
|
||||
void InputNormalAttackCommand(float fDirRot); // Process input - Only used by player's character
|
||||
bool InputComboAttackCommand(float fDirRot); // Process input - Only used by player's character
|
||||
|
||||
@@ -524,7 +524,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
void ClearFlyEventHandler();
|
||||
void SetFlyEventHandler(IFlyEventHandler * pHandler);
|
||||
|
||||
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
||||
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
||||
bool CanChangeTarget();
|
||||
|
||||
protected:
|
||||
@@ -567,7 +567,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
void CurrentMotionProcess();
|
||||
MOTION_KEY GetRandomMotionKey(MOTION_KEY dwMotionKey);
|
||||
|
||||
float GetLastMotionTime(float fBlendTime); // NOTE : 자동으로 BlendTime만큼을 앞당긴 시간을 리턴
|
||||
float GetLastMotionTime(float fBlendTime); // NOTE : 자동으로 BlendTime만큼을 앞당긴 시간을 리턴
|
||||
float GetMotionDuration(DWORD dwMotionKey);
|
||||
|
||||
bool InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f);
|
||||
@@ -637,31 +637,31 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
|
||||
protected:
|
||||
float __GetAttackSpeed();
|
||||
DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // 모션 데이터 설정
|
||||
DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // 모션 데이터 설정
|
||||
void __ClearMotion();
|
||||
|
||||
bool __BindMotionData(DWORD dwMotionKey); // 모션 데이터를 바인딩
|
||||
void __ClearHittedActorInstanceMap(); // 때려진 액터 인스턴스 맵을 지운다
|
||||
bool __BindMotionData(DWORD dwMotionKey); // 모션 데이터를 바인딩
|
||||
void __ClearHittedActorInstanceMap(); // 때려진 액터 인스턴스 맵을 지운다
|
||||
|
||||
UINT __GetMotionType(); // 모션 타입 얻기
|
||||
UINT __GetMotionType(); // 모션 타입 얻기
|
||||
|
||||
bool __IsNeedFlyTargetMotion(); // FlyTarget 이 필요한 모션인가?
|
||||
bool __HasMotionFlyEvent(); // 무언가를 쏘는가?
|
||||
bool __IsWaitMotion(); // 대기 모션 인가?
|
||||
bool __IsMoveMotion(); // 이동 모션 인가?
|
||||
bool __IsAttackMotion(); // 공격 모션 인가?
|
||||
bool __IsComboAttackMotion(); // 콤보 공격 모션 인가?
|
||||
bool __IsDamageMotion(); // 데미지 모션인가?
|
||||
bool __IsKnockDownMotion(); // 넉다운 모션인가?
|
||||
bool __IsDieMotion(); // 사망 모션 인가?
|
||||
bool __IsStandUpMotion(); // 일어서기 모션인가?
|
||||
bool __IsNeedFlyTargetMotion(); // FlyTarget 이 필요한 모션인가?
|
||||
bool __HasMotionFlyEvent(); // 무언가를 쏘는가?
|
||||
bool __IsWaitMotion(); // 대기 모션 인가?
|
||||
bool __IsMoveMotion(); // 이동 모션 인가?
|
||||
bool __IsAttackMotion(); // 공격 모션 인가?
|
||||
bool __IsComboAttackMotion(); // 콤보 공격 모션 인가?
|
||||
bool __IsDamageMotion(); // 데미지 모션인가?
|
||||
bool __IsKnockDownMotion(); // 넉다운 모션인가?
|
||||
bool __IsDieMotion(); // 사망 모션 인가?
|
||||
bool __IsStandUpMotion(); // 일어서기 모션인가?
|
||||
bool __IsMountingHorse();
|
||||
|
||||
bool __CanAttack(); // 공격 할수 있는가?
|
||||
bool __CanNextComboAttack(); // 다음 콤보 어택이 가능한가?
|
||||
bool __CanAttack(); // 공격 할수 있는가?
|
||||
bool __CanNextComboAttack(); // 다음 콤보 어택이 가능한가?
|
||||
|
||||
bool __IsComboAttacking(); // 콤보 공격중인가?
|
||||
void __CancelComboAttack(); // 콤보 공격 취소
|
||||
bool __IsComboAttacking(); // 콤보 공격중인가?
|
||||
void __CancelComboAttack(); // 콤보 공격 취소
|
||||
|
||||
WORD __GetCurrentMotionIndex();
|
||||
DWORD __GetCurrentMotionKey();
|
||||
@@ -683,9 +683,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
D3DXVECTOR3 __GetFlyTargetPosition();
|
||||
|
||||
protected:
|
||||
void __DestroyWeaponTrace(); // 무기 잔상을 제거한다
|
||||
void __ShowWeaponTrace(); // 무기 잔상을 보인다
|
||||
void __HideWeaponTrace(); // 무기 잔상을 감춘다
|
||||
void __DestroyWeaponTrace(); // 무기 잔상을 제거한다
|
||||
void __ShowWeaponTrace(); // 무기 잔상을 보인다
|
||||
void __HideWeaponTrace(); // 무기 잔상을 감춘다
|
||||
|
||||
protected:
|
||||
// collision data
|
||||
@@ -705,7 +705,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
// For Collision Detection
|
||||
TCollisionPointInstanceList m_BodyPointInstanceList;
|
||||
TCollisionPointInstanceList m_DefendingPointInstanceList;
|
||||
SSplashArea m_kSplashArea; // TODO : 복수에 대한 고려를 해야한다 - [levites]
|
||||
SSplashArea m_kSplashArea; // TODO : 복수에 대한 고려를 해야한다 - [levites]
|
||||
CAttributeInstance * m_pAttributeInstance;
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -736,7 +736,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
float m_fInvisibleTime;
|
||||
BOOL m_isHiding;
|
||||
|
||||
// TODO : State로 통합 시킬 수 있는지 고려해 볼것
|
||||
// TODO : State로 통합 시킬 수 있는지 고려해 볼것
|
||||
BOOL m_isResistFallen;
|
||||
BOOL m_isSleep;
|
||||
BOOL m_isFaint;
|
||||
@@ -822,7 +822,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject
|
||||
void __InitializeRotationData();
|
||||
void __InitializePositionData();
|
||||
|
||||
public: // InstanceBase 통합전 임시로 public
|
||||
public: // InstanceBase 통합전 임시로 public
|
||||
IEventHandler* __GetEventHandlerPtr();
|
||||
IEventHandler& __GetEventHandlerRef();
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ void CActorInstance::AttachWeapon(DWORD dwItemIndex,DWORD dwParentPartIndex, DWO
|
||||
}
|
||||
|
||||
__DestroyWeaponTrace();
|
||||
//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
|
||||
//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
|
||||
if (__IsRightHandWeapon(pItemData->GetWeaponType()))
|
||||
AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData);
|
||||
if (__IsLeftHandWeapon(pItemData->GetWeaponType()))
|
||||
@@ -182,7 +182,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
|
||||
if (!GetAttachingBoneName(dwPartIndex, &szBoneName))
|
||||
return;
|
||||
|
||||
// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
|
||||
// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
|
||||
if (CRaceData::PART_WEAPON_LEFT == dwPartIndex)
|
||||
{
|
||||
RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing());
|
||||
@@ -205,7 +205,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
|
||||
SetModelInstance(dwPartIndex, dwPartIndex, 0);
|
||||
AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex);
|
||||
|
||||
// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
|
||||
// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
|
||||
if (USE_WEAPON_SPECULAR)
|
||||
{
|
||||
SMaterialData kMaterialData;
|
||||
@@ -424,8 +424,8 @@ void CActorInstance::RefreshActorInstance()
|
||||
{
|
||||
const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData;
|
||||
|
||||
// FIXME : 첫번째 인자는 Part의 번호다.
|
||||
// Base는 무조건 0인가? - [levites]
|
||||
// FIXME : 첫번째 인자는 Part의 번호다.
|
||||
// Base는 무조건 0인가? - [levites]
|
||||
TCollisionPointInstance PointInstance;
|
||||
if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType)
|
||||
continue;
|
||||
|
||||
@@ -171,28 +171,28 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
|
||||
}
|
||||
else if (m_pkCurRaceMotionData->IsComboInputTimeData())
|
||||
{
|
||||
// 동작 경과 시간
|
||||
// 동작 경과 시간
|
||||
float fElapsedTime = GetAttackingElapsedTime();
|
||||
|
||||
// 이미 입력 한계 시간이 지났다면..
|
||||
// 이미 입력 한계 시간이 지났다면..
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
|
||||
{
|
||||
//Tracen("입력 한계 시간 지남");
|
||||
//Tracen("입력 한계 시간 지남");
|
||||
if (IsBowMode())
|
||||
m_isNextPreInput = TRUE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
|
||||
{
|
||||
//Tracen("다음 콤보 동작");
|
||||
//Tracen("다음 콤보 동작");
|
||||
// args : BlendingTime
|
||||
__RunNextCombo();
|
||||
return true;
|
||||
}
|
||||
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
|
||||
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
|
||||
{
|
||||
//Tracen("선 입력 설정");
|
||||
//Tracen("선 입력 설정");
|
||||
m_isPreInput = TRUE;
|
||||
return false;
|
||||
}
|
||||
@@ -200,9 +200,9 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
|
||||
else
|
||||
{
|
||||
float fElapsedTime = GetAttackingElapsedTime();
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
|
||||
{
|
||||
//Tracen("다음 콤보 동작");
|
||||
//Tracen("다음 콤보 동작");
|
||||
// args : BlendingTime
|
||||
__RunNextCombo();
|
||||
return true;
|
||||
@@ -230,7 +230,7 @@ void CActorInstance::ComboProcess()
|
||||
// Process PreInput
|
||||
if (m_isPreInput)
|
||||
{
|
||||
//Tracenf("선입력 %f 다음콤보시간 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
|
||||
//Tracenf("선입력 %f 다음콤보시간 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime());
|
||||
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime())
|
||||
{
|
||||
__RunNextCombo();
|
||||
@@ -244,8 +244,8 @@ void CActorInstance::ComboProcess()
|
||||
{
|
||||
m_isPreInput = FALSE;
|
||||
|
||||
if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수
|
||||
if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임
|
||||
if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수
|
||||
if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임
|
||||
{
|
||||
__RunNextCombo();
|
||||
m_isNextPreInput = FALSE;
|
||||
@@ -289,7 +289,7 @@ void CActorInstance::__RunNextCombo()
|
||||
ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f);
|
||||
|
||||
////////////////////////////////
|
||||
// 콤보가 끝났다면
|
||||
// 콤보가 끝났다면
|
||||
if (m_dwcurComboIndex == pComboData->ComboIndexVector.size())
|
||||
{
|
||||
__OnEndCombo();
|
||||
@@ -303,8 +303,8 @@ void CActorInstance::__OnEndCombo()
|
||||
m_dwcurComboIndex = 1;
|
||||
}
|
||||
|
||||
// 여기서 콤보를 초기화 해선 안된다.
|
||||
// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
|
||||
// 여기서 콤보를 초기화 해선 안된다.
|
||||
// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
|
||||
}
|
||||
|
||||
void CActorInstance::__ClearCombo()
|
||||
@@ -567,7 +567,7 @@ bool CActorInstance::__CanPushDestActor(CActorInstance& rkActorDst)
|
||||
if (rkActorDst.IsNPC())
|
||||
return false;
|
||||
|
||||
// 거대 몬스터 밀림 제외
|
||||
// 거대 몬스터 밀림 제외
|
||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||
if (IS_HUGE_RACE(rkActorDst.GetRace()))
|
||||
return false;
|
||||
@@ -588,15 +588,15 @@ bool IS_PARTY_HUNTING_RACE(unsigned int vnum)
|
||||
{
|
||||
return true;
|
||||
|
||||
// 모든 몬스터 파티 사냥 적용
|
||||
// 모든 몬스터 파티 사냥 적용
|
||||
/*
|
||||
if (vnum < 8) // 플레이어
|
||||
if (vnum < 8) // 플레이어
|
||||
return true;
|
||||
|
||||
if (vnum >= 8000 && vnum <= 8112) // 메틴석
|
||||
if (vnum >= 8000 && vnum <= 8112) // 메틴석
|
||||
return true;
|
||||
|
||||
if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터
|
||||
if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -624,13 +624,13 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
||||
// Invisible Time
|
||||
if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
|
||||
{
|
||||
if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
|
||||
if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
|
||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||
|
||||
if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
|
||||
if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
|
||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||
}
|
||||
else // 파티 사냥 몬스터가 아닐 경우만 적용
|
||||
else // 파티 사냥 몬스터가 아닐 경우만 적용
|
||||
{
|
||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||
}
|
||||
@@ -641,7 +641,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
||||
// Hit Effect
|
||||
D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z);
|
||||
|
||||
// #0000780: [M2KR] 수룡 타격구 문제
|
||||
// #0000780: [M2KR] 수룡 타격구 문제
|
||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||
if (IS_HUGE_RACE(rVictim.GetRace()))
|
||||
{
|
||||
@@ -652,7 +652,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
||||
|
||||
float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y));
|
||||
|
||||
// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
|
||||
// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
|
||||
if (rVictim.IsBuilding()||rVictim.IsDoor())
|
||||
{
|
||||
D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos;
|
||||
@@ -674,7 +674,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
||||
|
||||
if (rVictim.IsBuilding())
|
||||
{
|
||||
// 2004.08.03.빌딩의 경우 흔들리면 이상하다
|
||||
// 2004.08.03.빌딩의 경우 흔들리면 이상하다
|
||||
}
|
||||
else if (rVictim.IsStone() || rVictim.IsDoor())
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
|
||||
{
|
||||
if (!pPointInstance)
|
||||
{
|
||||
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -95,12 +95,12 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
|
||||
|
||||
void CActorInstance::UpdateAdvancingPointInstance()
|
||||
{
|
||||
// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
|
||||
// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
|
||||
D3DXVECTOR3 v3Movement = m_v3Movement;
|
||||
if (m_pkHorse)
|
||||
v3Movement = m_pkHorse->m_v3Movement;
|
||||
|
||||
// 말은 업데이트 하지 않아도 된다 - [levites]
|
||||
// 말은 업데이트 하지 않아도 된다 - [levites]
|
||||
if (m_pkHorse)
|
||||
m_pkHorse->UpdateAdvancingPointInstance();
|
||||
|
||||
@@ -169,7 +169,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
|
||||
{
|
||||
if (!c_pAttackingSphereVector)
|
||||
{
|
||||
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
|
||||
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
|
||||
|
||||
if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere))
|
||||
{
|
||||
// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
|
||||
// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
|
||||
*pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f;
|
||||
return true;
|
||||
}
|
||||
@@ -200,19 +200,19 @@ bool CActorInstance::CreateCollisionInstancePiece(DWORD dwAttachingModelIndex, c
|
||||
{
|
||||
if (!c_pAttachingData)
|
||||
{
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!c_pAttachingData->pCollisionData)
|
||||
{
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!pPointInstance)
|
||||
{
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -279,18 +279,18 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
||||
const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData;
|
||||
THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap;
|
||||
|
||||
// NOTE : 이미 때렸다면 때릴 수 없음
|
||||
// NOTE : 이미 때렸다면 때릴 수 없음
|
||||
if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// NOTE : Snipe 모드이고..
|
||||
// NOTE : Snipe 모드이고..
|
||||
if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType)
|
||||
{
|
||||
// Target 이 PC 라면..
|
||||
// Target 이 PC 라면..
|
||||
if (__IsFlyTargetPC())
|
||||
// 다른 객체는 때릴 수 없다
|
||||
// 다른 객체는 때릴 수 없다
|
||||
if (!__IsSameFlyTarget(&rVictim))
|
||||
return FALSE;
|
||||
|
||||
@@ -299,7 +299,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
||||
{
|
||||
CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget();
|
||||
|
||||
// NOTE : Target 이 PC 일때는 한명만 때릴 수 있다.
|
||||
// NOTE : Target 이 PC 일때는 한명만 때릴 수 있다.
|
||||
if (pActorInstance->IsPC())
|
||||
if (&rVictim != pActorInstance)
|
||||
return FALSE;
|
||||
@@ -333,7 +333,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
||||
BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
||||
{
|
||||
// Check Distance
|
||||
// NOTE - 일단 근접 체크만 하고 있음
|
||||
// NOTE - 일단 근접 체크만 하고 있음
|
||||
D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z);
|
||||
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
||||
|
||||
@@ -362,7 +362,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
||||
{
|
||||
const NRaceData::THitData & c_rHitData = *itorHitData;
|
||||
|
||||
// NOTE : 이미 맞았는지 체크
|
||||
// NOTE : 이미 맞았는지 체크
|
||||
THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData);
|
||||
if (itHitData != m_HitDataMap.end())
|
||||
{
|
||||
@@ -437,7 +437,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
||||
//Tracef(" ----------- Next Hit : %d\n", itHitData->second.size());
|
||||
|
||||
int iCurrentHitCount = itHitData->second.size();
|
||||
// NOTE : 보통 공격은 16명이 한계
|
||||
// NOTE : 보통 공격은 16명이 한계
|
||||
if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType)
|
||||
{
|
||||
if (iCurrentHitCount > 16)
|
||||
@@ -458,7 +458,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
||||
|
||||
D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f;
|
||||
|
||||
// #0000780: [M2KR] 수룡 타격구 문제
|
||||
// #0000780: [M2KR] 수룡 타격구 문제
|
||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||
if (IS_HUGE_RACE(rVictim.GetRace()))
|
||||
{
|
||||
@@ -503,8 +503,8 @@ BOOL CActorInstance::TestPhysicsBlendingCollision(CActorInstance & rVictim)
|
||||
if (fDistance > 800.0f*800.0f)
|
||||
return FALSE;
|
||||
|
||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||
TCollisionPointInstanceList * pMainList;
|
||||
TCollisionPointInstanceList * pVictimList;
|
||||
if (isAttacking() || IsWaiting())
|
||||
@@ -589,17 +589,17 @@ BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim)
|
||||
return FALSE;
|
||||
|
||||
// Check Distance
|
||||
// NOTE : 적당히 멀면 체크 안함
|
||||
// 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
|
||||
// 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
|
||||
// 만약 그렇지 않다면 거리로 체크해서 걸러준다.
|
||||
// NOTE : 적당히 멀면 체크 안함
|
||||
// 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
|
||||
// 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
|
||||
// 만약 그렇지 않다면 거리로 체크해서 걸러준다.
|
||||
D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
|
||||
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
||||
if (fDistance > 800.0f*800.0f)
|
||||
return FALSE;
|
||||
|
||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||
TCollisionPointInstanceList * pMainList;
|
||||
TCollisionPointInstanceList * pVictimList;
|
||||
if (isAttacking() || IsWaiting())
|
||||
|
||||
@@ -79,7 +79,7 @@ bool CActorInstance::SetRace(DWORD eRace)
|
||||
|
||||
CGraphicThingInstance::Clear();
|
||||
|
||||
//NOTE : PC만 Part별로 다 생성하게 해준다.
|
||||
//NOTE : PC만 Part별로 다 생성하게 해준다.
|
||||
if( IsPC())
|
||||
{
|
||||
CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);
|
||||
|
||||
@@ -107,7 +107,7 @@ void CActorInstance::SetFlyEventHandler(IFlyEventHandler * pHandler)
|
||||
m_pFlyEventHandler = pHandler;
|
||||
}
|
||||
|
||||
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
||||
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
||||
bool CActorInstance::CanChangeTarget()
|
||||
{
|
||||
if (__IsNeedFlyTargetMotion())
|
||||
|
||||
@@ -65,11 +65,11 @@ void CActorInstance::ReservingMotionProcess()
|
||||
case CRaceMotionData::NAME_STAND_UP_BACK:
|
||||
if (IsFaint())
|
||||
{
|
||||
//Tracenf("일어서려고 했으나 기절중");
|
||||
//Tracenf("일어서려고 했으나 기절중");
|
||||
|
||||
SetEndStopMotion();
|
||||
|
||||
// 이후의 모션 전부 1초씩 딜레이
|
||||
// 이후의 모션 전부 1초씩 딜레이
|
||||
TMotionDeque::iterator itor = m_MotionDeque.begin();
|
||||
for (; itor != m_MotionDeque.end(); ++itor)
|
||||
{
|
||||
@@ -98,12 +98,12 @@ void CActorInstance::ReservingMotionProcess()
|
||||
case CRaceMotionData::NAME_STAND_UP_BACK:
|
||||
if (IsDead())
|
||||
{
|
||||
//Tracenf("일어서려고 했으나 사망");
|
||||
// 예전 데이터로 복구
|
||||
//Tracenf("일어서려고 했으나 사망");
|
||||
// 예전 데이터로 복구
|
||||
m_kCurMotNode=kPrevMotionNode;
|
||||
__ClearMotion();
|
||||
|
||||
// 이전 동작 마지막 상태 유지
|
||||
// 이전 동작 마지막 상태 유지
|
||||
SetEndStopMotion();
|
||||
return;
|
||||
}
|
||||
@@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess()
|
||||
if (0 == dwRealMotionKey)
|
||||
return;
|
||||
|
||||
// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
|
||||
// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
|
||||
//float fDurationTime=rReservingMotionNode.fDuration;
|
||||
float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
||||
float fStartTime = rReservingMotionNode.fStartTime;
|
||||
@@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess()
|
||||
|
||||
void CActorInstance::CurrentMotionProcess()
|
||||
{
|
||||
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
|
||||
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
|
||||
if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount)
|
||||
m_kCurMotNode.dwcurFrame = 0;
|
||||
|
||||
@@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess()
|
||||
|
||||
bool isLooping=false;
|
||||
|
||||
// 끝났다면 Playing Flag를 끈다
|
||||
// 끝났다면 Playing Flag를 끈다
|
||||
if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion())
|
||||
{
|
||||
if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1)
|
||||
@@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee
|
||||
m_kCurMotNode.uSkill = 0;
|
||||
}
|
||||
|
||||
// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
|
||||
// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
|
||||
bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio)
|
||||
{
|
||||
if (!m_pkCurRaceData)
|
||||
@@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion,
|
||||
|
||||
assert(NULL != m_pkCurRaceMotionData);
|
||||
|
||||
// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
|
||||
// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;;
|
||||
// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
|
||||
// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;;
|
||||
// float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio;
|
||||
float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
||||
|
||||
@@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
|
||||
|
||||
MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
|
||||
{
|
||||
// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
|
||||
// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
|
||||
// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
|
||||
// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
|
||||
WORD wMode = GET_MOTION_MODE(dwMotionKey);
|
||||
WORD wIndex = GET_MOTION_INDEX(dwMotionKey);
|
||||
|
||||
@@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
|
||||
dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i);
|
||||
|
||||
// Temporary
|
||||
// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
|
||||
// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
|
||||
// m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey);
|
||||
// Temporary
|
||||
|
||||
@@ -668,7 +668,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
||||
{
|
||||
if (!m_isMain)
|
||||
{
|
||||
Logn(0, "주인공이 아니라면 이동중이라 데미지 동작을 취하지 않음");
|
||||
Logn(0, "주인공이 아니라면 이동중이라 데미지 동작을 취하지 않음");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
||||
}
|
||||
|
||||
|
||||
// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
|
||||
// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
|
||||
if (__IsHiding())
|
||||
{
|
||||
__ShowEvent();
|
||||
@@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
||||
m_pkHorse->__BindMotionData(dwChildMotKey);
|
||||
|
||||
if (c_rkSetMotData.iLoopCount)
|
||||
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
|
||||
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
|
||||
else
|
||||
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP;
|
||||
|
||||
@@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
||||
|
||||
if (__CanAttack())
|
||||
{
|
||||
// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
|
||||
// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
|
||||
__ShowWeaponTrace();
|
||||
|
||||
m_HitDataMap.clear();
|
||||
@@ -752,12 +752,12 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
||||
{
|
||||
if (!__CanNextComboAttack())
|
||||
{
|
||||
// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
|
||||
m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
|
||||
// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
|
||||
m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
|
||||
|
||||
// NOTE : ClearCombo() 를 수행해서는 안된다.
|
||||
// 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
|
||||
//Tracef("MotionData에 콤보 데이타가 들어 있지 않습니다.\n");
|
||||
// NOTE : ClearCombo() 를 수행해서는 안된다.
|
||||
// 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
|
||||
//Tracef("MotionData에 콤보 데이타가 들어 있지 않습니다.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,7 +303,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
|
||||
if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType)
|
||||
return;
|
||||
|
||||
// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
|
||||
// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
|
||||
static const float sc_fDistanceFromTarget = 270.0f;
|
||||
|
||||
if (m_kFlyTarget.IsValidTarget())
|
||||
@@ -315,7 +315,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
|
||||
D3DXVec3Normalize(&v3Distance, &v3Distance);
|
||||
TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget);
|
||||
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
|
||||
IBackground& rkBG=GetBackground();
|
||||
if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y))
|
||||
SetPixelPosition(DestPixelPosition);
|
||||
|
||||
@@ -38,8 +38,8 @@ void CActorInstance::OnRender()
|
||||
kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor);
|
||||
STATEMANAGER.SetMaterial(&kMtrl);
|
||||
|
||||
// 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로..
|
||||
// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
|
||||
// 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로..
|
||||
// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
|
||||
STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
||||
|
||||
switch(m_iRenderMode)
|
||||
|
||||
@@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
|
||||
m_fcurRotation = m_rotEnd;
|
||||
}
|
||||
|
||||
// FIXME : "건물일때만 체크"로 바꾼다. - [levites]
|
||||
// FIXME : "건물일때만 체크"로 바꾼다. - [levites]
|
||||
if (0.0f != m_rotX || 0.0f != m_rotY)
|
||||
{
|
||||
CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
|
||||
|
||||
@@ -483,7 +483,7 @@ void CArea::__Load_BuildObjectInstances()
|
||||
|
||||
__SetObjectInstance(*it, c_pObjectData);
|
||||
|
||||
// 최적화용
|
||||
// 최적화용
|
||||
if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING)
|
||||
m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) );
|
||||
}
|
||||
@@ -718,7 +718,7 @@ void CArea::__SetObjectInstance_SetDungeonBlock(TObjectInstance * pObjectInstanc
|
||||
|
||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||
{
|
||||
// OBB를 사용한 충돌 정보 자동 생성.
|
||||
// OBB를 사용한 충돌 정보 자동 생성.
|
||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||
|
||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||
@@ -733,7 +733,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
||||
std::transform(attrFileName.begin(), attrFileName.end(), attrFileName.begin(), [](unsigned char c) { return std::tolower(c); });
|
||||
const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\"));
|
||||
|
||||
// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
|
||||
// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
|
||||
if (pAttributeData->IsEmpty() && false == bIsDungeonObject)
|
||||
{
|
||||
if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance)
|
||||
@@ -775,7 +775,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
||||
/*
|
||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||
{
|
||||
// AABB를 사용한 충돌 정보 자동 생성.
|
||||
// AABB를 사용한 충돌 정보 자동 생성.
|
||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||
|
||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||
@@ -803,7 +803,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
||||
collision.v3Position = (v3Min + v3Max) * 0.5f;
|
||||
|
||||
D3DXVECTOR3 vDelta = (v3Max - v3Min);
|
||||
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
|
||||
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
|
||||
collision.fDimensions[1] = vDelta.y * 0.5f;
|
||||
collision.fDimensions[2] = vDelta.z * 0.5f;
|
||||
|
||||
@@ -827,7 +827,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
||||
/*
|
||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||
{
|
||||
// Sphere를 사용한 충돌 정보 자동 생성.
|
||||
// Sphere를 사용한 충돌 정보 자동 생성.
|
||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||
|
||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||
@@ -937,7 +937,7 @@ bool CArea::__Load_LoadObject(const char * c_szFileName)
|
||||
ObjectData.Position.z = atof(c_rstrzPosition.c_str());
|
||||
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
||||
|
||||
// 20041217.myevan.로테이션 공식 변경
|
||||
// 20041217.myevan.로테이션 공식 변경
|
||||
ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0;
|
||||
if (rVector.size() > 4)
|
||||
{
|
||||
@@ -1037,7 +1037,7 @@ bool CArea::__Load_LoadAmbience(const char * c_szFileName)
|
||||
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
||||
ObjectData.dwRange = atoi(c_rstrRange.c_str());
|
||||
|
||||
// 20041217.myevan.로테이션 초기화
|
||||
// 20041217.myevan.로테이션 초기화
|
||||
ObjectData.InitializeRotation();
|
||||
ObjectData.m_fHeightBias = 0.0f;
|
||||
ObjectData.fMaxVolumeAreaPercentage = 0.0f;
|
||||
@@ -1271,7 +1271,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance)
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Coordination 관련
|
||||
// Coordination 관련
|
||||
void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY)
|
||||
{
|
||||
*usCoordX = m_wX;
|
||||
|
||||
@@ -157,7 +157,7 @@ class CArea
|
||||
typedef std::vector<CDungeonBlock *> TDungeonBlockInstanceVector;
|
||||
typedef std::vector<TObjectInstance *> TObjectInstanceVector;
|
||||
typedef std::vector<TAmbienceInstance *> TAmbienceInstanceVector;
|
||||
typedef std::map<CGraphicThingInstance *, DWORD> TGraphicThingInstanceCRCMap; // 최적화용 by 동현
|
||||
typedef std::map<CGraphicThingInstance *, DWORD> TGraphicThingInstanceCRCMap; // 최적화용 by 동현
|
||||
typedef std::set<int> TShowingPortalIDSet;
|
||||
|
||||
typedef struct SCRCWithNumber
|
||||
@@ -264,7 +264,7 @@ class CArea
|
||||
|
||||
protected:
|
||||
// Static Data
|
||||
TObjectDataVector m_ObjectDataVector; // Area 상에 있는 오브젝트들
|
||||
TObjectDataVector m_ObjectDataVector; // Area 상에 있는 오브젝트들
|
||||
|
||||
// Rendering Instances
|
||||
TObjectInstanceVector m_ObjectInstanceVector;
|
||||
@@ -280,7 +280,7 @@ class CArea
|
||||
TCRCWithNumberVector m_kRenderedThingInstanceCRCWithNumberVector;
|
||||
TThingInstanceVector m_kRenderedGrapphicThingInstanceVector;
|
||||
|
||||
// 좌표 : 심리스 맵 전체 중에서의 좌표... 둘다 0~999
|
||||
// 좌표 : 심리스 맵 전체 중에서의 좌표... 둘다 0~999
|
||||
WORD m_wX;
|
||||
WORD m_wY;
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ void TEMP_CAreaLoaderThread::Shutdown()
|
||||
}
|
||||
while (!bRet);
|
||||
|
||||
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
||||
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
||||
}
|
||||
|
||||
UINT TEMP_CAreaLoaderThread::Execute(void * pvArg)
|
||||
|
||||
@@ -130,7 +130,7 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Seamless용 새로운 함수들...
|
||||
// Seamless용 새로운 함수들...
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CTerrain::CopySettingFromGlobalSetting()
|
||||
@@ -893,7 +893,7 @@ void CTerrain::PutImage16(BYTE *src, BYTE *dst, long src_pitch, long dst_pitch,
|
||||
for (int x = 0; x < texturewidth; ++x)
|
||||
{
|
||||
WORD packed_pixel = src[x] << 8;
|
||||
//& 연산 한번이 아깝다
|
||||
//& 연산 한번이 아깝다
|
||||
//WORD packed_pixel = (src[x]&0xF0) << 8;
|
||||
*((WORD*)(dst+x*2)) = packed_pixel;
|
||||
}
|
||||
@@ -1000,11 +1000,11 @@ void CTerrain::_CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY)
|
||||
lpTerrainVertex->kPosition = kPosition;
|
||||
lpTerrainVertex->kNormal = kNormal;
|
||||
|
||||
if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의
|
||||
if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의
|
||||
++wNumCliffType;
|
||||
else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의
|
||||
else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의
|
||||
++wNumHillType;
|
||||
else // 그 이상은 plain 타입
|
||||
else // 그 이상은 plain 타입
|
||||
++wNumPlainType;
|
||||
|
||||
if (kPosition.z > fMaxZ)
|
||||
|
||||
@@ -83,8 +83,8 @@ void CFlyTrace::Update()
|
||||
|
||||
}
|
||||
|
||||
//1. 알파를 쓰려면 색깔만 줄수있다.
|
||||
//2. 텍스쳐를 쓰려면 알파 없다-_-
|
||||
//1. 알파를 쓰려면 색깔만 줄수있다.
|
||||
//2. 텍스쳐를 쓰려면 알파 없다-_-
|
||||
|
||||
|
||||
struct TFlyVertex
|
||||
|
||||
@@ -111,7 +111,7 @@ void CFlyingInstance::__SetTargetDirection(const CFlyTarget& c_rkTarget)
|
||||
{
|
||||
D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition();
|
||||
|
||||
// 임시 코드
|
||||
// 임시 코드
|
||||
if (m_pData->m_bMaintainParallel)
|
||||
{
|
||||
v3TargetPos.z += 50.0f;
|
||||
@@ -131,7 +131,7 @@ void CFlyingInstance::__SetTargetNormalizedDirection(const D3DXVECTOR3 & v3Nomal
|
||||
Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot);
|
||||
}
|
||||
|
||||
// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
||||
// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
||||
void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target)
|
||||
{
|
||||
//m_pFlyTarget = pTarget;
|
||||
@@ -463,7 +463,7 @@ bool CFlyingInstance::Update()
|
||||
|
||||
if (m_pData->m_bHitOnBackground)
|
||||
{
|
||||
// 지형 충돌
|
||||
// 지형 충돌
|
||||
|
||||
if (CFlyingManager::Instance().GetMapManagerPtr())
|
||||
{
|
||||
@@ -478,7 +478,7 @@ bool CFlyingInstance::Update()
|
||||
}
|
||||
}
|
||||
|
||||
// 건물+나무 충돌
|
||||
// 건물+나무 충돌
|
||||
|
||||
FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position);
|
||||
rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying);
|
||||
|
||||
@@ -11,8 +11,8 @@ class CActorInstance;
|
||||
class CFlyingInstance
|
||||
{
|
||||
public:
|
||||
// 2004. 3. 26. myevan. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
||||
void Clear(); // Destroy와 같다
|
||||
// 2004. 3. 26. myevan. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
||||
void Clear(); // Destroy와 같다
|
||||
void SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition);
|
||||
void SetFlyTarget(const CFlyTarget & cr_Target); // Shot at Target
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
void SetOwner(IActorInstance * pOwner) { m_pOwner = pOwner; }
|
||||
void SetSkillIndex(DWORD dwIndex) { m_dwSkillIndex = dwIndex; }
|
||||
|
||||
// FIXME : 툴에서 사용하고 있습니다. 임시로 위로.. - [levites]
|
||||
// FIXME : 툴에서 사용하고 있습니다. 임시로 위로.. - [levites]
|
||||
void __Explode(bool bBomb=true);
|
||||
void __Bomb();
|
||||
|
||||
@@ -67,7 +67,7 @@ protected:
|
||||
|
||||
void __SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition);
|
||||
void __SetTargetDirection(const CFlyTarget& c_rkTarget);
|
||||
void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // 시작 타겟 방향 설정
|
||||
void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // 시작 타겟 방향 설정
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
//
|
||||
// CGameEventManager
|
||||
//
|
||||
// Note : Game상에서 일어나는 폭발, 화면 흔들림, Range 무기들의 움직임과 타격 등의 Event
|
||||
// 를 종합적으로 관리하는 클래스. - [levites]
|
||||
// Note : Game상에서 일어나는 폭발, 화면 흔들림, Range 무기들의 움직임과 타격 등의 Event
|
||||
// 를 종합적으로 관리하는 클래스. - [levites]
|
||||
//
|
||||
// Note : 게임상의 Cinematic Event 를 컨트롤하는 매니져로 사용한다. 2004.07.19 - [levites]
|
||||
// Note : 게임상의 Cinematic Event 를 컨트롤하는 매니져로 사용한다. 2004.07.19 - [levites]
|
||||
//
|
||||
|
||||
class CGameEventManager : public CSingleton<CGameEventManager>, public CScreen
|
||||
|
||||
@@ -82,8 +82,8 @@ BOOL NRaceData::LoadMotionAttackData(CTextFileLoader & rTextFileLoader, TMotionA
|
||||
if (!LoadAttackData(rTextFileLoader, pData))
|
||||
return FALSE;
|
||||
|
||||
// NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음
|
||||
// 기존 데이타의 경우 없으면 기존 것으로 읽게끔..
|
||||
// NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음
|
||||
// 기존 데이타의 경우 없으면 기존 것으로 읽게끔..
|
||||
if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType))
|
||||
{
|
||||
if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType))
|
||||
|
||||
@@ -99,7 +99,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
|
||||
float ta = D3DXVec3Dot(&p,&da)/la/la;
|
||||
float tb = D3DXVec3Dot(&p,&db)/lb/lb;
|
||||
|
||||
// FIXME 구 체크가 아니다
|
||||
// FIXME 구 체크가 아니다
|
||||
|
||||
if (ta<0)
|
||||
return false;
|
||||
@@ -148,7 +148,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
|
||||
//*/
|
||||
|
||||
/*
|
||||
// NOTE : AABB 체크 할 것
|
||||
// NOTE : AABB 체크 할 것
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position;
|
||||
float fDistance = D3DXVec3Length(&v3Distance);
|
||||
@@ -275,15 +275,15 @@ bool DetectCollisionStaticSphereVSStaticCylinder(const TSphereData & c_rSphere,
|
||||
|
||||
bool IsCWAcuteAngle(float begin, float end)
|
||||
{
|
||||
// 360 - src + dest // 시계 반대 방향
|
||||
// src - dest // 시계 방향
|
||||
// 360 - src + dest // 시계 반대 방향
|
||||
// src - dest // 시계 방향
|
||||
return ((360.0f - begin + end) > (begin - end));
|
||||
}
|
||||
|
||||
bool IsCCWAcuteAngle(float begin, float end)
|
||||
{
|
||||
// abs(360 - dest + src) // 시계 방향
|
||||
// dest - src // 시계 반대 방향
|
||||
// abs(360 - dest + src) // 시계 방향
|
||||
// dest - src // 시계 반대 방향
|
||||
int fValue = abs((int) (360.0f - end + begin));
|
||||
return fValue >= (end - begin) ? true : false;
|
||||
}
|
||||
@@ -299,7 +299,7 @@ bool IsCCWRotation(float begin, float end)
|
||||
// 270 90
|
||||
// 0
|
||||
//
|
||||
// 시계 반대
|
||||
// 시계 반대
|
||||
return (begin - end < 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
|
||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결
|
||||
class IBackground : public CSingleton<IBackground>
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName)
|
||||
}
|
||||
|
||||
// Attaching Data
|
||||
// Item 에 Attaching Data 일단 없음.
|
||||
// Item 에 Attaching Data 일단 없음.
|
||||
// if (TextFileLoader.SetChildNode("attachingdata"))
|
||||
// {
|
||||
// if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
|
||||
@@ -203,7 +203,7 @@ void CItemData::__SetIconImage(const char * c_szFileName)
|
||||
{
|
||||
if (!CResourceManager::Instance().IsFileExist(c_szFileName))
|
||||
{
|
||||
TraceError("%s 파일이 없습니다.CItemData::__SetIconImage",c_szFileName);
|
||||
TraceError("%s 파일이 없습니다.CItemData::__SetIconImage",c_szFileName);
|
||||
m_pIconImage = NULL;
|
||||
}
|
||||
else if (m_pIconImage == NULL)
|
||||
@@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const
|
||||
return m_ItemTable.alSockets[byIndex];
|
||||
}
|
||||
|
||||
//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
|
||||
//SocketCount = 1 이면 초급무기
|
||||
//SocketCount = 2 이면 중급무기
|
||||
//SocketCount = 3 이면 고급무기
|
||||
//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
|
||||
//SocketCount = 1 이면 초급무기
|
||||
//SocketCount = 2 이면 중급무기
|
||||
//SocketCount = 3 이면 고급무기
|
||||
int CItemData::GetSocketCount() const
|
||||
{
|
||||
return m_ItemTable.bGainSocketPct;
|
||||
@@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const
|
||||
return float(uSpecularPower) / 100.0f;
|
||||
}
|
||||
|
||||
//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
|
||||
//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
|
||||
UINT CItemData::GetRefine() const
|
||||
{
|
||||
return GetIndex()%10;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
// NOTE : Item의 통합 관리 클래스다.
|
||||
// NOTE : Item의 통합 관리 클래스다.
|
||||
// Icon, Model (droped on ground), Game Data
|
||||
|
||||
#include "../eterLib/GrpSubImage.h"
|
||||
@@ -22,18 +22,18 @@ class CItemData
|
||||
enum EItemType
|
||||
{
|
||||
ITEM_TYPE_NONE, //0
|
||||
ITEM_TYPE_WEAPON, //1//무기
|
||||
ITEM_TYPE_ARMOR, //2//갑옷
|
||||
ITEM_TYPE_USE, //3//아이템 사용
|
||||
ITEM_TYPE_WEAPON, //1//무기
|
||||
ITEM_TYPE_ARMOR, //2//갑옷
|
||||
ITEM_TYPE_USE, //3//아이템 사용
|
||||
ITEM_TYPE_AUTOUSE, //4
|
||||
ITEM_TYPE_MATERIAL, //5
|
||||
ITEM_TYPE_SPECIAL, //6 //스페셜 아이템
|
||||
ITEM_TYPE_SPECIAL, //6 //스페셜 아이템
|
||||
ITEM_TYPE_TOOL, //7
|
||||
ITEM_TYPE_LOTTERY, //8//복권
|
||||
ITEM_TYPE_ELK, //9//돈
|
||||
ITEM_TYPE_LOTTERY, //8//복권
|
||||
ITEM_TYPE_ELK, //9//돈
|
||||
ITEM_TYPE_METIN, //10
|
||||
ITEM_TYPE_CONTAINER, //11
|
||||
ITEM_TYPE_FISH, //12//낚시
|
||||
ITEM_TYPE_FISH, //12//낚시
|
||||
ITEM_TYPE_ROD, //13
|
||||
ITEM_TYPE_RESOURCE, //14
|
||||
ITEM_TYPE_CAMPFIRE, //15
|
||||
@@ -41,21 +41,21 @@ class CItemData
|
||||
ITEM_TYPE_SKILLBOOK, //17
|
||||
ITEM_TYPE_QUEST, //18
|
||||
ITEM_TYPE_POLYMORPH, //19
|
||||
ITEM_TYPE_TREASURE_BOX, //20//보물상자
|
||||
ITEM_TYPE_TREASURE_KEY, //21//보물상자 열쇠
|
||||
ITEM_TYPE_TREASURE_BOX, //20//보물상자
|
||||
ITEM_TYPE_TREASURE_KEY, //21//보물상자 열쇠
|
||||
ITEM_TYPE_SKILLFORGET, //22
|
||||
ITEM_TYPE_GIFTBOX, //23
|
||||
ITEM_TYPE_PICK, //24
|
||||
ITEM_TYPE_HAIR, //25//머리
|
||||
ITEM_TYPE_TOTEM, //26//토템
|
||||
ITEM_TYPE_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물
|
||||
ITEM_TYPE_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템)
|
||||
ITEM_TYPE_DS, //29 //용혼석
|
||||
ITEM_TYPE_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨)
|
||||
ITEM_TYPE_EXTRACT, //31 추출도구.
|
||||
ITEM_TYPE_SECONDARY_COIN, //32 명도전.
|
||||
ITEM_TYPE_RING, //33 반지 (유니크 슬롯이 아닌 순수 반지 슬롯)
|
||||
ITEM_TYPE_BELT, //34 벨트
|
||||
ITEM_TYPE_HAIR, //25//머리
|
||||
ITEM_TYPE_TOTEM, //26//토템
|
||||
ITEM_TYPE_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물
|
||||
ITEM_TYPE_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템)
|
||||
ITEM_TYPE_DS, //29 //용혼석
|
||||
ITEM_TYPE_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨)
|
||||
ITEM_TYPE_EXTRACT, //31 추출도구.
|
||||
ITEM_TYPE_SECONDARY_COIN, //32 명도전.
|
||||
ITEM_TYPE_RING, //33 반지 (유니크 슬롯이 아닌 순수 반지 슬롯)
|
||||
ITEM_TYPE_BELT, //34 벨트
|
||||
|
||||
ITEM_TYPE_MAX_NUM,
|
||||
};
|
||||
@@ -63,7 +63,7 @@ class CItemData
|
||||
enum EWeaponSubTypes
|
||||
{
|
||||
WEAPON_SWORD,
|
||||
WEAPON_DAGGER, //이도류
|
||||
WEAPON_DAGGER, //이도류
|
||||
WEAPON_BOW,
|
||||
WEAPON_TWO_HANDED,
|
||||
WEAPON_BELL,
|
||||
@@ -100,8 +100,8 @@ class CItemData
|
||||
|
||||
enum ECostumeSubTypes
|
||||
{
|
||||
COSTUME_BODY, //0 갑옷(main look)
|
||||
COSTUME_HAIR, //1 헤어(탈착가능)
|
||||
COSTUME_BODY, //0 갑옷(main look)
|
||||
COSTUME_HAIR, //1 헤어(탈착가능)
|
||||
COSTUME_NUM_TYPES,
|
||||
};
|
||||
|
||||
@@ -136,8 +136,8 @@ class CItemData
|
||||
USE_UNBIND,
|
||||
USE_TIME_CHARGE_PER,
|
||||
USE_TIME_CHARGE_FIX, // 28
|
||||
USE_PUT_INTO_BELT_SOCKET, // 29 벨트 소켓에 사용할 수 있는 아이템
|
||||
USE_PUT_INTO_RING_SOCKET, // 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯)
|
||||
USE_PUT_INTO_BELT_SOCKET, // 29 벨트 소켓에 사용할 수 있는 아이템
|
||||
USE_PUT_INTO_RING_SOCKET, // 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯)
|
||||
};
|
||||
|
||||
enum EDragonSoulSubType
|
||||
@@ -168,16 +168,16 @@ class CItemData
|
||||
LIMIT_CON,
|
||||
LIMIT_PCBANG,
|
||||
|
||||
/// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입)
|
||||
/// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입)
|
||||
LIMIT_REAL_TIME,
|
||||
|
||||
/// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작
|
||||
/// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가
|
||||
/// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘.
|
||||
/// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작
|
||||
/// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가
|
||||
/// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘.
|
||||
LIMIT_REAL_TIME_START_FIRST_USE,
|
||||
|
||||
/// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템
|
||||
/// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사)
|
||||
/// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템
|
||||
/// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사)
|
||||
LIMIT_TIMER_BASED_ON_WEAR,
|
||||
|
||||
LIMIT_MAX_NUM
|
||||
@@ -185,41 +185,41 @@ class CItemData
|
||||
|
||||
enum EItemAntiFlag
|
||||
{
|
||||
ITEM_ANTIFLAG_FEMALE = (1 << 0), // 여성 사용 불가
|
||||
ITEM_ANTIFLAG_MALE = (1 << 1), // 남성 사용 불가
|
||||
ITEM_ANTIFLAG_WARRIOR = (1 << 2), // 무사 사용 불가
|
||||
ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // 자객 사용 불가
|
||||
ITEM_ANTIFLAG_SURA = (1 << 4), // 수라 사용 불가
|
||||
ITEM_ANTIFLAG_SHAMAN = (1 << 5), // 무당 사용 불가
|
||||
ITEM_ANTIFLAG_GET = (1 << 6), // 집을 수 없음
|
||||
ITEM_ANTIFLAG_DROP = (1 << 7), // 버릴 수 없음
|
||||
ITEM_ANTIFLAG_SELL = (1 << 8), // 팔 수 없음
|
||||
ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C 제국 사용 불가
|
||||
ITEM_ANTIFLAG_SAVE = (1 << 12), // 저장되지 않음
|
||||
ITEM_ANTIFLAG_GIVE = (1 << 13), // 거래 불가
|
||||
ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK시 떨어지지 않음
|
||||
ITEM_ANTIFLAG_STACK = (1 << 15), // 합칠 수 없음
|
||||
ITEM_ANTIFLAG_MYSHOP = (1 << 16), // 개인 상점에 올릴 수 없음
|
||||
ITEM_ANTIFLAG_FEMALE = (1 << 0), // 여성 사용 불가
|
||||
ITEM_ANTIFLAG_MALE = (1 << 1), // 남성 사용 불가
|
||||
ITEM_ANTIFLAG_WARRIOR = (1 << 2), // 무사 사용 불가
|
||||
ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // 자객 사용 불가
|
||||
ITEM_ANTIFLAG_SURA = (1 << 4), // 수라 사용 불가
|
||||
ITEM_ANTIFLAG_SHAMAN = (1 << 5), // 무당 사용 불가
|
||||
ITEM_ANTIFLAG_GET = (1 << 6), // 집을 수 없음
|
||||
ITEM_ANTIFLAG_DROP = (1 << 7), // 버릴 수 없음
|
||||
ITEM_ANTIFLAG_SELL = (1 << 8), // 팔 수 없음
|
||||
ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C 제국 사용 불가
|
||||
ITEM_ANTIFLAG_SAVE = (1 << 12), // 저장되지 않음
|
||||
ITEM_ANTIFLAG_GIVE = (1 << 13), // 거래 불가
|
||||
ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK시 떨어지지 않음
|
||||
ITEM_ANTIFLAG_STACK = (1 << 15), // 합칠 수 없음
|
||||
ITEM_ANTIFLAG_MYSHOP = (1 << 16), // 개인 상점에 올릴 수 없음
|
||||
};
|
||||
|
||||
enum EItemFlag
|
||||
{
|
||||
ITEM_FLAG_REFINEABLE = (1 << 0), // 개량 가능
|
||||
ITEM_FLAG_REFINEABLE = (1 << 0), // 개량 가능
|
||||
ITEM_FLAG_SAVE = (1 << 1),
|
||||
ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음
|
||||
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // 가격이 개수 / 가격으로 변함
|
||||
ITEM_FLAG_SLOW_QUERY = (1 << 4), // 게임 종료시에만 SQL에 쿼리함
|
||||
ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음
|
||||
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // 가격이 개수 / 가격으로 변함
|
||||
ITEM_FLAG_SLOW_QUERY = (1 << 4), // 게임 종료시에만 SQL에 쿼리함
|
||||
ITEM_FLAG_RARE = (1 << 5),
|
||||
ITEM_FLAG_UNIQUE = (1 << 6),
|
||||
ITEM_FLAG_MAKECOUNT = (1 << 7),
|
||||
ITEM_FLAG_IRREMOVABLE = (1 << 8),
|
||||
ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 9),
|
||||
ITEM_FLAG_QUEST_USE = (1 << 10), // 퀘스트 스크립트 돌리는지?
|
||||
ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // 퀘스트 스크립트 돌리는지?
|
||||
ITEM_FLAG_QUEST_USE = (1 << 10), // 퀘스트 스크립트 돌리는지?
|
||||
ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // 퀘스트 스크립트 돌리는지?
|
||||
ITEM_FLAG_UNUSED03 = (1 << 12), // UNUSED03
|
||||
ITEM_FLAG_LOG = (1 << 13), // 사용시 로그를 남기는 아이템인가?
|
||||
ITEM_FLAG_LOG = (1 << 13), // 사용시 로그를 남기는 아이템인가?
|
||||
ITEM_FLAG_APPLICABLE = (1 << 14),
|
||||
};
|
||||
|
||||
@@ -319,17 +319,17 @@ class CItemData
|
||||
APPLY_ATT_BONUS_TO_SURA, // 61
|
||||
APPLY_ATT_BONUS_TO_SHAMAN, // 62
|
||||
APPLY_ATT_BONUS_TO_MONSTER, // 63
|
||||
APPLY_MALL_ATTBONUS, // 64 공격력 +x%
|
||||
APPLY_MALL_DEFBONUS, // 65 방어력 +x%
|
||||
APPLY_MALL_EXPBONUS, // 66 경험치 +x%
|
||||
APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배
|
||||
APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배
|
||||
APPLY_MAX_HP_PCT, // 69 최대 생명력 +x%
|
||||
APPLY_MAX_SP_PCT, // 70 최대 정신력 +x%
|
||||
APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)%
|
||||
APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)%
|
||||
APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)%
|
||||
APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)%
|
||||
APPLY_MALL_ATTBONUS, // 64 공격력 +x%
|
||||
APPLY_MALL_DEFBONUS, // 65 방어력 +x%
|
||||
APPLY_MALL_EXPBONUS, // 66 경험치 +x%
|
||||
APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배
|
||||
APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배
|
||||
APPLY_MAX_HP_PCT, // 69 최대 생명력 +x%
|
||||
APPLY_MAX_SP_PCT, // 70 최대 정신력 +x%
|
||||
APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)%
|
||||
APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)%
|
||||
APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)%
|
||||
APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)%
|
||||
APPLY_EXTRACT_HP_PCT, //75
|
||||
APPLY_PC_BANG_EXP_BONUS, //76
|
||||
APPLY_PC_BANG_DROP_BONUS, //77
|
||||
@@ -338,17 +338,17 @@ class CItemData
|
||||
APPLY_RESIST_SURA, //80
|
||||
APPLY_RESIST_SHAMAN, //81
|
||||
APPLY_ENERGY, //82
|
||||
APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
|
||||
APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스
|
||||
APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x%
|
||||
APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x%
|
||||
APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
|
||||
APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스
|
||||
APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x%
|
||||
APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x%
|
||||
|
||||
APPLY_RESIST_ICE, // 87 냉기 저항
|
||||
APPLY_RESIST_EARTH, // 88 대지 저항
|
||||
APPLY_RESIST_DARK, // 89 어둠 저항
|
||||
APPLY_RESIST_ICE, // 87 냉기 저항
|
||||
APPLY_RESIST_EARTH, // 88 대지 저항
|
||||
APPLY_RESIST_DARK, // 89 어둠 저항
|
||||
|
||||
APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항
|
||||
APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항
|
||||
APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항
|
||||
APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항
|
||||
|
||||
MAX_APPLY_NUM, //
|
||||
};
|
||||
|
||||
@@ -57,7 +57,7 @@ bool CMapBase::LoadProperty()
|
||||
|
||||
if (!LoadMultipleTextData(strFileName.c_str(), stTokenVectorMap))
|
||||
{
|
||||
TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR 파일이 없을 가능성이 많습니다.", strFileName.c_str());
|
||||
TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR 파일이 없을 가능성이 많습니다.", strFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -73,9 +73,9 @@ bool CMapBase::LoadProperty()
|
||||
return false;
|
||||
}
|
||||
|
||||
// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
|
||||
// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
|
||||
// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
|
||||
// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
|
||||
// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
|
||||
// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
|
||||
if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname"))
|
||||
{
|
||||
m_strParentMapName = stTokenVectorMap["parentmapname"][0];
|
||||
|
||||
@@ -22,13 +22,13 @@ class CMapBase : public CScreen
|
||||
virtual bool Update(float fX, float fY, float fZ) = 0;
|
||||
virtual void UpdateAroundAmbience(float fX, float fY, float fZ) = 0;
|
||||
virtual float GetHeight(float fx, float fy) = 0;
|
||||
virtual void OnBeginEnvironment() = 0; // 렌더링 할 때 불려지며 여기서 Environment에 관련 있는 것들을 셋팅 한다.
|
||||
virtual void OnBeginEnvironment() = 0; // 렌더링 할 때 불려지며 여기서 Environment에 관련 있는 것들을 셋팅 한다.
|
||||
|
||||
virtual void ApplyLight(DWORD dwVersion, const D3DLIGHT8& c_rkLight) = 0;
|
||||
|
||||
protected:
|
||||
virtual void OnRender() = 0;
|
||||
virtual void OnSetEnvironmentDataPtr() = 0; // Environment 데이터가 설정될 때 불려진다.
|
||||
virtual void OnSetEnvironmentDataPtr() = 0; // Environment 데이터가 설정될 때 불려진다.
|
||||
virtual void OnResetEnvironmentDataPtr() = 0;
|
||||
|
||||
public:
|
||||
@@ -50,14 +50,14 @@ class CMapBase : public CScreen
|
||||
const std::string & GetName() const { return m_strName; }
|
||||
void SetName(const std::string & cr_strName) { m_strName = cr_strName; }
|
||||
|
||||
bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // "원본 데이터는 따로 있는" 복사 맵인가?
|
||||
const std::string& GetParentMapName() const { return m_strParentMapName; } // 원본 데이터를 갖고있는 맵의 이름을 리턴 (복사맵의 경우 필수로 세팅되어야 함)
|
||||
bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // "원본 데이터는 따로 있는" 복사 맵인가?
|
||||
const std::string& GetParentMapName() const { return m_strParentMapName; } // 원본 데이터를 갖고있는 맵의 이름을 리턴 (복사맵의 경우 필수로 세팅되어야 함)
|
||||
const std::string& GetMapDataDirectory() const { return IsCopiedMap() ? m_strParentMapName : m_strName; }
|
||||
|
||||
protected:
|
||||
EMAPTYPE m_eType; // 맵 종류... 현재는 Indoor와 Ourdoor가 있다.
|
||||
std::string m_strName; // 맵 이름. 맵 이름이 맵 식별자가 될 수 있을까?
|
||||
std::string m_strParentMapName; // 원본 맵의 이름. 이 값이 세팅되어 있다면 실제 모든 맵 데이터는 ParentMap/* 경로에서 읽어온다. 맵의 일부만 읽어오는 기능은 필요없대서 패스.
|
||||
EMAPTYPE m_eType; // 맵 종류... 현재는 Indoor와 Ourdoor가 있다.
|
||||
std::string m_strName; // 맵 이름. 맵 이름이 맵 식별자가 될 수 있을까?
|
||||
std::string m_strParentMapName; // 원본 맵의 이름. 이 값이 세팅되어 있다면 실제 모든 맵 데이터는 ParentMap/* 경로에서 읽어온다. 맵의 일부만 읽어오는 기능은 필요없대서 패스.
|
||||
bool m_bReady;
|
||||
|
||||
const TEnvironmentData * mc_pEnvironmentData;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "PropertyLoader.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// 기본 함수
|
||||
// 기본 함수
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool CMapManager::IsMapOutdoor()
|
||||
@@ -184,7 +184,7 @@ float CMapManager::GetHeight(float fx, float fy)
|
||||
{
|
||||
if (!m_pkMap)
|
||||
{
|
||||
TraceError("CMapManager::GetHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy);
|
||||
TraceError("CMapManager::GetHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy);
|
||||
return 0.0f;
|
||||
}
|
||||
CMapOutdoor& rkMap=GetMapOutdoorRef();
|
||||
@@ -195,7 +195,7 @@ float CMapManager::GetTerrainHeight(float fx, float fy)
|
||||
{
|
||||
if (!m_pkMap)
|
||||
{
|
||||
TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy);
|
||||
TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy);
|
||||
return 0.0f;
|
||||
}
|
||||
CMapOutdoor& rkMap=GetMapOutdoorRef();
|
||||
@@ -206,7 +206,7 @@ bool CMapManager::GetWaterHeight(int iX, int iY, long * plWaterHeight)
|
||||
{
|
||||
if (!m_pkMap)
|
||||
{
|
||||
TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", iX, iY);
|
||||
TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", iX, iY);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,13 +27,13 @@ class CMapManager : public CScreen, public IPhysicsWorld
|
||||
void Initialize();
|
||||
void Destroy();
|
||||
|
||||
void Create(); // AllocMap 호출 해서 m_pMap 을 만듬
|
||||
void Create(); // AllocMap 호출 해서 m_pMap 을 만듬
|
||||
|
||||
virtual void Clear();
|
||||
virtual CMapBase * AllocMap();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Map 관리 함수
|
||||
// Map 관리 함수
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool IsMapReady();
|
||||
|
||||
@@ -51,9 +51,9 @@ class CMapManager : public CScreen, public IPhysicsWorld
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Environment
|
||||
///
|
||||
// NOTE : 다음 Environment로 서서히 블렌딩 시킨다
|
||||
// 아직 세부 구현은 되어있지 않음. 이 함수들은 Protected로 넣고,
|
||||
// MapManager에 TimeControl 부분을 구현하도록 한다. - [levites]
|
||||
// NOTE : 다음 Environment로 서서히 블렌딩 시킨다
|
||||
// 아직 세부 구현은 되어있지 않음. 이 함수들은 Protected로 넣고,
|
||||
// MapManager에 TimeControl 부분을 구현하도록 한다. - [levites]
|
||||
void SetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData);
|
||||
void ResetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData);
|
||||
void SetEnvironmentData(int nEnvDataIndex);
|
||||
|
||||
@@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy()
|
||||
void CMapOutdoor::Clear()
|
||||
{
|
||||
UnloadWaterTexture();
|
||||
Destroy(); // ÇØÁ¦
|
||||
Initialize(); // ÃʱâÈ
|
||||
Destroy(); // 해제
|
||||
Initialize(); // 초기화
|
||||
}
|
||||
|
||||
bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
typedef struct SOutdoorMapCoordinate
|
||||
{
|
||||
short m_sTerrainCoordX; // Terrain 좌표
|
||||
short m_sTerrainCoordX; // Terrain 좌표
|
||||
short m_sTerrainCoordY;
|
||||
} TOutdoorMapCoordinate;
|
||||
|
||||
@@ -161,7 +161,7 @@ class CMapOutdoor : public CMapBase
|
||||
bool isTerrainLoaded(WORD wX, WORD wY);
|
||||
bool isAreaLoaded(WORD wX, WORD wY);
|
||||
|
||||
void AssignTerrainPtr(); // 현재 좌표에서 주위(ex. 3x3)에 있는 것들의 포인터를 연결한다. (업데이트 시 불려짐)
|
||||
void AssignTerrainPtr(); // 현재 좌표에서 주위(ex. 3x3)에 있는 것들의 포인터를 연결한다. (업데이트 시 불려짐)
|
||||
|
||||
void SaveAlphaFogOperation();
|
||||
void RestoreAlphaFogOperation();
|
||||
@@ -169,7 +169,7 @@ class CMapOutdoor : public CMapBase
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// New
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// 여러가지 맵들을 얻는다.
|
||||
// 여러가지 맵들을 얻는다.
|
||||
void GetHeightMap(const BYTE & c_rucTerrainNum, WORD ** pwHeightMap);
|
||||
void GetNormalMap(const BYTE & c_rucTerrainNum, char ** pucNormalMap);
|
||||
|
||||
@@ -182,19 +182,19 @@ class CMapOutdoor : public CMapBase
|
||||
// Terrain
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
protected:
|
||||
// 데이터
|
||||
// 데이터
|
||||
CTerrain * m_pTerrain[AROUND_AREA_NUM]; // Terrain
|
||||
CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain을 랜더링 할때 실제로 랜더링하는 폴리곤 패치들... Seamless Map 을 위해 CTerrain으로부터 독립...
|
||||
CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain을 랜더링 할때 실제로 랜더링하는 폴리곤 패치들... Seamless Map 을 위해 CTerrain으로부터 독립...
|
||||
|
||||
long m_lViewRadius; // 시야 거리.. 셀단위임..
|
||||
float m_fHeightScale; // 높이 스케일... 1.0일때 0~655.35미터까지 표현 가능.
|
||||
long m_lViewRadius; // 시야 거리.. 셀단위임..
|
||||
float m_fHeightScale; // 높이 스케일... 1.0일때 0~655.35미터까지 표현 가능.
|
||||
|
||||
short m_sTerrainCountX, m_sTerrainCountY; // seamless map 안에 들어가는 Terrain개수
|
||||
short m_sTerrainCountX, m_sTerrainCountY; // seamless map 안에 들어가는 Terrain개수
|
||||
|
||||
TOutdoorMapCoordinate m_CurCoordinate; // 현재의 좌표
|
||||
TOutdoorMapCoordinate m_CurCoordinate; // 현재의 좌표
|
||||
|
||||
long m_lCurCoordStartX, m_lCurCoordStartY;
|
||||
TOutdoorMapCoordinate m_PrevCoordinate; // 현재의 좌표
|
||||
TOutdoorMapCoordinate m_PrevCoordinate; // 현재의 좌표
|
||||
TOutdoorMapCoordinateMap m_EntryPointMap;
|
||||
|
||||
WORD m_wPatchCount;
|
||||
@@ -316,7 +316,7 @@ class CMapOutdoor : public CMapBase
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// New
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
long m_lCenterX, m_lCenterY; // Terrain 좌표 내의 셀 좌표...
|
||||
long m_lCenterX, m_lCenterY; // Terrain 좌표 내의 셀 좌표...
|
||||
long m_lOldReadX, m_lOldReadY; /* Last center */
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -15,7 +15,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
|
||||
{
|
||||
static std::string s_strOldPathName="";
|
||||
|
||||
// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
|
||||
// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
|
||||
std::string c_rstrNewPathName=GetName()+"\\cache";
|
||||
|
||||
s_strOldPathName=c_rstrNewPathName;
|
||||
@@ -38,7 +38,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
|
||||
|
||||
m_lOldReadX = -1;
|
||||
|
||||
// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
|
||||
// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
|
||||
CSpeedTreeForestDirectX8::Instance().SetRenderingDevice(ms_lpd3dDevice);
|
||||
|
||||
Update(x, y, z);
|
||||
@@ -102,13 +102,13 @@ bool CMapOutdoor::isAreaLoaded(WORD wX, WORD wY)
|
||||
}
|
||||
|
||||
|
||||
// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를
|
||||
// m_pTerrain과 m_pArea에 연결한다.
|
||||
// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를
|
||||
// m_pTerrain과 m_pArea에 연결한다.
|
||||
void CMapOutdoor::AssignTerrainPtr()
|
||||
{
|
||||
// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
|
||||
// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
|
||||
// 하지 않는다.
|
||||
// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
|
||||
// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
|
||||
// 하지 않는다.
|
||||
OnPreAssignTerrainPtr();
|
||||
|
||||
short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY;
|
||||
@@ -392,15 +392,15 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
|
||||
|
||||
std::string stTextureSetFileName = strTextureSet;
|
||||
|
||||
// TextureSet 이 이미 붙어 있을 경우 안붙인다.
|
||||
// TextureSet 이 이미 붙어 있을 경우 안붙인다.
|
||||
if (0 != stTextureSetFileName.find_first_of("textureset", 0))
|
||||
stTextureSetFileName = "textureset\\"+strTextureSet;
|
||||
|
||||
if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase))
|
||||
{
|
||||
#ifdef WORLD_EDITOR
|
||||
// TextureSet 이 적용되어 있지 않아도 진행
|
||||
LogBox("TextureSet 이 적용되어있지 않은 맵 입니다.\n지형 텍스춰 작업에 주의하시기 바랍니다.");
|
||||
// TextureSet 이 적용되어 있지 않아도 진행
|
||||
LogBox("TextureSet 이 적용되어있지 않은 맵 입니다.\n지형 텍스춰 작업에 주의하시기 바랍니다.");
|
||||
#else
|
||||
TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
|
||||
return false;
|
||||
|
||||
@@ -9,7 +9,7 @@ void CMapOutdoor::BuildQuadTree()
|
||||
{
|
||||
FreeQuadTree();
|
||||
|
||||
// m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
|
||||
// m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
|
||||
if (0 == m_wPatchCount)
|
||||
{
|
||||
TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method.");
|
||||
|
||||
@@ -43,10 +43,10 @@ void CMapOutdoor::RenderTerrain()
|
||||
|
||||
__RenderTerrain_RecurseRenderQuadTree(m_pRootNode);
|
||||
|
||||
// 거리순 정렬
|
||||
// 거리순 정렬
|
||||
std::sort(m_PatchVector.begin(),m_PatchVector.end());
|
||||
|
||||
// 그리기 위한 벡터 세팅
|
||||
// 그리기 위한 벡터 세팅
|
||||
if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE)
|
||||
__RenderTerrain_RenderSoftwareTransformPatch();
|
||||
else
|
||||
@@ -134,13 +134,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT8& c_rkLight)
|
||||
STATEMANAGER.SetLight(0, &c_rkLight);
|
||||
}
|
||||
|
||||
// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
|
||||
// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
|
||||
void CMapOutdoor::InitializeVisibleParts()
|
||||
{
|
||||
m_dwVisiblePartFlags=0xffffffff;
|
||||
}
|
||||
|
||||
// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
|
||||
// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
|
||||
void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
|
||||
{
|
||||
DWORD dwMask=(1<<ePart);
|
||||
@@ -155,7 +155,7 @@ void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
|
||||
}
|
||||
}
|
||||
|
||||
// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
|
||||
// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
|
||||
bool CMapOutdoor::IsVisiblePart(int ePart)
|
||||
{
|
||||
DWORD dwMask=(1<<ePart);
|
||||
@@ -165,7 +165,7 @@ bool CMapOutdoor::IsVisiblePart(int ePart)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Splat 개수 제한
|
||||
// Splat 개수 제한
|
||||
void CMapOutdoor::SetSplatLimit(int iSplatNum)
|
||||
{
|
||||
m_iSplatLimit = iSplatNum;
|
||||
@@ -355,7 +355,7 @@ struct CMapOutdoor_LessThingInstancePtrRenderOrder
|
||||
{
|
||||
bool operator() (CGraphicThingInstance* pkLeft, CGraphicThingInstance* pkRight)
|
||||
{
|
||||
//TODO : Camera위치기반으로 소팅
|
||||
//TODO : Camera위치기반으로 소팅
|
||||
CCamera * pCurrentCamera = CCameraManager::Instance().GetCurrentCamera();
|
||||
const D3DXVECTOR3 & c_rv3CameraPos = pCurrentCamera->GetEye();
|
||||
const D3DXVECTOR3 & c_v3LeftPos = pkLeft->GetPosition();
|
||||
@@ -391,7 +391,7 @@ void CMapOutdoor::RenderArea(bool bRenderAmbience)
|
||||
m_dwRenderedGraphicThingInstanceNum = 0;
|
||||
m_dwRenderedCRCWithNumberVector.clear();
|
||||
|
||||
// NOTE - 20041201.levites.던젼 그림자 추가
|
||||
// NOTE - 20041201.levites.던젼 그림자 추가
|
||||
for (int j = 0; j < AROUND_AREA_NUM; ++j)
|
||||
{
|
||||
CArea * pArea;
|
||||
|
||||
@@ -101,7 +101,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
|
||||
std::vector<std::pair<float ,long> >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far);
|
||||
std::vector<std::pair<float ,long> >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near);
|
||||
|
||||
// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
|
||||
// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
|
||||
#ifdef WORLD_EDITOR
|
||||
near_it = m_PatchVector.begin();
|
||||
far_it = m_PatchVector.end();
|
||||
@@ -120,7 +120,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
|
||||
DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE);
|
||||
std::vector<std::pair<float, long> >::iterator it = m_PatchVector.begin();
|
||||
|
||||
// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
|
||||
// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
|
||||
#ifndef WORLD_EDITOR
|
||||
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
|
||||
|
||||
@@ -380,7 +380,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
|
||||
}
|
||||
else
|
||||
{
|
||||
// 0번 텍스처
|
||||
// 0번 텍스처
|
||||
if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] )
|
||||
{
|
||||
DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR);
|
||||
@@ -603,7 +603,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
|
||||
*/
|
||||
#endif
|
||||
|
||||
// 그림자
|
||||
// 그림자
|
||||
if (m_bDrawShadow)
|
||||
{
|
||||
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
|
||||
|
||||
@@ -221,7 +221,7 @@ void CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat(SoftwareTransformPat
|
||||
break;
|
||||
}
|
||||
|
||||
// ±×¸²ÀÚ
|
||||
// 그림자
|
||||
if (m_bDrawShadow)
|
||||
{
|
||||
__SoftwareTransformPatch_SetShadowStream(akTransVertex);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "TerrainQuadtree.h"
|
||||
#include "ActorInstance.h"
|
||||
|
||||
// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
|
||||
// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
|
||||
class PCBlocker_CDynamicSphereInstanceVector
|
||||
{
|
||||
public:
|
||||
@@ -241,7 +241,7 @@ void CMapOutdoor::__Game_UpdateArea(D3DXVECTOR3& v3Player)
|
||||
D3DXVECTOR3 v3Target = pCamera->GetTarget();
|
||||
D3DXVECTOR3 v3Eye= pCamera->GetEye();
|
||||
|
||||
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
|
||||
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
|
||||
v3Light *= 50.0f / D3DXVec3Length(&v3Light);
|
||||
|
||||
/*
|
||||
@@ -744,7 +744,7 @@ void CMapOutdoor::UpdateTerrain(float fX, float fY)
|
||||
|
||||
ConvertTerrainToTnL(lRealCenterX, lRealCenterY);
|
||||
UpdateAreaList(lRealCenterX, lRealCenterY);
|
||||
//Tracef("사용하는 Area, Terrain : (%d, %d), 지울 Area, Terrain : (%d, %d)\n",
|
||||
//Tracef("사용하는 Area, Terrain : (%d, %d), 지울 Area, Terrain : (%d, %d)\n",
|
||||
// m_AreaVector.size(), m_TerrainVector.size(), m_AreaDeleteVector.size(), m_TerrainDeleteVector.size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater()
|
||||
// RenderState
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// 물 위 아래 애니시키기...
|
||||
// 물 위 아래 애니시키기...
|
||||
static float s_fWaterHeightCurrent = 0;
|
||||
static float s_fWaterHeightBegin = 0;
|
||||
static float s_fWaterHeightEnd = 0;
|
||||
static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond();
|
||||
static DWORD s_dwBlendtime = 300;
|
||||
|
||||
// 1.5초 마다 변경
|
||||
// 1.5초 마다 변경
|
||||
if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime)
|
||||
{
|
||||
s_dwBlendtime = random_range(1000, 3000);
|
||||
@@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater()
|
||||
DrawWater(i->second);
|
||||
}
|
||||
|
||||
// 렌더링 한 후에는 물 z 위치를 복구
|
||||
// 렌더링 한 후에는 물 z 위치를 복구
|
||||
m_matWorldForCommonUse._43 = 0.0f;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -182,7 +182,7 @@ typedef struct SEnvironmentData
|
||||
std::string strMainFlareTextureFileName;
|
||||
float fMainFlareSize;
|
||||
|
||||
BOOL bReserve; // 외부에서 설정을 고치지 않음
|
||||
BOOL bReserve; // 외부에서 설정을 고치지 않음
|
||||
} TEnvironmentData;
|
||||
|
||||
typedef std::map<DWORD, TEnvironmentData*> TEnvironmentDataMap;
|
||||
|
||||
@@ -126,12 +126,12 @@ void CMonsterAreaInfo::RemoveAllMonsters()
|
||||
|
||||
SetMonsterGroupID(0);
|
||||
|
||||
m_strGroupName.assign("이름없음");
|
||||
m_strLeaderName.assign("이름없음");
|
||||
m_strGroupName.assign("이름없음");
|
||||
m_strLeaderName.assign("이름없음");
|
||||
SetMonsterGroupFollowerCount(0);
|
||||
|
||||
SetMonsterVID(0);
|
||||
m_strMonsterName.assign("이름없음");
|
||||
m_strMonsterName.assign("이름없음");
|
||||
|
||||
SetMonsterCount(0);
|
||||
SetMonsterDirection(DIR_NORTH);
|
||||
|
||||
@@ -89,17 +89,17 @@ protected:
|
||||
protected:
|
||||
EMonsterAreaInfoType m_eMonsterAreaInfoType;
|
||||
|
||||
// Group Type Á¤º¸
|
||||
// Group Type 정보
|
||||
DWORD m_dwGroupID;
|
||||
std::string m_strGroupName;
|
||||
std::string m_strLeaderName;
|
||||
DWORD m_dwFollowerCount;
|
||||
|
||||
// Monster Type Á¤º¸
|
||||
// Monster Type 정보
|
||||
DWORD m_dwVID;
|
||||
std::string m_strMonsterName;
|
||||
|
||||
// °øÅë Á¤º¸
|
||||
// 공통 정보
|
||||
DWORD m_dwMonsterCount;
|
||||
EMonsterDir m_eMonsterDir;
|
||||
D3DXVECTOR2 m_v2Monsterdirection;
|
||||
|
||||
@@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
|
||||
m_v3Acceleration.y,
|
||||
m_v3Acceleration.z);
|
||||
*/
|
||||
// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
|
||||
// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
|
||||
const int LoopValue = 100;
|
||||
D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
|
||||
|
||||
@@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
|
||||
|
||||
//for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f)
|
||||
//{
|
||||
// // 좀더 정밀하게 체크한다
|
||||
// // 좀더 정밀하게 체크한다
|
||||
// if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio))
|
||||
// {
|
||||
// v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f);
|
||||
@@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement()
|
||||
|
||||
bool CPhysicsObject::isBlending()
|
||||
{
|
||||
// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
|
||||
// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
|
||||
if (0.0f != D3DXVec3Length(&m_v3Velocity))
|
||||
return true;
|
||||
|
||||
// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
|
||||
// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
|
||||
if (m_xPushingPosition.isPlaying() ||
|
||||
m_yPushingPosition.isPlaying())
|
||||
return true;
|
||||
|
||||
@@ -29,8 +29,8 @@ private:
|
||||
};
|
||||
|
||||
class CActorInstance;
|
||||
//NOTE : 맘에 안들지만 Dependency Inversion을 막고 이전과 동일한 interface를 유지하기 위해서 이방식대로 간다
|
||||
//하지만 제대로 설계를 한다면 world와 live object들의 관리는 조금더 base project에서 (gamelib이나 더 base project에서 해야 한다 )
|
||||
//NOTE : 맘에 안들지만 Dependency Inversion을 막고 이전과 동일한 interface를 유지하기 위해서 이방식대로 간다
|
||||
//하지만 제대로 설계를 한다면 world와 live object들의 관리는 조금더 base project에서 (gamelib이나 더 base project에서 해야 한다 )
|
||||
class IObjectManager
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
#include "PropertyManager.h"
|
||||
#include "Property.h"
|
||||
/*
|
||||
* CProperty 파일 포맷
|
||||
* CProperty 파일 포맷
|
||||
*
|
||||
* 0 ~ 4 bytes: fourcc
|
||||
* 5 ~ 6 bytes: \r\n
|
||||
*
|
||||
* 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
|
||||
* 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
|
||||
*/
|
||||
CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0)
|
||||
{
|
||||
@@ -68,9 +68,9 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
|
||||
if (m_stTokenMap.end() == it)
|
||||
return false;
|
||||
|
||||
// NOTE : 튕김 현상 발견
|
||||
// NOTE : 튕김 현상 발견
|
||||
// std::copy(rTokenVector.begin(), it->second.begin(), it->second.end());
|
||||
// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
|
||||
// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// template <class InputIterator, class OutputIterator>
|
||||
// OutputIterator copy(InputIterator first, InputIterator last,
|
||||
@@ -82,11 +82,11 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
|
||||
// copy(V.begin(), V.end(), L.begin());
|
||||
// assert(equal(V.begin(), V.end(), L.begin()));
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// 헌데 그래도 튕김. - [levites]
|
||||
// 헌데 그래도 튕김. - [levites]
|
||||
// std::copy(it->second.begin(), it->second.end(), rTokenVector.begin());
|
||||
|
||||
// 결국 이렇게.. - [levites]
|
||||
// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
|
||||
// 결국 이렇게.. - [levites]
|
||||
// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
|
||||
CTokenVector & rSourceTokenVector = it->second;
|
||||
CTokenVector::iterator itor = rSourceTokenVector.begin();
|
||||
for (; itor != rSourceTokenVector.end(); ++itor)
|
||||
@@ -102,7 +102,7 @@ void CProperty::PutString(const char * c_pszKey, const char * c_pszString)
|
||||
std::string stTempKey = c_pszKey;
|
||||
stl_lowers(stTempKey);
|
||||
|
||||
// 이미 있는걸 지움
|
||||
// 이미 있는걸 지움
|
||||
CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey);
|
||||
|
||||
if (itor != m_stTokenMap.end())
|
||||
|
||||
@@ -33,10 +33,10 @@ DWORD CPropertyLoader::RegisterFile(const char * c_szPathName, const char * c_sz
|
||||
stl_lowers(stExt);
|
||||
stl_lowers(strFileName);
|
||||
|
||||
// 패스를 소문자로 만들고 \\ 는 / 로 바꾼다.
|
||||
// 패스를 소문자로 만들고 \\ 는 / 로 바꾼다.
|
||||
StringPath(strFileName);
|
||||
|
||||
// 예약된 CRC 처리 (지워진 CRC)
|
||||
// 예약된 CRC 처리 (지워진 CRC)
|
||||
if (0 == strFileName.compare("property/reserve"))
|
||||
{
|
||||
m_pPropertyManager->LoadReservedCRC(strFileName.c_str());
|
||||
|
||||
@@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
|
||||
else
|
||||
{
|
||||
m_isFileMode = true;
|
||||
// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
|
||||
// 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
|
||||
// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
|
||||
// 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF
|
||||
if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
|
||||
return false;
|
||||
|
||||
if (!m_isFileMode) // 팩 파일에도 넣음
|
||||
if (!m_isFileMode) // 팩 파일에도 넣음
|
||||
{
|
||||
if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
|
||||
{
|
||||
@@ -219,13 +219,13 @@ bool CPropertyManager::Erase(DWORD dwCRC)
|
||||
DeleteFile(pProperty->GetFileName());
|
||||
ReserveCRC(pProperty->GetCRC());
|
||||
|
||||
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
|
||||
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
|
||||
m_pack.Delete(pProperty->GetFileName());
|
||||
|
||||
FILE * fp = fopen("property/reserve", "a+");
|
||||
|
||||
if (!fp)
|
||||
LogBox("예약 CRC 파일을 열 수 없습니다.");
|
||||
LogBox("예약 CRC 파일을 열 수 없습니다.");
|
||||
else
|
||||
{
|
||||
char szCRC[64 + 1];
|
||||
|
||||
@@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
|
||||
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
|
||||
pRaceMotionData->SetName(wMotionIndex);
|
||||
|
||||
/////
|
||||
|
||||
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
|
||||
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
|
||||
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
|
||||
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
|
||||
|
||||
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
|
||||
|
||||
// 2004.09.03.myevan.새로운함수로 대처
|
||||
// 2004.09.03.myevan.새로운함수로 대처
|
||||
//TMotion Motion;
|
||||
//Motion.byPercentage = byPercentage;
|
||||
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
|
||||
|
||||
@@ -16,8 +16,8 @@ class CRaceData
|
||||
enum EParts
|
||||
{
|
||||
// Share index with server
|
||||
// ECharacterEquipmentPart도 수정해주세요.
|
||||
//패킷 크기가 변합니다 서버와 상의후 추가해주세요.
|
||||
// ECharacterEquipmentPart도 수정해주세요.
|
||||
//패킷 크기가 변합니다 서버와 상의후 추가해주세요.
|
||||
PART_MAIN,
|
||||
PART_WEAPON,
|
||||
PART_HEAD,
|
||||
|
||||
@@ -73,7 +73,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
|
||||
}
|
||||
|
||||
/////////////////////////
|
||||
// Temporary - 이벤트를 위한 임시 기능
|
||||
// Temporary - 이벤트를 위한 임시 기능
|
||||
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
||||
/////////////////////////
|
||||
|
||||
@@ -146,7 +146,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
|
||||
}
|
||||
|
||||
/////////////////////////
|
||||
// Temporary - 이벤트를 위한 임시 기능
|
||||
// Temporary - 이벤트를 위한 임시 기능
|
||||
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
||||
/////////////////////////
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPat
|
||||
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||
}
|
||||
}
|
||||
// 만우절 이벤트용 예외 몬스터
|
||||
// 만우절 이벤트용 예외 몬스터
|
||||
else if (8507 == race || 8510 == race)
|
||||
{
|
||||
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||
@@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN
|
||||
|
||||
if (s_kMap_stType_dwIndex.end() == fTypeIndex)
|
||||
{
|
||||
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
|
||||
// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
|
||||
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
|
||||
// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
|
||||
const size_t c_cutLengthLimit = 2;
|
||||
bool bFound = false;
|
||||
|
||||
|
||||
@@ -56,41 +56,41 @@ class CRaceMotionData
|
||||
|
||||
enum EName
|
||||
{
|
||||
NAME_NONE, // 0 없음
|
||||
NAME_WAIT, // 1 대기 (00.msa)
|
||||
NAME_WALK, // 2 걷기 (02.msa)
|
||||
NAME_RUN, // 3 뛰기 (03.msa)
|
||||
NAME_CHANGE_WEAPON, // 4 무기바꾸기
|
||||
NAME_DAMAGE, // 5 정면맞기 (30.msa)
|
||||
NAME_DAMAGE_FLYING, // 6 정면날아가기 (32.msa)
|
||||
NAME_STAND_UP, // 7 정면일어나기 (33.msa)
|
||||
NAME_DAMAGE_BACK, // 8 후면맞기 (34.msa)
|
||||
NAME_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa)
|
||||
NAME_STAND_UP_BACK, // 10 후면일어나기 (36.msa)
|
||||
NAME_DEAD, // 11 죽기 (31.msa)
|
||||
NAME_DEAD_BACK, // 12 후면죽기 (37.msa)
|
||||
NAME_NORMAL_ATTACK, // 13 공격 (20.msa)
|
||||
NAME_COMBO_ATTACK_1, // 14 콤보 공격
|
||||
NAME_COMBO_ATTACK_2, // 15 콤보 공격
|
||||
NAME_COMBO_ATTACK_3, // 16 콤보 공격
|
||||
NAME_COMBO_ATTACK_4, // 17 콤보 공격
|
||||
NAME_COMBO_ATTACK_5, // 18 콤보 공격
|
||||
NAME_COMBO_ATTACK_6, // 19 콤보 공격
|
||||
NAME_COMBO_ATTACK_7, // 20 콤보 공격
|
||||
NAME_COMBO_ATTACK_8, // 21 콤보 공격
|
||||
NAME_INTRO_WAIT, // 22 선택화면 대기
|
||||
NAME_INTRO_SELECTED, // 23 선택화면 선택
|
||||
NAME_INTRO_NOT_SELECTED, // 24 선택화면 비선택
|
||||
NAME_SPAWN, // 25 소환
|
||||
NAME_FISHING_THROW, // 26 낚시 던지기
|
||||
NAME_FISHING_WAIT, // 27 낚시 대기
|
||||
NAME_FISHING_STOP, // 28 낚시 그만두기
|
||||
NAME_FISHING_REACT, // 29 낚시 반응
|
||||
NAME_FISHING_CATCH, // 30 낚시 잡기
|
||||
NAME_FISHING_FAIL, // 31 낚시 실패
|
||||
NAME_STOP, // 32 말 멈추기
|
||||
NAME_SPECIAL_1, // 33 몬스터/NPC 특수 동작 (24.msa)
|
||||
NAME_SPECIAL_2, // 34 몬스터/NPC 특수 동작 (25.msa)
|
||||
NAME_NONE, // 0 없음
|
||||
NAME_WAIT, // 1 대기 (00.msa)
|
||||
NAME_WALK, // 2 걷기 (02.msa)
|
||||
NAME_RUN, // 3 뛰기 (03.msa)
|
||||
NAME_CHANGE_WEAPON, // 4 무기바꾸기
|
||||
NAME_DAMAGE, // 5 정면맞기 (30.msa)
|
||||
NAME_DAMAGE_FLYING, // 6 정면날아가기 (32.msa)
|
||||
NAME_STAND_UP, // 7 정면일어나기 (33.msa)
|
||||
NAME_DAMAGE_BACK, // 8 후면맞기 (34.msa)
|
||||
NAME_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa)
|
||||
NAME_STAND_UP_BACK, // 10 후면일어나기 (36.msa)
|
||||
NAME_DEAD, // 11 죽기 (31.msa)
|
||||
NAME_DEAD_BACK, // 12 후면죽기 (37.msa)
|
||||
NAME_NORMAL_ATTACK, // 13 공격 (20.msa)
|
||||
NAME_COMBO_ATTACK_1, // 14 콤보 공격
|
||||
NAME_COMBO_ATTACK_2, // 15 콤보 공격
|
||||
NAME_COMBO_ATTACK_3, // 16 콤보 공격
|
||||
NAME_COMBO_ATTACK_4, // 17 콤보 공격
|
||||
NAME_COMBO_ATTACK_5, // 18 콤보 공격
|
||||
NAME_COMBO_ATTACK_6, // 19 콤보 공격
|
||||
NAME_COMBO_ATTACK_7, // 20 콤보 공격
|
||||
NAME_COMBO_ATTACK_8, // 21 콤보 공격
|
||||
NAME_INTRO_WAIT, // 22 선택화면 대기
|
||||
NAME_INTRO_SELECTED, // 23 선택화면 선택
|
||||
NAME_INTRO_NOT_SELECTED, // 24 선택화면 비선택
|
||||
NAME_SPAWN, // 25 소환
|
||||
NAME_FISHING_THROW, // 26 낚시 던지기
|
||||
NAME_FISHING_WAIT, // 27 낚시 대기
|
||||
NAME_FISHING_STOP, // 28 낚시 그만두기
|
||||
NAME_FISHING_REACT, // 29 낚시 반응
|
||||
NAME_FISHING_CATCH, // 30 낚시 잡기
|
||||
NAME_FISHING_FAIL, // 31 낚시 실패
|
||||
NAME_STOP, // 32 말 멈추기
|
||||
NAME_SPECIAL_1, // 33 몬스터/NPC 특수 동작 (24.msa)
|
||||
NAME_SPECIAL_2, // 34 몬스터/NPC 특수 동작 (25.msa)
|
||||
NAME_SPECIAL_3,
|
||||
NAME_SPECIAL_4,
|
||||
NAME_SPECIAL_5,
|
||||
@@ -139,7 +139,7 @@ class CRaceMotionData
|
||||
NAME_DANCE_3,
|
||||
NAME_DANCE_4,
|
||||
NAME_DANCE_5,
|
||||
NAME_DANCE_6, // 강남스타일
|
||||
NAME_DANCE_6, // 강남스타일
|
||||
|
||||
NAME_DANCE_END = NAME_DANCE_1 + 16,
|
||||
|
||||
@@ -210,8 +210,8 @@ class CRaceMotionData
|
||||
|
||||
void SetName(UINT eName);
|
||||
|
||||
UINT GetType() const; // 모션 타입 얻기
|
||||
bool IsLock() const; // 락된 모션 인가? (다른 모션에 캔슬되지 않음)
|
||||
UINT GetType() const; // 모션 타입 얻기
|
||||
bool IsLock() const; // 락된 모션 인가? (다른 모션에 캔슬되지 않음)
|
||||
|
||||
int GetLoopCount() const;
|
||||
|
||||
@@ -225,7 +225,7 @@ class CRaceMotionData
|
||||
void SetAccumulationPosition(const TPixelPosition & c_rPos);
|
||||
const TPixelPosition & GetAccumulationPosition() { return m_accumulationPosition; }
|
||||
|
||||
BOOL IsComboInputTimeData() const; // 콤보 입력 타이밍 데이터가 있는가?
|
||||
BOOL IsComboInputTimeData() const; // 콤보 입력 타이밍 데이터가 있는가?
|
||||
|
||||
float GetComboInputStartTime() const;
|
||||
float GetNextComboTime() const;
|
||||
|
||||
@@ -123,7 +123,7 @@ void CSnowEnvironment::__ApplyBlur()
|
||||
// BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) ,
|
||||
// BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) ,
|
||||
// BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) };
|
||||
// //누적 블러 텍스쳐를 찍는다.
|
||||
// //누적 블러 텍스쳐를 찍는다.
|
||||
// STATEMANAGER.SetTexture(0,m_lpAccumTexture);
|
||||
// STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 );
|
||||
// STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex));
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#endif
|
||||
|
||||
#pragma warning(disable:4710) // not inlined
|
||||
#pragma warning(disable:4786) // character 255 ³Ñ¾î°¡´Â°Å ²ô±â
|
||||
#pragma warning(disable:4786) // character 255 넘어가는거 끄기
|
||||
#pragma warning(disable:4244) // type conversion possible lose of data
|
||||
|
||||
#pragma warning(disable:4018)
|
||||
|
||||
@@ -32,7 +32,7 @@ void CWeaponTrace::Update(float fReachScale)
|
||||
if (!m_pInstance)
|
||||
return;
|
||||
{
|
||||
// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
|
||||
// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
|
||||
TTimePointList::iterator it;
|
||||
for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it)
|
||||
{
|
||||
@@ -69,7 +69,7 @@ void CWeaponTrace::Update(float fReachScale)
|
||||
mat._41 = pBoneMat->_41;
|
||||
mat._42 = pBoneMat->_42;
|
||||
mat._43 = pBoneMat->_43;
|
||||
// 현재 위치를 추가합니다.
|
||||
// 현재 위치를 추가합니다.
|
||||
D3DXMATRIX matPoint;
|
||||
D3DXMATRIX matTranslation;
|
||||
D3DXMATRIX matRotation;
|
||||
|
||||
Reference in New Issue
Block a user