From 51ae518d7754f838ffbb2bb4580169126d0177cc Mon Sep 17 00:00:00 2001 From: "egon.rath" Date: Thu, 22 Apr 2010 12:16:15 +0000 Subject: [PATCH] Command line loading --- Engine.cpp | 19 ++++++++--------- Engine.h | 6 +++--- UserInterface.cpp | 3 ++- View.cpp | 1 + main.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++ win32/b3view.suo | Bin 10752 -> 12288 bytes win32/b3view.vcxproj | 7 ++++--- 7 files changed, 66 insertions(+), 18 deletions(-) diff --git a/Engine.cpp b/Engine.cpp index 7544826..d209da3 100644 --- a/Engine.cpp +++ b/Engine.cpp @@ -72,14 +72,6 @@ void Engine::drawBackground() SColor( 255, 224, 224, 255 )); } -void Engine::loadMesh( const wstring &fileName ) -{ - if( m_LoadedMesh != 0 ) - m_LoadedMesh->remove(); - - m_LoadedMesh = m_Scene->addAnimatedMeshSceneNode( m_Scene->getMesh( fileName.c_str() )); -} - void Engine::checkResize() { if(( m_WindowSize->Width != m_Driver->getScreenSize().Width ) || ( m_WindowSize->Height != m_Driver->getScreenSize().Height )) @@ -131,10 +123,7 @@ Engine::Engine() // Set Engine enabled m_RunEngine = true; - - // Load test model m_LoadedMesh = 0; - loadMesh( L"test.b3d" ); // Store actual window size m_WindowSize = new dimension2d(); @@ -148,6 +137,14 @@ Engine::~Engine() delete m_WindowSize; } +void Engine::loadMesh( const wstring &fileName ) +{ + if( m_LoadedMesh != 0 ) + m_LoadedMesh->remove(); + + m_LoadedMesh = m_Scene->addAnimatedMeshSceneNode( m_Scene->getMesh( fileName.c_str() )); +} + void Engine::run() { u32 timePerFrame = ( u32 ) ( 1000.0f / 60 ); diff --git a/Engine.h b/Engine.h index f2422b1..2e0b879 100644 --- a/Engine.h +++ b/Engine.h @@ -55,14 +55,14 @@ private: void drawAxisLines(); void drawBackground(); void checkResize(); - IGUIEnvironment *getGUIEnvironment() const; - void loadMesh( const wstring &fileName ); + IGUIEnvironment *getGUIEnvironment() const; public: Engine(); ~Engine(); - void run(); + void run(); + void loadMesh( const wstring &fileName ); }; #endif // ENGINE_H diff --git a/UserInterface.cpp b/UserInterface.cpp index d816a82..47eeb8a 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -3,14 +3,15 @@ // PRIVATE void UserInterface::setupUserInterface() { + // Menu IGUIContextMenu *menu = m_Gui->addMenu(); menu->addItem( L"File", UIE_FILEMENU, true, true ); + // File Menu IGUIContextMenu *fileMenu = menu->getSubMenu( 0 ); fileMenu->addItem( L"Load", UIC_FILE_LOAD ); fileMenu->addItem( L"Quit", UIC_FILE_QUIT ); - // Set Font for UI Elements m_GuiFont = m_Gui->getFont( "arial.xml" ); m_Gui->getSkin()->setFont( m_GuiFont ); diff --git a/View.cpp b/View.cpp index fe318b9..bf8598c 100644 --- a/View.cpp +++ b/View.cpp @@ -52,6 +52,7 @@ View::~View() // IEventReceiver bool View::OnEvent( const SEvent &event ) { + // If it's not a mouse event, just return unhandled if( event.EventType != EET_MOUSE_INPUT_EVENT ) return false; diff --git a/main.cpp b/main.cpp index efeb046..3771f13 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,11 @@ +#include +#include +#include + #include "Engine.h" +wchar_t * getWideCharString( char *str ); + #ifdef WIN32 #include int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) @@ -7,9 +13,51 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin int main( int argc, char **argv ) #endif { + // Parse commandline to check if a filename argument has been passed +#ifdef WIN32 + int argc; + char **argv; + + LPWSTR *args; + args = CommandLineToArgvW( GetCommandLineW(), &argc ); + + argv = ( char ** ) malloc( sizeof( char * ) * argc ); + for( int index = 0; index < argc; index ++ ) + { + int argumentBufferLength = wcslen( args[index] ) + 1; + argv[index] = ( char * ) malloc( sizeof( char ) * argumentBufferLength ); + sprintf_s( argv[index], argumentBufferLength, "%ws", args[index] ); + } + + LocalFree( args ); +#endif + Engine *engine = new Engine(); + if( argc >= 2 ) + { + wchar_t *initialFileName = getWideCharString( argv[1] ); + engine->loadMesh( wstring( initialFileName )); + free( initialFileName ); + } + else + engine->loadMesh( L"test.b3d" ); + engine->run(); delete engine; + +#ifdef WIN32 + for( int index = 0; index < argc; index ++ ) + free( argv[index] ); + free( argv ); +#endif +} + +wchar_t * getWideCharString( char *str ) +{ + wchar_t *dest = ( wchar_t * ) malloc( sizeof( wchar_t ) * ( strlen( str ) + 1 )); + mbstowcs( dest, str, strlen( str )); + + return dest; } diff --git a/win32/b3view.suo b/win32/b3view.suo index d5987bf1a3dd11555aa45f5dd11c056ecfe67461..81a3434622f11adb88ccd692f3993f6696576ac7 100644 GIT binary patch delta 1792 zcmcIldrVtp6#s6yE$t|8D2(waEsu6%rBD!oIagX<8-`L9+wRKnu_c zv;o|XNA#oMVcuhfzVa3M-Avav$AR=qnXvQ z8r-YcZq_7m3s@B{J2Qh>C7Tt@jLQnxSUv77(q&^7aw)C!iRN0`_o0o~Z697uKbOZ| zyPO(Zp<*!$)mk!((a&?{1(m?#&5MU6*Mr=Q&Tii?NYRx+9f_{zwF-iYtobYOs;{s& zxShdqx5wfR1*Za!yQlpDOSRk4({JnUHBIF;zN8`!mB`|*V@FT8v5 z)&t)r!m>9~(nd?h3JR4VXZdhMdv5mpTFF(ZCkx{fNe&QxL@;O}%ShFlJ(N|~jeyrld3V*yYkqQiY!Ayc)Tk}`zZN+Kd zBaYveFX_G*b4|Xt$fM((bMK(R{2g@OU`<>6=8Y%U6V%I=w(G92^;8B4#!y=6$7f%@ zSaIqV!%qcAdw&_bL&uGcvbnAOskZhPDbWhGbS76X7V!)s>GCd+S7}{eF5J%zN`8tm zxDh=o?*=&{8SCgwQIEVGdY`1A(;th`X`>&9CYO%tv^18i zu5{o~_2bLcE!CeN8V@s|!-7)R&7l4!bdd)K%ZM-MHvET5g(hBq%fEN1w^q~e_1kNg Y)+@?NKk9I=DRD~XXh=D{1+$p?JLdEFn*aa+ delta 883 zcmZ`%Uucq16#uUK{QUg8O*fs(|B6_-F?BAi6;nUkW|o_cXb|Bbw?-wgB(}AMu&Ah) z`p#QDL=O@4WZ8RyP;JDhhw3H5pq`?hgxH|$+^J&(9r(fTp7T5Bo^$Tar}Gm9K_dNA ztJQQcC42BR-9`-~S_KxplQ zoH8kAuw+e+3fe-ks!U3ttnookGsg4i(Qy&PH9~yvOy`su*_As zW8Nofb6X2wU_pC?H=#_~ka7kj5h-kHN1<#y2zgypP88_VGz8KvB-!GIE+heudk|85 z3QGD34Rd5 z=1wk_ote#MpklVcig}W+AA8Tj6T3^a%u6;IShTFxcVOKbS>?r2bQjd%wt1YrFg2T{ z1vG(yV94)}`on(z@->3fCseV^nQU%kDtqR9W{zq^n~~7HBz9b^-kHb3LtE0-Y-4HZ ziqIGHg@e(7o=6}V>gkX5`|4LSpmc;F%@4s>hY2cr4z9aTi_USJ@29sH@=jm7f97N% zv;Xm`eC1N;bNKiN79)p5*9a@2t>Xhj&Q*WLs_QLpMyI6_P#r}wiJ%5A>_G*cn0`;; z-|pe1-Jwfkq-oPg_FxvyvAr4;^(yJ-p(gxiH?$IXJstQq^`X+H4k&oSZJjr6oim Level3 Disabled - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS D:\Prj\irrlicht-1.7.1\include;%(AdditionalIncludeDirectories) @@ -72,16 +72,17 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS D:\Prj\irrlicht-1.7.1\include;%(AdditionalIncludeDirectories) - Windows + Console true true true D:\Prj\irrlicht-1.7.1\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) Irrlicht.lib;%(AdditionalDependencies) + WinMain