Files
Client/GameTools/WORLDCREATOR/DlgCamera.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

380 lines
9.4 KiB
C++

// DlgCamera.cpp : implementation file
//
#include "stdafx.h"
#include "worldcreator.h"
#include "DlgCamera.h"
#include "SceneManager.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgCamera dialog
CDlgCamera::CDlgCamera(CWnd* pParent /*=NULL*/)
: CDialog(CDlgCamera::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgCamera)
m_Timer = 0;
m_fCameraPosX = 0.0f;
m_fCameraPosY = 0.0f;
m_fCameraPosZ = 0.0f;
m_fCameraTargetX = 0.0f;
m_fCameraTargetY = 0.0f;
m_isPlay = FALSE;
m_isRewind = FALSE;
m_fCameraTargetZ = 0.0f;
m_SelectTime = 0;
m_fTotalTime = 0.0f;
//}}AFX_DATA_INIT
m_CameraList=NULL;
}
void CDlgCamera::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgCamera)
DDX_Control(pDX, IDC_LIST_CAMERANODE, m_CameraNodeList);
DDX_Slider(pDX, IDC_SLIDER_TIMER, m_Timer);
DDX_Text(pDX, IDC_EDIT_CAMERAPOSX, m_fCameraPosX);
DDX_Text(pDX, IDC_EDIT_CAMERAPOSY, m_fCameraPosY);
DDX_Text(pDX, IDC_EDIT_CAMERAPOSZ, m_fCameraPosZ);
DDX_Text(pDX, IDC_EDIT_CAMERATARX, m_fCameraTargetX);
DDX_Text(pDX, IDC_EDIT_CAMERATARY, m_fCameraTargetY);
DDX_Check(pDX, IDC_CHECK_PLAY, m_isPlay);
DDX_Check(pDX, IDC_CHECK_REWIND, m_isRewind);
DDX_Text(pDX, IDC_EDIT_CAMERATARZ, m_fCameraTargetZ);
DDX_Text(pDX, IDC_EDIT_SELECTIME, m_SelectTime);
DDX_Text(pDX, IDC_EDIT_TOTALTIME, m_fTotalTime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgCamera, CDialog)
//{{AFX_MSG_MAP(CDlgCamera)
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_TIMER, OnReleasedcaptureSliderTimer)
ON_BN_CLICKED(IDC_CHECK_PLAY, OnCheckPlay)
ON_BN_CLICKED(IDC_CHECK_REWIND, OnCheckRewind)
ON_BN_CLICKED(IDC_BUTTON_RECORD, OnButtonRecord)
ON_LBN_DBLCLK(IDC_LIST_CAMERANODE, OnDblclkListCameranode)
ON_BN_CLICKED(IDC_BUTTON_SUBFRAME, OnButtonSubframe)
ON_BN_CLICKED(IDC_BUTTON_ADDFRAME, OnButtonAddframe)
ON_BN_CLICKED(IDC_BUTTON_NODEDELETE, OnButtonNodedelete)
ON_BN_CLICKED(IDC_BUTTON_NODELOAD, OnButtonNodeload)
ON_BN_CLICKED(IDC_BUTTON_NODESAVE, OnButtonNodesave)
ON_EN_CHANGE(IDC_EDIT_TOTALTIME, OnChangeEditTotaltime)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgCamera message handlers
void CDlgCamera::OnReleasedcaptureSliderTimer(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData();
m_SelectTime=m_Timer;
UpdateData(FALSE);
*pResult = 0;
}
void CDlgCamera::OnCheckPlay()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_fTotalTime<= 0.01f)
{
return;
}
CSceneManager::GetCamera()->StartPlay();
}
void CDlgCamera::OnCheckRewind()
{
// TODO: Add your control notification handler code here
UpdateData();
}
void CDlgCamera::OnButtonRecord()
{
if(m_CameraList==NULL)
m_CameraList=CSceneManager::GetCamera()->GetCameraList();
// TODO: Add your control notification handler code here
UpdateData();
m_SelectTime=m_Timer;
D3DXQUATERNION qt;
D3DXQuaternionRotationYawPitchRoll(&qt,CSceneManager::GetCamera()->GetRotationY(),
CSceneManager::GetCamera()->GetRotationX(),
CSceneManager::GetCamera()->GetRotationZ());
vector3 vecCameraPos=*(CSceneManager::GetCamera()->GetPosition());
quaternion qAngle;
qAngle.x=qt.x;
qAngle.y=qt.y;
qAngle.z=qt.z;
qAngle.w=qt.w;
m_fCameraPosX=vecCameraPos.x;
m_fCameraPosY=vecCameraPos.y;
m_fCameraPosZ=vecCameraPos.z;
CViewCamera::CameraNode AddNode;
AddNode.m_vecPos=vecCameraPos;
AddNode.m_Time=m_Timer;
AddNode.m_qAngle=qAngle;
if(m_CameraList->num==0)
{
m_CameraList->Add(AddNode);
}
else
{
bool isAlreadyWrite=false;
for(int cNode=0;cNode< m_CameraList->num;cNode++)
{
if((*m_CameraList)[cNode].m_Time==m_Timer)
{
(*m_CameraList)[cNode]=AddNode;
isAlreadyWrite=true;
break;
}
}
if(isAlreadyWrite==false)
{
for(cNode=1;cNode< m_CameraList->num;cNode++)
{
if( (*m_CameraList)[cNode].m_Time < m_Timer &&
m_Timer < (*m_CameraList)[cNode].m_Time )
{
m_CameraList->Insert(AddNode,cNode);
isAlreadyWrite=true;
break;
}
}
}
if(isAlreadyWrite==false)
{
m_CameraList->Add(AddNode);
}
}
UpdateList();
/*
D3DXQuaternionRotationYawPitchRoll(
D3DXQUATERNION* pOut,
FLOAT Yaw,y
FLOAT Pitch,x
FLOAT Rollz
);
*/
/*
vector3 vecCameraPos=*(CSceneManager::GetCamera()->GetPosition());
matrix matCameraPos=*(CSceneManager::GetCamera()->GetMatPosition());
matrix matToward,matUp;
matToward.Translation(vector3(0.0f,0.0f,1.0f));
matUp.Translation(vector3(0.0f,1.0f,0.0f));
m_fCameraPosX=matCameraPos._41;
m_fCameraPosY=matCameraPos._42;
m_fCameraPosZ=matCameraPos._43;
matToward=matToward*matCameraPos;
matUp=matUp*matCameraPos;
vector3 vecNowPos,vecTowardPos,vecUpPos;
vecNowPos=matCameraPos.GetLoc();
vecTowardPos=matToward.GetLoc();
vecTowardPos=vecTowardPos-vecNowPos;
vecUpPos=matUp.GetLoc();
vecUpPos=vecUpPos-vecNowPos;
CViewCamera::CameraNode AddNode;
AddNode.m_vecPos=vecNowPos;
//AddNode.m_vecTarget=vecNowPos+vecTowardPos;
vecTowardPos.Normalize();
AddNode.m_vecTarget=vecTowardPos;
vecUpPos.Normalize();
AddNode.m_vecUp=vecUpPos;
AddNode.m_Time=m_Timer;
if(m_CameraList->num==0)
{
m_CameraList->Add(AddNode);
}
else
{
bool isAlreadyWrite=false;
for(int cNode=0;cNode< m_CameraList->num;cNode++)
{
if((*m_CameraList)[cNode].m_Time==m_Timer)
{
(*m_CameraList)[cNode]=AddNode;
isAlreadyWrite=true;
break;
}
}
if(isAlreadyWrite==false)
{
for(cNode=1;cNode< m_CameraList->num;cNode++)
{
if( (*m_CameraList)[cNode].m_Time < m_Timer &&
m_Timer < (*m_CameraList)[cNode].m_Time )
{
m_CameraList->Insert(AddNode,cNode);
isAlreadyWrite=true;
break;
}
}
}
if(isAlreadyWrite==false)
{
m_CameraList->Add(AddNode);
}
}
UpdateList();
//CSceneManager::GetCamera()->AddCameraNode(vecNowPos,vecNowPos+vecTowardPos,vector3(0.0f,1.0f,0.0f),0.0f);
/*
D3DXMatrixTranslation(&matT, vecT.x, vecT.y, vecT.z);
D3DXMatrixMultiply(matPosition, &matT, matPosition);
m_fCameraPosX=vecCameraPos.x;
m_fCameraPosY=vecCameraPos.y;
m_fCameraPosZ=vecCameraPos.z;
*/
UpdateData(FALSE);
}
BOOL CDlgCamera::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgCamera::UpdateList()
{
if(m_CameraList==NULL)
m_CameraList=CSceneManager::GetCamera()->GetCameraList();
int nNode=m_CameraNodeList.GetCount();
for(int cNode=0;cNode<nNode;cNode++)
{
m_CameraNodeList.DeleteString(0);
}
CString strNode;
for(cNode=0;cNode<m_CameraList->num;cNode++)
{
strNode.Format("%d",(*m_CameraList)[cNode].m_Time);
m_CameraNodeList.AddString(strNode);
}
UpdateData(FALSE);
}
void CDlgCamera::OnDblclkListCameranode()
{
if(m_CameraList->num==0)
return;
int CurSel=m_CameraNodeList.GetCurSel();
m_fCameraPosX=(*m_CameraList)[CurSel].m_vecPos.x;
m_fCameraPosY=(*m_CameraList)[CurSel].m_vecPos.y;
m_fCameraPosZ=(*m_CameraList)[CurSel].m_vecPos.z;
m_Timer=(*m_CameraList)[CurSel].m_Time;
m_SelectTime=m_Timer;
UpdateData(FALSE);
// TODO: Add your control notification handler code here
}
void CDlgCamera::OnButtonSubframe()
{
// TODO: Add your control notification handler code here
UpdateData();
m_Timer--;
if(m_Timer<0)
m_Timer=0;
m_SelectTime=m_Timer;
UpdateData(FALSE);
}
void CDlgCamera::OnButtonAddframe()
{
// TODO: Add your control notification handler code here
UpdateData();
m_Timer++;
if(m_Timer>100)
m_Timer=100;
UpdateData(FALSE);
}
void CDlgCamera::OnButtonNodedelete()
{
// TODO: Add your control notification handler code here
m_CameraList->num=0;
UpdateList();
}
void CDlgCamera::OnButtonNodeload()
{
// TODO: Add your control notification handler code here
CString strFilter = "ZallA 3D CameraAnimation Files (*.ZCA)|*.ZCA|All Files (*.*)|*.*||";
CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString strFilename=filedia.GetFileName();
if(strFilename!="")
{
CSceneManager::GetCamera()->Load(strFilename.LockBuffer());
}
m_fTotalTime=CSceneManager::GetCamera()->GetTotalAniTime();
UpdateList();
UpdateData(FALSE);
}
void CDlgCamera::OnButtonNodesave()
{
// TODO: Add your control notification handler code here
CString strFilter = "ZallA 3D CameraAnimation Files (*.ZCA)|*.ZCA|All Files (*.*)|*.*||";
CFileDialog filedia(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
filedia.DoModal();
CString strFilename=filedia.GetFileName();
if(strFilename!="")
{
CSceneManager::GetCamera()->Save(strFilename.LockBuffer());
}
}
void CDlgCamera::OnChangeEditTotaltime()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData();
CSceneManager::GetCamera()->SetTotalAniTime(m_fTotalTime);
}
BOOL CDlgCamera::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
CSceneManager::GetCamera()->LoadViewMatrix();
CSceneManager::m_ViewerMode=0;
OnOK();
}
return CDialog::PreTranslateMessage(pMsg);
}