mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-22 18:30:27 +01:00
223 lines
6.6 KiB
C++
223 lines
6.6 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
// ScriptView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef new
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScriptView
|
|
|
|
IMPLEMENT_DYNCREATE(CScriptView, CEditView)
|
|
|
|
CScriptView::CScriptView()
|
|
{
|
|
}
|
|
|
|
CScriptView::~CScriptView()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CScriptView, CEditView)
|
|
//{{AFX_MSG_MAP(CScriptView)
|
|
ON_COMMAND(ID_SCRIPT_MAKE_MODEL, OnScriptMakeModel)
|
|
ON_COMMAND(ID_SCRIPT_UPDATE_ANIMATIONS, OnScriptUpdateAnimations)
|
|
ON_COMMAND(ID_SCRIPT_UPDATE_MIPMODELS, OnScriptUpdateMipmodels)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScriptView drawing
|
|
|
|
void CScriptView::OnDraw(CDC* pDC)
|
|
{
|
|
CDocument* pDoc = GetDocument();
|
|
// TODO: add draw code here
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScriptView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CScriptView::AssertValid() const
|
|
{
|
|
CEditView::AssertValid();
|
|
}
|
|
|
|
void CScriptView::Dump(CDumpContext& dc) const
|
|
{
|
|
CEditView::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScriptView message handlers
|
|
|
|
void CScriptView::OnScriptMakeModel()
|
|
{
|
|
// First we save script file
|
|
CModelerDoc *pDoc = (CModelerDoc *) GetDocument();
|
|
CTFileName fnScriptName = CTString(CStringA(pDoc->GetPathName()));
|
|
|
|
CTFileName fnModelName = fnScriptName.FileDir() + fnScriptName.FileName() + ".mdl";
|
|
try
|
|
{
|
|
fnScriptName.RemoveApplicationPath_t();
|
|
}
|
|
catch( char *err_str)
|
|
{
|
|
AfxMessageBox( CString(err_str));
|
|
return;
|
|
}
|
|
pDoc->OnSaveDocument( pDoc->GetPathName());
|
|
|
|
// close mdl document with same name
|
|
POSITION pos = theApp.m_pdtModelDocTemplate->GetFirstDocPosition();
|
|
while (pos!=NULL)
|
|
{
|
|
CModelerDoc *pmdCurrent = (CModelerDoc *)theApp.m_pdtModelDocTemplate->GetNextDoc(pos);
|
|
if( CTFileName( CTString(CStringA(pmdCurrent->GetPathName()))) == fnModelName)
|
|
{
|
|
pmdCurrent->OnCloseDocument();
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Now we will create one instance of new document of type CModelerDoc
|
|
CDocument* pDocument = theApp.m_pdtModelDocTemplate->CreateNewDocument();
|
|
if (pDocument == NULL)
|
|
{
|
|
TRACE0("CDocTemplate::CreateNewDocument returned NULL.\n");
|
|
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
|
|
return;
|
|
}
|
|
ASSERT_VALID(pDocument);
|
|
|
|
BOOL bAutoDelete = pDocument->m_bAutoDelete;
|
|
pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong
|
|
CFrameWnd* pFrame = theApp.m_pdtModelDocTemplate->CreateNewFrame(pDocument, NULL);
|
|
pDocument->m_bAutoDelete = bAutoDelete;
|
|
if (pFrame == NULL)
|
|
{
|
|
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
|
|
delete pDocument; // explicit delete on error
|
|
return;
|
|
}
|
|
ASSERT_VALID(pFrame);
|
|
|
|
pDocument->SetPathName( CString(fnModelName), FALSE);
|
|
pDocument->SetTitle( CString(fnModelName.FileName() + fnModelName.FileExt()));
|
|
|
|
char strError[ 256];
|
|
if( !((CModelerDoc *)pDocument)->CreateModelFromScriptFile( fnScriptName, strError))
|
|
{
|
|
pDocument->OnCloseDocument();
|
|
AfxMessageBox( CString(strError));
|
|
return;
|
|
}
|
|
theApp.m_pdtModelDocTemplate->InitialUpdateFrame(pFrame, pDocument, TRUE);
|
|
((CModelerDoc *)pDocument)->m_emEditModel.edm_md.md_bPreparedForRendering = FALSE;
|
|
pDocument->SetModifiedFlag();
|
|
|
|
// add textures from .ini file
|
|
CTFileName fnIniFileName = fnScriptName.NoExt() + ".ini";
|
|
try
|
|
{
|
|
((CModelerDoc *)pDocument)->m_emEditModel.CSerial::Load_t(fnIniFileName);
|
|
}
|
|
catch( char *strError)
|
|
{
|
|
// ignore errors
|
|
(void) strError;
|
|
}
|
|
}
|
|
|
|
|
|
void CScriptView::OnScriptUpdateAnimations()
|
|
{
|
|
// find document with same name
|
|
CModelerDoc *pDoc = (CModelerDoc *) GetDocument();
|
|
CTFileName fnScriptName = CTString(CStringA(pDoc->GetPathName()));
|
|
CTFileName fnModelName = fnScriptName.FileDir() + fnScriptName.FileName() + ".mdl";
|
|
|
|
POSITION pos = theApp.m_pdtModelDocTemplate->GetFirstDocPosition();
|
|
while (pos!=NULL)
|
|
{
|
|
CModelerDoc *pmdCurrent = (CModelerDoc *)theApp.m_pdtModelDocTemplate->GetNextDoc(pos);
|
|
if( CTFileName( CTString(CStringA(pmdCurrent->GetPathName()))) == fnModelName)
|
|
{
|
|
POSITION pos = pmdCurrent->GetFirstViewPosition();
|
|
CView *pView = pmdCurrent->GetNextView( pos);
|
|
if( DYNAMIC_DOWNCAST(CModelerView, pView) != NULL)
|
|
{
|
|
CModelerView* pModelerView = (CModelerView *) pView;
|
|
if(pModelerView != NULL)
|
|
{
|
|
// if updating was successful
|
|
if( pModelerView->UpdateAnimations())
|
|
{
|
|
pModelerView->SetActiveWindow();
|
|
pModelerView->SetFocus();
|
|
CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
|
|
pMainFrame->MDIActivate(pModelerView->GetParentFrame());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CScriptView::OnScriptUpdateMipmodels()
|
|
{
|
|
// find document with same name
|
|
CModelerDoc *pDoc = (CModelerDoc *) GetDocument();
|
|
CTFileName fnScriptName = CTString(CStringA(pDoc->GetPathName()));
|
|
CTFileName fnModelName = fnScriptName.FileDir() + fnScriptName.FileName() + ".mdl";
|
|
|
|
POSITION pos = theApp.m_pdtModelDocTemplate->GetFirstDocPosition();
|
|
while (pos!=NULL)
|
|
{
|
|
CModelerDoc *pmdCurrent = (CModelerDoc *)theApp.m_pdtModelDocTemplate->GetNextDoc(pos);
|
|
if( CTFileName( CTString(CStringA(pmdCurrent->GetPathName()))) == fnModelName)
|
|
{
|
|
POSITION pos = pmdCurrent->GetFirstViewPosition();
|
|
CView *pView = pmdCurrent->GetNextView( pos);
|
|
if( DYNAMIC_DOWNCAST(CModelerView, pView) != NULL)
|
|
{
|
|
CModelerView* pModelerView = (CModelerView *) pView;
|
|
if(pModelerView != NULL)
|
|
{
|
|
pModelerView->OnScriptUpdateMipmodels();
|
|
pModelerView->SetActiveWindow();
|
|
pModelerView->SetFocus();
|
|
CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
|
|
pMainFrame->MDIActivate(pModelerView->GetParentFrame());
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|