Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
266 lines
5.6 KiB
C++
266 lines
5.6 KiB
C++
// DVPanel.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "pixelwhippro.h"
|
|
#include "DVPanel.h"
|
|
#include "EffectEditWin.h"
|
|
#include "CurveEditorFrame.h"
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DVPanel dialog
|
|
|
|
extern CPixelWhipProApp theApp;
|
|
|
|
DVPanel::DVPanel(CWnd* pParent /*=NULL*/)
|
|
: CDynaPanel(DVPanel::IDD, pParent)
|
|
{
|
|
LastPos=-1;
|
|
LastNum=0.0f;
|
|
//{{AFX_DATA_INIT(DVPanel)
|
|
//}}AFX_DATA_INIT
|
|
RecurseGaurd=false;
|
|
}
|
|
|
|
|
|
void DVPanel::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDynaPanel::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(DVPanel)
|
|
DDX_Control(pDX, IDC_USEVAR, m_varbut);
|
|
DDX_Control(pDX, IDC_NUM, m_numedit);
|
|
DDX_Control(pDX, IDC_SLIDER, m_slider);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(DVPanel, CDynaPanel)
|
|
//{{AFX_MSG_MAP(DVPanel)
|
|
ON_WM_HSCROLL()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER, OnReleasedcaptureSlider)
|
|
ON_EN_CHANGE(IDC_NUM, OnChangeNum)
|
|
ON_EN_KILLFOCUS(IDC_NUM, OnKillfocusNum)
|
|
ON_BN_CLICKED(IDC_USEVAR, OnUsevar)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DVPanel message handlers
|
|
|
|
void DVPanel::UpdateControl()
|
|
{
|
|
|
|
if(MyCSet && MyCSet->Curve)
|
|
{
|
|
|
|
UpdateCurve();
|
|
|
|
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
|
|
|
|
if(Curve)
|
|
{
|
|
|
|
Check_Object(Curve);
|
|
|
|
float Max,Min;
|
|
float SliVal;
|
|
BaseCap=SliVal=Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar);
|
|
Curve->ExpensiveComputeRange(&Min,&Max,theApp.ParamWin->ViewVar);
|
|
|
|
|
|
|
|
SliUnit=Max/100;
|
|
if(SliUnit<.00001f) SliUnit=.01f;
|
|
CString str;
|
|
str.Format("%5.3f",SliVal);
|
|
m_numedit.SetWindowText(str);
|
|
m_numedit.RedrawWindow();
|
|
m_slider.SetRange(0,200);
|
|
m_slider.SetPos(100);
|
|
|
|
if(Curve->IsComplex())
|
|
CheckDlgButton(IDC_USEVAR,Curve->GetSeedFlagIfComplex());
|
|
m_slider.ShowWindow(SW_SHOW);
|
|
m_numedit.ShowWindow(SW_SHOW);
|
|
|
|
|
|
// m_slider.EnableWindow(TRUE);
|
|
// m_numedit.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_slider.ShowWindow(SW_HIDE);
|
|
m_numedit.ShowWindow(SW_HIDE);
|
|
// m_slider.EnableWindow(FALSE);
|
|
// m_numedit.EnableWindow(FALSE);
|
|
// m_numedit.SetWindowText("");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void DVPanel::Set(void *pt)
|
|
{
|
|
|
|
}
|
|
|
|
void DVPanel::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
theApp.Modified=true;
|
|
if(LastPos==-1)
|
|
{
|
|
LastPos=m_slider.GetPos();
|
|
}
|
|
else
|
|
{
|
|
|
|
if(MyCSet)
|
|
{
|
|
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
|
|
|
|
if(Curve)
|
|
{
|
|
Check_Object(Curve);
|
|
|
|
Stuff::DynamicMemoryStream stream;
|
|
|
|
if(Curve)
|
|
MyCSet->Curve->Save(&stream);
|
|
|
|
|
|
Curve->TranslateTo(BaseCap+(float)(m_slider.GetPos()-LastPos)*(SliUnit),theApp.ParamWin->ViewVar);
|
|
|
|
|
|
CString str;
|
|
if(MyCSet->IsDataValid())
|
|
{
|
|
str.Format("%5.3f",Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar));
|
|
m_numedit.SetWindowText(str);
|
|
}
|
|
else
|
|
{
|
|
stream.Rewind();
|
|
MyCSet->Curve->Load(&stream, gosFX::CurrentGFXVersion);
|
|
}
|
|
|
|
|
|
theApp.CurveWin->m_wndView.ReDraw();
|
|
if(Curve->IsComplex())
|
|
CheckDlgButton(IDC_USEVAR,Curve->GetSeedFlagIfComplex());
|
|
UpdateData(FALSE);
|
|
|
|
|
|
UpdateCurve();
|
|
}
|
|
CDynaPanel::OnHScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL DVPanel::OnInitDialog()
|
|
{
|
|
CDynaPanel::OnInitDialog();
|
|
m_slider.SetRange(0,200);
|
|
m_slider.SetPos(100);
|
|
if(MyCSet->Curve->IsComplex())
|
|
{
|
|
m_varbut.ShowWindow(SW_SHOW);
|
|
CheckDlgButton(IDC_USEVAR,MyCSet->Curve->GetSeedFlagIfComplex());
|
|
}
|
|
else
|
|
{
|
|
m_varbut.ShowWindow(SW_HIDE);
|
|
}
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void DVPanel::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CDynaPanel::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void DVPanel::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LastPos=-1;
|
|
m_slider.SetPos(100);
|
|
// UpdateControl();
|
|
if(MyCSet->Curve)
|
|
{
|
|
Check_Object(MyCSet->Curve);
|
|
BaseCap=MyCSet->Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar);
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void DVPanel::OnChangeNum()
|
|
{
|
|
if(RecurseGaurd==true) return;
|
|
|
|
theApp.Modified=true;
|
|
|
|
if(LastPos==-1)
|
|
{
|
|
CString str;
|
|
m_numedit.GetWindowText(str);
|
|
m_slider.SetPos(100);
|
|
|
|
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
|
|
|
|
if(Curve)
|
|
{
|
|
Stuff::DynamicMemoryStream stream;
|
|
if(MyCSet->Curve)
|
|
MyCSet->Curve->Save(&stream);
|
|
|
|
Check_Object(Curve);
|
|
Curve->TranslateTo((float)atof(str),theApp.ParamWin->ViewVar);
|
|
|
|
stream.Rewind();
|
|
if(!MyCSet->IsDataValid())
|
|
{
|
|
str.Format("%5.3f",LastNum);
|
|
RecurseGaurd=true;
|
|
m_numedit.SetWindowText(str);
|
|
RecurseGaurd=false;
|
|
MyCSet->Curve->Load(&stream, gosFX::CurrentGFXVersion);
|
|
if(!MyCSet->IsDataValid())
|
|
STOP(("Curve %s Cannot Be fixed",(LPCSTR)MyCSet->Name));
|
|
}
|
|
theApp.CurveWin->m_wndView.ReDraw();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
{
|
|
CString str;
|
|
m_numedit.GetWindowText(str);
|
|
LastNum=(float)atof(str);
|
|
}
|
|
}
|
|
|
|
|
|
void DVPanel::OnKillfocusNum()
|
|
{
|
|
UpdateControl();
|
|
}
|
|
|
|
void DVPanel::OnUsevar()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
bool newcheckstate=(IsDlgButtonChecked(IDC_USEVAR)==0)?false:true;
|
|
MyCSet->Curve->SetSeedFlagIfComplex(newcheckstate);
|
|
if(!MyCSet->IsDataValid())
|
|
{
|
|
newcheckstate=!newcheckstate;
|
|
CheckDlgButton(IDC_USEVAR,newcheckstate?1:0);
|
|
MyCSet->Curve->SetSeedFlagIfComplex(newcheckstate);
|
|
}
|
|
}
|