Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1275 lines
34 KiB
C++
1275 lines
34 KiB
C++
// EffectEditorView.cpp : implementation of the CEffectEditorView class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "EffectEditor.h"
|
|
#include "SceneManager.h"
|
|
#include "MainFrm.h"
|
|
#include "EffectEditorDoc.h"
|
|
#include "EffectEditorView.h"
|
|
#include "CommandManager.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEffectEditorView
|
|
|
|
IMPLEMENT_DYNCREATE(CEffectEditorView, CView)
|
|
|
|
BEGIN_MESSAGE_MAP(CEffectEditorView, CView)
|
|
//{{AFX_MSG_MAP(CEffectEditorView)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_LBUTTONUP()
|
|
ON_WM_RBUTTONDOWN()
|
|
ON_WM_RBUTTONUP()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_DESTROY()
|
|
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
|
|
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
|
|
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSave)
|
|
ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
|
|
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
|
|
ON_COMMAND(ID_FILE_NEW, OnFileNew)
|
|
ON_COMMAND(ID_CHAR_VISIBLE, OnCharVisible)
|
|
ON_COMMAND(ID_CHAR_INVISIBLE, OnCharInvisible)
|
|
ON_WM_KEYDOWN()
|
|
ON_COMMAND(ID_CHAR_WAIT, OnCharWait)
|
|
ON_COMMAND(ID_CHAR_WALK, OnCharWalk)
|
|
ON_COMMAND(ID_CHAR_ATTACK, OnCharAttack)
|
|
ON_COMMAND(ID_CHAR_ATTACK_ADVANCE, OnCharAttackAdvance)
|
|
ON_COMMAND(ID_CHAR_ATTACK_LEFT, OnCharAttackLeft)
|
|
ON_COMMAND(ID_CHAR_ATTACK_RETREAT, OnCharAttackRetreat)
|
|
ON_COMMAND(ID_CHAR_ATTACK_RIGHT, OnCharAttackRight)
|
|
ON_COMMAND(ID_CHAR_ATTACKED, OnCharAttacked)
|
|
ON_COMMAND(ID_CHAR_BACK, OnCharBack)
|
|
ON_COMMAND(ID_CHAR_BASH, OnCharBash)
|
|
ON_COMMAND(ID_CHAR_CASTING, OnCharCasting)
|
|
ON_COMMAND(ID_CHAR_CRIP_WEAPON, OnCharCripWeapon)
|
|
ON_COMMAND(ID_CHAR_FALLDOWN, OnCharFalldown)
|
|
ON_COMMAND(ID_CHAR_GET_UP, OnCharGetUp)
|
|
ON_COMMAND(ID_CHAR_LEFT, OnCharLeft)
|
|
ON_COMMAND(ID_CHAR_PUT_IN_WEAPON, OnCharPutInWeapon)
|
|
ON_COMMAND(ID_CHAR_REST, OnCharRest)
|
|
ON_COMMAND(ID_CHAR_RESTORE_HAND, OnCharRestoreHand)
|
|
ON_COMMAND(ID_CHAR_RIGHT, OnCharRight)
|
|
ON_COMMAND(ID_CHAR_RUN, OnCharRun)
|
|
ON_COMMAND(ID_CHAR_SIT_DOWN, OnCharSitDown)
|
|
ON_COMMAND(ID_CHAR_STUN, OnCharStun)
|
|
ON_COMMAND(ID_CHAR_TAKE_OUT_WEAPON, OnCharTakeOutWeapon)
|
|
ON_COMMAND(ID_CHAR_NORMAL, OnCharNormal)
|
|
ON_COMMAND(ID_CHAR_BATTLE, OnCharBattle)
|
|
ON_COMMAND(ID_CHAR_BLUNT, OnCharBlunt)
|
|
ON_COMMAND(ID_CHAR_BOW, OnCharBow)
|
|
ON_COMMAND(ID_CHAR_CROSSBOW, OnCharCrossbow)
|
|
ON_COMMAND(ID_CHAR_DAGGER, OnCharDagger)
|
|
ON_COMMAND(ID_CHAR_NOWEAPONB, OnCharNoweaponb)
|
|
ON_COMMAND(ID_CHAR_ONEHAND, OnCharOnehand)
|
|
ON_COMMAND(ID_CHAR_TWOHAND, OnCharTwohand)
|
|
ON_COMMAND(ID_CHAR_M_CAST_BEGIN, OnCharMCastBegin)
|
|
ON_COMMAND(ID_CHAR_M_CASTING1, OnCharMCasting1)
|
|
ON_COMMAND(ID_CHAR_M_CASTING2, OnCharMCasting2)
|
|
ON_COMMAND(ID_CHAR_CAST_BEGIN, OnCharCastBegin)
|
|
ON_COMMAND(ID_CHAR_CASTING2, OnCharCasting2)
|
|
ON_COMMAND(ID_CHAR_BLOW, OnCharBlow)
|
|
ON_COMMAND(ID_CHAR_ROUND_SWING, OnCharRoundSwing)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
CCommandManager g_CommandManager;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEffectEditorView construction/destruction
|
|
|
|
CEffectEditorView::CEffectEditorView()
|
|
{
|
|
// TODO: add construction code here
|
|
m_lpEffect = NULL;
|
|
}
|
|
|
|
CEffectEditorView::~CEffectEditorView()
|
|
{
|
|
//delete m_pChr;
|
|
}
|
|
|
|
BOOL CEffectEditorView::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
|
|
return CView::PreCreateWindow(cs);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEffectEditorView drawing
|
|
|
|
void CEffectEditorView::OnDraw(CDC* pDC)
|
|
{
|
|
CEffectEditorDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
// TODO: add draw code for native data here
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEffectEditorView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CEffectEditorView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
void CEffectEditorView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
|
|
CEffectEditorDoc* CEffectEditorView::GetDocument() // non-debug version is inline
|
|
{
|
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEffectEditorDoc)));
|
|
return (CEffectEditorDoc*)m_pDocument;
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEffectEditorView message handlers
|
|
|
|
void CEffectEditorView::OnInitialUpdate()
|
|
{
|
|
CView::OnInitialUpdate();
|
|
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
m_bLButtonDown = FALSE;
|
|
m_bRButtonDown = FALSE;
|
|
m_dwPreFrame = 0;
|
|
|
|
srand((unsigned)time(NULL));
|
|
|
|
////////////////////////
|
|
// ´ÙÀÌ·ºÆ® °´Ã¼ »ý¼º //
|
|
////////////////////////
|
|
if(NULL == (m_lpD3D = Direct3DCreate8(D3D_SDK_VERSION))) return;
|
|
|
|
// Get the current desktop display mode
|
|
D3DDISPLAYMODE d3ddm;
|
|
if(FAILED(m_lpD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm))) return;
|
|
|
|
D3DPRESENT_PARAMETERS d3dpp;
|
|
ZeroMemory(&d3dpp, sizeof(d3dpp));
|
|
d3dpp.Windowed = TRUE;
|
|
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
|
d3dpp.BackBufferFormat = d3ddm.Format;
|
|
d3dpp.EnableAutoDepthStencil = TRUE;
|
|
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
|
|
|
if(FAILED(m_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, this->m_hWnd,
|
|
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &m_lpD3DDevice))) return;
|
|
|
|
HKEY hMPClientReg;
|
|
DWORD dwReadType,dwReadLens;
|
|
dwReadType=0;
|
|
dwReadLens=256;
|
|
char strPath[MAX_PATH], strTemp[MAX_PATH];
|
|
|
|
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\GamaSoft\\MP-Client",0,KEY_READ,&hMPClientReg)==ERROR_SUCCESS &&
|
|
RegQueryValueEx(hMPClientReg, "FX", 0, &dwReadType, (LPBYTE)strPath,&dwReadLens)==ERROR_SUCCESS)
|
|
{
|
|
sprintf(EFFECTTEXTUREPATH, "%s\\Texture\\Effect\\", strPath);
|
|
strcat(strPath, "\\Character\\Data");
|
|
RegCloseKey(hMPClientReg);
|
|
}
|
|
else
|
|
exit(0);
|
|
|
|
CTexture::Init(m_lpD3DDevice);
|
|
////
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\Tex");
|
|
CZ3DRenderable::_Init( m_lpD3DDevice );
|
|
Z3DTexture::_Init( m_lpD3DDevice, strTemp, 0 );
|
|
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\Ani\\");
|
|
g_ContAniKeyPack.SetFilePath( strTemp );
|
|
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\Mesh\\");
|
|
g_ContLODMesh.SetFilePath( strTemp );
|
|
|
|
// Texpiece name table loading
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\Tex\\");
|
|
g_ContTexturePiece.SetFilePath( strTemp );
|
|
|
|
// attachment mesh
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\AMesh\\");
|
|
g_ContAMesh.SetFilePath( strTemp );
|
|
|
|
// texture
|
|
strcpy(strTemp, strPath);
|
|
strcat(strTemp, "\\Texture\\");
|
|
g_ContTexture.SetFilePath( strTemp );
|
|
|
|
if( FALSE == CZ3DCharacterModel::_Init( strPath ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if( false == CZ3DGeneralChrModel::_BuildCMDSList() )
|
|
{
|
|
return;
|
|
}
|
|
/////
|
|
m_bCharVisible = TRUE;
|
|
/*
|
|
m_pChr = new CZ3DGeneralChrModel;
|
|
m_pChr->Init( "PC_WOMAN.GCMDS" );
|
|
m_pChr->SetStaticSlot( "FACE", "FACE01" );
|
|
m_pChr->SetStaticSlot( "HAIR", "HAIR02" );
|
|
m_pChr->SetPosition(0.0f, 0.0f, 0.0f);
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
strcpy(m_strMotion, "WAIT");
|
|
m_pChr->SetMotion(m_strMotion);
|
|
m_pChr->SetAttachmentSlot("WEAPON", NULL);
|
|
*/
|
|
/* m_pChr = CSceneManager::AddCharacter("MON_Goblin.GCMDS","FACE01","HAIR01");
|
|
m_pChr->SetPosition(0.0f,0.0f,0.0f);
|
|
m_pChr->SetMotion("WAIT");
|
|
*/
|
|
SetupMatrices();
|
|
|
|
CZ3DCharacterModel::Process();
|
|
CZ3DObject::Process();
|
|
|
|
InitGrid();
|
|
|
|
if(m_lpEffect) { delete m_lpEffect; m_lpEffect = NULL; }
|
|
|
|
m_lpEffect = new CX3DEditEffect;
|
|
m_lpEffect->SetCenter(0.0f, 0.0f, 0.0f);
|
|
m_lpEffect->SetAxis(0.0f, 0.0f, 0.0f);
|
|
m_lpEffect->SetDevice(m_lpD3DDevice);
|
|
m_lpEffect->SetMaxFrame(30);
|
|
m_lpEffect->SetIncFrame(1.0f);
|
|
m_lpEffect->SetFrameTick(1000 / 30);
|
|
m_lpEffect->SetPlay(FALSE);
|
|
m_lpEffect->SetLoop(FALSE);
|
|
|
|
m_dwPickEffect = 0xFFFFFFFF;
|
|
|
|
m_cBackRed = 0;
|
|
m_cBackGreen = 0;
|
|
m_cBackBlue = 0;
|
|
CSceneManager::SetDevice(m_lpD3DDevice);
|
|
|
|
}
|
|
|
|
void CEffectEditorView::SetupMatrices()
|
|
{
|
|
D3DXMATRIX matWorld;
|
|
D3DXMatrixIdentity(&matWorld);
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
|
|
|
|
m_fCameraX = 0.0f;
|
|
m_fCameraY = 130.0f;
|
|
m_fCameraZ = 0.0f;
|
|
m_fCameraRotX = m_fCameraRotY = m_fCameraRotZ = 0.0f;
|
|
m_fYaw = 0.0f;
|
|
m_fRange = -350.0f;
|
|
|
|
vector3 vecCamera = vector3(0.0f, 0.0f, m_fRange);
|
|
quaternion quatAxis;
|
|
quatAxis.Identity();
|
|
quatAxis.Yaw(m_fYaw);
|
|
z3d::VectorRotate(vecCamera, vecCamera, quatAxis);
|
|
|
|
vecCamera.x += m_fCameraX;
|
|
vecCamera.y += m_fCameraY;
|
|
vecCamera.z += m_fCameraZ;
|
|
|
|
D3DXMATRIX matView;
|
|
D3DXMatrixLookAtLH(&matView, (D3DXVECTOR3 *)&vecCamera, &D3DXVECTOR3(m_fCameraX, m_fCameraY, m_fCameraZ),
|
|
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
|
|
m_lpD3DDevice->SetTransform(D3DTS_VIEW, &matView);
|
|
|
|
D3DXMATRIX matProj;
|
|
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/3, 1.0f, 1.0f, 1000000.0f);
|
|
m_lpD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
|
|
}
|
|
|
|
D3DMATRIX g_matView;
|
|
void CEffectEditorView::Render()
|
|
{
|
|
|
|
// CZ3DObject *body;
|
|
// body = m_pChr->GetSkeletonPartObject("WAIST");
|
|
// matrix *head = body->GetTM();
|
|
// m_lpEffect->SetCenter(head->_41,head->_42,head->_43);
|
|
// CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
|
|
// if(GetFocus()->m_hWnd != mf->m_hWnd) return;
|
|
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
if(::GetForegroundWindow() != (HWND)mf->m_hWnd)
|
|
{
|
|
|
|
return;
|
|
}
|
|
m_lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(m_cBackRed, m_cBackGreen, m_cBackBlue), 1.0f, 0);
|
|
// if(!m_lpEffect->GetPlay())
|
|
{
|
|
MoveCamera();
|
|
}
|
|
|
|
m_lpD3DDevice->BeginScene();
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
|
|
/*
|
|
if(m_bCharVisible)
|
|
{
|
|
CZ3DRenderable::Process();
|
|
m_pChr->Render();
|
|
CZ3DRenderable::SecondProcess();
|
|
}
|
|
*/
|
|
matrix matWorld;
|
|
matWorld.MakeIdent();
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&matWorld);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
|
|
|
m_lpD3DDevice->SetVertexShader(LVERTEXFVF);
|
|
|
|
if(!m_lpEffect->GetPlay()) DrawGrid();
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
|
|
|
m_lpEffect->GetDevice()->GetTransform(D3DTS_VIEW, &g_matView);
|
|
m_lpEffect->SetViewMatrix((matrix *)&g_matView);
|
|
m_lpEffect->SetStart(true);
|
|
|
|
if(m_lpEffect->GetPlay())
|
|
{
|
|
m_dwTick = GetTickCount();
|
|
if(m_dwTick - m_dwOldTick >= m_lpEffect->GetFrameTick())
|
|
{
|
|
float fFrame = ((m_dwTick - m_dwOldTick) / m_lpEffect->GetFrameTick()) * m_lpEffect->GetIncFrame();
|
|
m_lpEffect->Interpolation(m_dwTick, (float)m_fPlayFrame);
|
|
|
|
CZ3DCharacterModel::Process();
|
|
CZ3DObject::Process();
|
|
|
|
m_dwOldTick = m_dwTick;
|
|
m_fPlayFrame += fFrame;
|
|
}
|
|
m_lpEffect->Render();
|
|
|
|
if(m_fPlayFrame > m_lpEffect->GetMaxFrame())
|
|
{
|
|
if(m_lpEffect->GetLoop())
|
|
{
|
|
m_fPlayFrame = 0.0f;
|
|
m_lpEffect->SetFrame(0.0f);
|
|
// m_pChr->SetMotion(m_strMotion);
|
|
// m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
} else
|
|
{
|
|
m_lpEffect->SetPlay(FALSE);
|
|
}
|
|
}
|
|
} else
|
|
{
|
|
m_lpEffect->Interpolation(0, m_dwPreFrame);
|
|
m_lpEffect->Render();
|
|
}
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
|
|
|
if(!m_lpEffect->GetPlay() && m_dwPickEffect != 0xFFFFFFFF)
|
|
{
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
|
|
m_lpEffect->RenderPicked(m_dwPickEffect, m_dwPreFrame);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
|
|
}
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
|
|
m_lpD3DDevice->EndScene();
|
|
|
|
m_lpD3DDevice->Present(NULL, NULL, NULL, NULL);
|
|
}
|
|
|
|
HRESULT CEffectEditorView::InitGrid()
|
|
{
|
|
m_lpGrid[0].v = vector3(-100000.0f, 0.0f, 0.0f);
|
|
m_lpGrid[0].diff = color(0xFF, 0x00, 0x00);
|
|
m_lpGrid[0].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[0].tu = m_lpGrid[0].tv = 0.0f;
|
|
|
|
m_lpGrid[1].v = vector3(100000.0f, 0.0f, 0.0f);
|
|
m_lpGrid[1].diff = color(0xFF, 0x00, 0x00);
|
|
m_lpGrid[1].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[1].tu = m_lpGrid[1].tv = 0.0f;
|
|
|
|
m_lpGrid[2].v = vector3(0.0f, -100000.0f, 0.0f);
|
|
m_lpGrid[2].diff = color(0x00, 0xFF, 0x00);
|
|
m_lpGrid[2].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[2].tu = m_lpGrid[2].tv = 0.0f;
|
|
|
|
m_lpGrid[3].v = vector3(0.0f, 100000.0f, 0.0f);
|
|
m_lpGrid[3].diff = color(0x00, 0xFF, 0x00);
|
|
m_lpGrid[3].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[3].tu = m_lpGrid[3].tv = 0.0f;
|
|
|
|
m_lpGrid[4].v = vector3(0.0f, 0.0f, -100000.0f);
|
|
m_lpGrid[4].diff = color(0x00, 0x00, 0xFF);
|
|
m_lpGrid[4].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[4].tu = m_lpGrid[4].tv = 0.0f;
|
|
|
|
m_lpGrid[5].v = vector3(0.0f, 0.0f, 100000.0f);
|
|
m_lpGrid[5].diff = color(0x00, 0x00, 0xFF);
|
|
m_lpGrid[5].spec = color(0xFF, 0xFF, 0xFF);
|
|
m_lpGrid[5].tu = m_lpGrid[5].tv = 0.0f;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
void CEffectEditorView::DrawGrid()
|
|
{
|
|
unsigned long Light;
|
|
|
|
m_lpD3DDevice->GetRenderState(D3DRS_LIGHTING, &Light);
|
|
|
|
m_lpD3DDevice->SetTexture(0, NULL);
|
|
|
|
if(Light)
|
|
{
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
|
|
m_lpD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, 3, m_lpGrid, sizeof(LVertex));
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
|
|
} else
|
|
{
|
|
m_lpD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, 3, m_lpGrid, sizeof(LVertex));
|
|
}
|
|
}
|
|
|
|
void CEffectEditorView::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
m_bLButtonDown = TRUE;
|
|
|
|
CView::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CEffectEditorView::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
if(m_bLButtonDown)
|
|
{
|
|
vector3 vPickRayDir, vPickRayOrig, vPickRayEnd;
|
|
|
|
D3DXMATRIX matProj;
|
|
m_lpD3DDevice->GetTransform(D3DTS_PROJECTION, &matProj);
|
|
|
|
RECT rcClient;
|
|
GetClientRect(&rcClient);
|
|
|
|
// Compute the vector of the pick ray in screen space
|
|
D3DXVECTOR3 v;
|
|
v.x = ( ( ( 2.0f * point.x ) / (rcClient.right - rcClient.left) ) - 1 ) / matProj._11;
|
|
v.y = -( ( ( 2.0f * point.y ) / (rcClient.bottom - rcClient.top) ) - 1 ) / matProj._22;
|
|
v.z = 1.0f;
|
|
|
|
// Get the inverse view matrix
|
|
D3DXMATRIX matView, m;
|
|
m_lpD3DDevice->GetTransform(D3DTS_VIEW, &matView);
|
|
D3DXMatrixInverse(&m, NULL, &matView);
|
|
|
|
// Transform the screen space pick ray into 3D space
|
|
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
|
|
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
|
|
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
|
|
vPickRayOrig.x = m._41;
|
|
vPickRayOrig.y = m._42;
|
|
vPickRayOrig.z = m._43;
|
|
vPickRayEnd = vPickRayOrig + vPickRayDir * 100000.0f;
|
|
|
|
unsigned long dwEffectKind = m_lpEffect->Pick(vPickRayOrig, vPickRayEnd, m_dwPickEffect);
|
|
if(m_dwPickEffect != 0xFFFFFFFF)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->SetActivePage(dwEffectKind);
|
|
|
|
switch(dwEffectKind)
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_MESH:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
CView::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
void CEffectEditorView::OnRButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
m_bRButtonDown = TRUE;
|
|
m_dwPickEffect = 0xFFFFFFFF;
|
|
m_pointMouseMove = point;
|
|
|
|
CView::OnRButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CEffectEditorView::OnRButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
m_bRButtonDown = FALSE;
|
|
|
|
CView::OnRButtonUp(nFlags, point);
|
|
}
|
|
|
|
void CEffectEditorView::MoveCamera()
|
|
{
|
|
D3DXVECTOR3 vecT(0.0f, 0.0f, 0.0f);
|
|
|
|
if(!m_bActivite) return;
|
|
|
|
if(GetFocus()->m_hWnd != this->m_hWnd) return;
|
|
|
|
if(KeyPressed(VK_LCONTROL)) return;
|
|
|
|
if(KeyPressed('A')) vecT.x -= 0.5f; // Slide Left
|
|
if(KeyPressed('D')) vecT.x += 0.5f; // Slide Right
|
|
if(KeyPressed('W')) vecT.z += 0.5f; // Move Forward
|
|
if(KeyPressed('S')) vecT.z -= 0.5f; // Move Backward
|
|
if(KeyPressed('Q')) vecT.y -= 0.5f; // Move Up
|
|
if(KeyPressed('E')) vecT.y += 0.5f; // Move Down
|
|
if(KeyPressed('Z'))
|
|
m_fYaw += 0.015f; // Roll Up
|
|
if(KeyPressed('C'))
|
|
m_fYaw -= 0.015f; // Roll Down
|
|
|
|
if(KeyPressed(VK_SHIFT)){
|
|
vecT *= 100.0f;
|
|
}
|
|
|
|
m_fCameraX += vecT.x;
|
|
m_fCameraY += vecT.y;
|
|
m_fRange += vecT.z;
|
|
|
|
vector3 vecCamera = vector3(0.0f, 0.0f, m_fRange);
|
|
quaternion quatAxis;
|
|
quatAxis.Identity();
|
|
quatAxis.Yaw(m_fYaw);
|
|
z3d::VectorRotate(vecCamera, vecCamera, quatAxis);
|
|
|
|
vecCamera.x += m_fCameraX;
|
|
vecCamera.y += m_fCameraY;
|
|
vecCamera.z += m_fCameraZ;
|
|
|
|
D3DXMATRIX matView;
|
|
D3DXMatrixLookAtLH(&matView, (D3DXVECTOR3 *)&vecCamera, &D3DXVECTOR3(m_fCameraX, m_fCameraY, m_fCameraZ),
|
|
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
|
|
m_lpD3DDevice->SetTransform(D3DTS_VIEW, &matView);
|
|
}
|
|
|
|
void CEffectEditorView::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
CView::OnMouseMove(nFlags, point);
|
|
}
|
|
|
|
void CEffectEditorView::OnDestroy()
|
|
{
|
|
CView::OnDestroy();
|
|
|
|
// TODO: Add your message handler code here
|
|
if(m_lpEffect) { delete m_lpEffect; m_lpEffect = NULL; }
|
|
|
|
if(m_lpD3DDevice) { m_lpD3DDevice->Release(); m_lpD3DDevice = NULL; }
|
|
if(m_lpD3D) { m_lpD3D->Release(); m_lpD3D = NULL; }
|
|
}
|
|
|
|
void CEffectEditorView::OnFileOpen()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
char strFilter[50] = "EffectÆÄÀÏ(*.eff)|*.eff|¸ðµçÈÀÏ(*.*)|*.*||";
|
|
|
|
CFileDialog dlg(TRUE, "*.eff", "Untitled.eff", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter);
|
|
if(dlg.DoModal() == IDOK)
|
|
{
|
|
CString FileName = dlg.GetPathName();
|
|
int len = strlen((const char *)dlg.GetPathName()) - strlen((const char *)dlg.GetFileName());
|
|
char strPath[MAX_PATH];
|
|
memcpy(strPath, (const char *)dlg.GetPathName(), len);
|
|
strPath[len]= '\0';
|
|
|
|
m_lpEffect->Load((const char *)strPath, (const char *)dlg.GetFileName());
|
|
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.SetMaxFrame(m_lpEffect->GetMaxFrame() + 1);
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldKeyFrame.SetRange(0, m_lpEffect->GetMaxFrame());
|
|
}
|
|
}
|
|
|
|
void CEffectEditorView::OnFileSave()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
char strFilter[50] = "EffectÆÄÀÏ(*.eff)|*.eff|¸ðµçÈÀÏ(*.*)|*.*||";
|
|
|
|
CFileDialog dlg(FALSE, "*.eff", "Untitled.eff", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter);
|
|
if(dlg.DoModal() == IDOK)
|
|
{
|
|
CString FileName = dlg.GetPathName();
|
|
int len = strlen((const char *)dlg.GetPathName()) - strlen((const char *)dlg.GetFileName());
|
|
char strPath[MAX_PATH];
|
|
memcpy(strPath, (const char *)dlg.GetPathName(), len);
|
|
strPath[len]= '\0';
|
|
|
|
m_lpEffect->Save((const char *)strPath, (const char *)dlg.GetFileName());
|
|
}
|
|
}
|
|
|
|
void CEffectEditorView::OnEditRedo()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CCommand *RedoCommand = g_CommandManager.Redo();
|
|
|
|
if(!RedoCommand) return;
|
|
|
|
switch(RedoCommand->GetKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.Redo(RedoCommand);
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.Redo(RedoCommand);
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.Redo(RedoCommand);
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.Redo(RedoCommand);
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.Redo(RedoCommand);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CEffectEditorView::OnEditUndo()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CCommand *UndoCommand = g_CommandManager.Undo();
|
|
|
|
if(!UndoCommand) return;
|
|
|
|
switch(UndoCommand->GetKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.Undo(UndoCommand);
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.Undo(UndoCommand);
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.Undo(UndoCommand);
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.Undo(UndoCommand);
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.Undo(UndoCommand);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CEffectEditorView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
m_bActivite = bActivate;
|
|
|
|
CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
|
|
}
|
|
|
|
void CEffectEditorView::OnFileNew()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
if(m_lpEffect) { delete m_lpEffect; m_lpEffect = NULL; }
|
|
|
|
m_lpEffect = new CX3DEditEffect;
|
|
m_lpEffect->SetCenter(0.0f, 0.0f, 0.0f);
|
|
m_lpEffect->SetAxis(0.0f, 0.0f, 0.0f);
|
|
m_lpEffect->SetDevice(m_lpD3DDevice);
|
|
m_lpEffect->SetMaxFrame(30);
|
|
m_lpEffect->SetIncFrame(1.0f);
|
|
m_lpEffect->SetFrameTick(1000 / 30);
|
|
m_lpEffect->SetPlay(FALSE);
|
|
m_lpEffect->SetLoop(FALSE);
|
|
|
|
m_dwPickEffect = 0xFFFFFFFF;
|
|
|
|
/* CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.InitValue();
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.InitValue();
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.InitValue();
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.InitValue();
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.InitValue();*/
|
|
}
|
|
|
|
void CEffectEditorView::OnCharVisible()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_bCharVisible = TRUE;
|
|
}
|
|
|
|
void CEffectEditorView::OnCharInvisible()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_bCharVisible = FALSE;
|
|
}
|
|
|
|
void CEffectEditorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
switch(nChar)
|
|
{
|
|
case '1':
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
if(m_dwPreFrame < 2)
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.SetKeyFrame(0);
|
|
else
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.SetKeyFrame(mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 2);
|
|
|
|
if(0xFFFFFFFF != m_dwPickEffect)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)m_lpEffect)->GetEffect(m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case '2':
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
if(mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame >= mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwTotalFrame)
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.SetKeyFrame(mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwTotalFrame - 1);
|
|
else
|
|
mf->m_KeyBar.m_lpKeySheet->m_Page1.SetKeyFrame(mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame);
|
|
|
|
if(0xFFFFFFFF != m_dwPickEffect)
|
|
{
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)m_lpEffect)->GetEffect(m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case '4':
|
|
m_fPlayFrame = 0.0f;
|
|
m_dwOldTick = GetTickCount() - 33;
|
|
m_lpEffect->SetFrame(0.0f);
|
|
m_lpEffect->SetPlay(TRUE);
|
|
break;
|
|
|
|
case ('[' + 128):
|
|
{
|
|
if(m_dwPickEffect == 0xFFFFFFFF)
|
|
{
|
|
m_dwPickEffect = m_lpEffect->GetEffectSize() - 1;
|
|
}
|
|
else
|
|
{
|
|
if(m_dwPickEffect == 0) m_dwPickEffect = m_lpEffect->GetEffectSize() - 1; else m_dwPickEffect--;
|
|
}
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->SetActivePage(m_lpEffect->GetEffectKind(m_dwPickEffect));
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)m_lpEffect)->GetEffect(m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_MESH:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
break;
|
|
}
|
|
SetFocus();
|
|
}
|
|
break;
|
|
|
|
|
|
case (']' + 128):
|
|
{
|
|
if(m_dwPickEffect == 0xFFFFFFFF)
|
|
{
|
|
m_dwPickEffect = 0;
|
|
}
|
|
else
|
|
{
|
|
if(m_dwPickEffect == m_lpEffect->GetEffectSize() - 1) m_dwPickEffect = 0; else m_dwPickEffect++;
|
|
}
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->SetActivePage(m_lpEffect->GetEffectKind(m_dwPickEffect));
|
|
CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)m_lpEffect)->GetEffect(m_dwPickEffect);
|
|
switch(pEffect->GetEffectKind())
|
|
{
|
|
case 0:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo();
|
|
break;
|
|
|
|
case 1:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo();
|
|
break;
|
|
|
|
case 2:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo();
|
|
break;
|
|
|
|
case 3:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo();
|
|
break;
|
|
|
|
case 4:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo();
|
|
break;
|
|
|
|
case EFFECT_MESH:
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
break;
|
|
}
|
|
SetFocus();
|
|
}
|
|
break;
|
|
/*
|
|
case ('.'): {
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
SetFocus();
|
|
if(mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum < mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectMax-1) {
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum++;
|
|
}
|
|
else {
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum = 0;
|
|
}
|
|
}
|
|
break;
|
|
case ('/'): {
|
|
CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd;
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo();
|
|
SetFocus();
|
|
if(mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum > 0)
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum--;
|
|
else {
|
|
mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectNum = mf->m_EffectBar.m_lpEffectSheet->m_Page6.m_dwObjectMax -1;
|
|
}
|
|
}
|
|
break;
|
|
*/
|
|
}//switch
|
|
CView::OnKeyDown(nChar, nRepCnt, nFlags);
|
|
}
|
|
|
|
void CEffectEditorView::OnCharWait()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "WAIT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharWalk()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "WALK");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttack()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ATTACK");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttackAdvance()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ATTACK_ADVANCE");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttackLeft()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ATTACK_LEFT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttackRetreat()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ATTACK_RETREAT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttackRight()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ATTACK_RIGHT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharAttacked()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "ATTACKED");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBack()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "WALK_BACK");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBash()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "BASH");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharCasting()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "CASTING");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharCripWeapon()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "GRIP_WEAPON");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharEnd()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "CAST_END");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharFalldown()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
strcpy(m_strMotion, "FALLDOWN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharGetUp()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
m_pChr->SetMotion("SIT_DOWN");
|
|
strcpy(m_strMotion, "GET_UP");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharLeft()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "WALK_LEFT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharPutInWeapon()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "PUT_IN_WEAPON");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharRest()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
m_pChr->SetMotion("SIT_DOWN");
|
|
strcpy(m_strMotion, "REST");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharRestoreHand()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "RESTORE_HAND");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharRight()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "WALK_RIGHT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharRun()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "RUN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharSitDown()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
strcpy(m_strMotion, "SIT_DOWN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharStun()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
strcpy(m_strMotion, "STUN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharTakeOutWeapon()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "TAKE_OUT_WEAPON");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharNormal()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 0);
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBattle()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet("NO_WEAPON_B");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBlunt()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "STAFF");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_BLUNT");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBow()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "COMPOSITE_BOW");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_BOW");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharCrossbow()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "ARBALEST");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_CROSSBOW");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharDagger()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "DAGGER");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_DAGGER");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharNoweaponb()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", NULL);
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "NO_WEAPON_B");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharOnehand()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "PRACTICE_SWORD");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_ONE_HAND");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharTwohand()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetAttachmentSlot("WEAPON", "ANCIENT_SWORD");
|
|
m_pChr->SetAttachmentHolder("WEAPON", 1);
|
|
strcpy(m_strWeaponSeet, "WEAPON_TWO_HAND");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharMCastBegin()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "M_CAST_BEGIN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharMCasting1()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "M_CASTING");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharMCasting2()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "M_CASTING2");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharCastBegin()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "CAST_BEGIN");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharCasting2()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "CASTING2");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharBlow()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "COMBINATION_BLOW");
|
|
}
|
|
|
|
void CEffectEditorView::OnCharRoundSwing()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
m_pChr->SetMotionSheet(m_strWeaponSeet);
|
|
strcpy(m_strMotion, "ROUND_SWING");
|
|
}
|