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.
203 lines
4.6 KiB
C++
203 lines
4.6 KiB
C++
// TexturePanel.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "MapCreator.h"
|
|
#include "TexturePanel.h"
|
|
#include <Stuff\Stuff.hpp>
|
|
#include <GameOS\ToolOS.hpp>
|
|
#include <ImageLib\Image.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTexturePanel dialog
|
|
|
|
|
|
CTexturePanel::CTexturePanel(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CTexturePanel::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CTexturePanel)
|
|
m_TTEdit = _T("");
|
|
m_DetailTexture = _T("");
|
|
m_FadeIn = 400.0f;
|
|
m_FadeOut = 600.0f;
|
|
m_DRatio = 16;
|
|
m_IGData = TRUE;
|
|
|
|
//}}AFX_DATA_INIT
|
|
|
|
//#ifdef LAB_ONLY
|
|
// m_IGData = TRUE;
|
|
//#else
|
|
m_IGData = FALSE;
|
|
//#endif
|
|
|
|
Create(IDD,pParent);
|
|
SetWindowPos(NULL,5,25,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
|
|
|
|
}
|
|
|
|
|
|
void CTexturePanel::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CTexturePanel)
|
|
DDX_Control(pDX, IDC_IGDATA, m_IGDataCon);
|
|
DDX_Text(pDX, IDC_TTEDIT, m_TTEdit);
|
|
DDX_Text(pDX, IDC_DTEDIT, m_DetailTexture);
|
|
DDX_Text(pDX, IDC_FADEIN, m_FadeIn);
|
|
DDV_MinMaxFloat(pDX, m_FadeIn, 100.f, 1000.f);
|
|
DDX_Text(pDX, IDC_FADEOUT, m_FadeOut);
|
|
DDV_MinMaxFloat(pDX, m_FadeOut, 100.f, 1000.f);
|
|
DDX_Text(pDX, IDC_DRATIO, m_DRatio);
|
|
DDV_MinMaxInt(pDX, m_DRatio, 1, 16);
|
|
DDX_Check(pDX, IDC_IGDATA, m_IGData);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTexturePanel, CDialog)
|
|
//{{AFX_MSG_MAP(CTexturePanel)
|
|
ON_BN_CLICKED(IDC_TTBROWSE, OnTtbrowse)
|
|
ON_BN_CLICKED(IDC_DTBROWSE, OnDtbrowse)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTexturePanel message handlers
|
|
|
|
void CTexturePanel::WriteEntries(Stuff::Page *page)
|
|
{
|
|
UpdateData(TRUE);
|
|
CString basenname;
|
|
int pos=m_DetailTexture.ReverseFind('\\');
|
|
if(pos>0)
|
|
|
|
|
|
page->SetEntry("DetailTexture",m_ActualTexturePath);
|
|
page->SetEntry("DetailRatio",m_DRatio);
|
|
page->SetEntry("DetailFadeBegin",m_FadeIn);
|
|
page->SetEntry("DetailFadeEnd",m_FadeOut);
|
|
}
|
|
|
|
bool CTexturePanel::ValidateEntries(int zonex,int zonez)
|
|
{
|
|
UpdateData(TRUE);
|
|
if(m_TTEdit=="" || !gos_DoesFileExist(m_TTEdit))
|
|
{
|
|
MessageBox("Terrain Texture Does Not Exist","Bad Terrain Texture",MB_OK|MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
if(!m_IGData)
|
|
{
|
|
Image img;
|
|
img.Load((char *)(LPCSTR)m_TTEdit);
|
|
|
|
if(!m_IGData)
|
|
if(img.GetWidth()!=(zonex*512) || img.GetHeight()!=(zonez*512))
|
|
{
|
|
CString str;
|
|
str.Format("For a Heightfield of %ix%i Terrain Texture should be %ix%i",zonex*256,zonez*256,zonex*512,zonez*512);
|
|
MessageBox(str,"Texture Size Error",MB_OK|MB_ICONERROR);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
if(m_DetailTexture=="" || !gos_DoesFileExist(m_DetailTexture))
|
|
{
|
|
MessageBox("Detail Texture Does Not Exist","Bad Detail Texture",MB_OK|MB_ICONERROR);
|
|
return false;
|
|
}
|
|
|
|
{
|
|
Image img;
|
|
img.Load((char *)(LPCSTR)m_DetailTexture);
|
|
|
|
|
|
if(img.GetWidth()!=256 || img.GetHeight()!=256)
|
|
{
|
|
MessageBox("Detail Texture MUST be 256x256","Texture Size Error",MB_OK|MB_ICONERROR);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(m_FadeIn>=m_FadeOut)
|
|
{
|
|
MessageBox("FadeIn Must Be Less Than FadeOut","Bad Range",MB_OK|MB_ICONERROR);
|
|
return false;
|
|
|
|
}
|
|
|
|
if(m_FadeIn<100.f || m_FadeIn>1000.f ||
|
|
m_FadeOut<100.f || m_FadeOut>1000.f ||
|
|
m_DRatio<1 || m_DRatio>16
|
|
)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
|
|
void CTexturePanel::OnTtbrowse()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
if(m_IGData)
|
|
{
|
|
CFileDialog fdlg(TRUE,NULL,m_TTEdit,OFN_NOCHANGEDIR,"FGD Files (*.fgd)|*.fgd||",NULL);
|
|
if(fdlg.DoModal()==IDOK)
|
|
{
|
|
m_TTEdit=fdlg.GetPathName();
|
|
UpdateData(FALSE);
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
CFileDialog fdlg(TRUE,NULL,m_TTEdit,OFN_NOCHANGEDIR,"Bitmap Images (*.tif,*.gif,*.tga,*.png)|*.tif;*.gif;*.tga;*.png||",NULL);
|
|
if(fdlg.DoModal()==IDOK)
|
|
{
|
|
m_TTEdit=fdlg.GetPathName();
|
|
UpdateData(FALSE);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
void CTexturePanel::OnDtbrowse()
|
|
{
|
|
UpdateData(TRUE);
|
|
CFileDialog fdlg(TRUE,NULL,m_DetailTexture,OFN_NOCHANGEDIR,"Bitmap Images (*.tif,*.gif,*.tga,*.png)|*.tif;*.gif;*.tga;*.png||",NULL);
|
|
if(fdlg.DoModal()==IDOK)
|
|
{
|
|
m_DetailTexture=fdlg.GetPathName();
|
|
UpdateData(FALSE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
BOOL CTexturePanel::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//#ifdef LAB_ONLY
|
|
m_IGDataCon.ShowWindow(SW_SHOW);
|
|
//#else
|
|
// m_IGDataCon.ShowWindow(SW_HIDE);
|
|
//#endif
|
|
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|