|
@@ -14,23 +14,25 @@
|
|
#include <iostream>
|
|
#include <iostream>
|
|
#include <vector>
|
|
#include <vector>
|
|
#include <sstream>
|
|
#include <sstream>
|
|
|
|
+#include <InitDatei.h>
|
|
|
|
+#include <TexturList.h>
|
|
|
|
|
|
void fensterVS( void *p, void *f )
|
|
void fensterVS( void *p, void *f )
|
|
{
|
|
{
|
|
- PostQuitMessage( 0 );
|
|
|
|
|
|
+ PostQuitMessage( 0 );
|
|
}
|
|
}
|
|
|
|
|
|
bool fensterME( void *p, void *f, MausEreignis me )
|
|
bool fensterME( void *p, void *f, MausEreignis me )
|
|
{
|
|
{
|
|
- return 1;
|
|
|
|
|
|
+ return 1;
|
|
}
|
|
}
|
|
|
|
|
|
bool fensterTE( void *p, void *f, TastaturEreignis te )
|
|
bool fensterTE( void *p, void *f, TastaturEreignis te )
|
|
{
|
|
{
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
- std::cout.flush();
|
|
|
|
|
|
+ std::cout.flush();
|
|
#endif
|
|
#endif
|
|
- return 1;
|
|
|
|
|
|
+ return 1;
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
@@ -38,68 +40,67 @@ template<typename TChar, typename TTraits>
|
|
class OutputDebugStringBuf : public std::basic_stringbuf<TChar, TTraits>
|
|
class OutputDebugStringBuf : public std::basic_stringbuf<TChar, TTraits>
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
- explicit OutputDebugStringBuf() : _buffer( 256 )
|
|
|
|
- {
|
|
|
|
- setg( nullptr, nullptr, nullptr );
|
|
|
|
- setp( _buffer.data(), _buffer.data(), _buffer.data() + _buffer.size() );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ~OutputDebugStringBuf()
|
|
|
|
- {
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- static_assert( std::is_same<TChar, char>::value || std::is_same<TChar, wchar_t>::value, "OutputDebugStringBuf only supports char and wchar_t types" );
|
|
|
|
-
|
|
|
|
- int sync() try
|
|
|
|
- {
|
|
|
|
- MessageOutputer<TChar, TTraits>()( pbase(), pptr() );
|
|
|
|
- setp( _buffer.data(), _buffer.data(), _buffer.data() + _buffer.size() );
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
- catch( ... )
|
|
|
|
- {
|
|
|
|
- return -1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- int overflow( int c = TTraits::eof() )
|
|
|
|
- {
|
|
|
|
- auto syncRet = sync();
|
|
|
|
- if( c != TTraits::eof() )
|
|
|
|
- {
|
|
|
|
- _buffer[ 0 ] = c;
|
|
|
|
- setp( _buffer.data(), _buffer.data() + 1, _buffer.data() + _buffer.size() );
|
|
|
|
- }
|
|
|
|
- return syncRet == -1 ? TTraits::eof() : 0;
|
|
|
|
- }
|
|
|
|
|
|
+ explicit OutputDebugStringBuf() : _buffer( 256 )
|
|
|
|
+ {
|
|
|
|
+ setg( nullptr, nullptr, nullptr );
|
|
|
|
+ setp( _buffer.data(), _buffer.data(), _buffer.data() + _buffer.size() );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ~OutputDebugStringBuf()
|
|
|
|
+ {}
|
|
|
|
+
|
|
|
|
+ static_assert( std::is_same<TChar, char>::value || std::is_same<TChar, wchar_t>::value, "OutputDebugStringBuf only supports char and wchar_t types" );
|
|
|
|
+
|
|
|
|
+ int sync() try
|
|
|
|
+ {
|
|
|
|
+ MessageOutputer<TChar, TTraits>()( pbase(), pptr() );
|
|
|
|
+ setp( _buffer.data(), _buffer.data(), _buffer.data() + _buffer.size() );
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ catch( ... )
|
|
|
|
+ {
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int overflow( int c = TTraits::eof() )
|
|
|
|
+ {
|
|
|
|
+ auto syncRet = sync();
|
|
|
|
+ if( c != TTraits::eof() )
|
|
|
|
+ {
|
|
|
|
+ _buffer[ 0 ] = c;
|
|
|
|
+ setp( _buffer.data(), _buffer.data() + 1, _buffer.data() + _buffer.size() );
|
|
|
|
+ }
|
|
|
|
+ return syncRet == -1 ? TTraits::eof() : 0;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
private:
|
|
private:
|
|
- std::vector<TChar> _buffer;
|
|
|
|
-
|
|
|
|
- template<typename TChar, typename TTraits>
|
|
|
|
- struct MessageOutputer;
|
|
|
|
-
|
|
|
|
- template<>
|
|
|
|
- struct MessageOutputer<char, std::char_traits<char>>
|
|
|
|
- {
|
|
|
|
- template<typename TIterator>
|
|
|
|
- void operator()( TIterator begin, TIterator end ) const
|
|
|
|
- {
|
|
|
|
- std::string s( begin, end );
|
|
|
|
- OutputDebugStringA( s.c_str() );
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- template<>
|
|
|
|
- struct MessageOutputer<wchar_t, std::char_traits<wchar_t>>
|
|
|
|
- {
|
|
|
|
- template<typename TIterator>
|
|
|
|
- void operator()( TIterator begin, TIterator end ) const
|
|
|
|
- {
|
|
|
|
- std::wstring s( begin, end );
|
|
|
|
- OutputDebugStringW( s.c_str() );
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
|
|
+ std::vector<TChar> _buffer;
|
|
|
|
+
|
|
|
|
+ template<typename TChar, typename TTraits>
|
|
|
|
+ struct MessageOutputer;
|
|
|
|
+
|
|
|
|
+ template<>
|
|
|
|
+ struct MessageOutputer<char, std::char_traits<char>>
|
|
|
|
+ {
|
|
|
|
+ template<typename TIterator>
|
|
|
|
+ void operator()( TIterator begin, TIterator end ) const
|
|
|
|
+ {
|
|
|
|
+ std::string s( begin, end );
|
|
|
|
+ OutputDebugStringA( s.c_str() );
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ template<>
|
|
|
|
+ struct MessageOutputer<wchar_t, std::char_traits<wchar_t>>
|
|
|
|
+ {
|
|
|
|
+ template<typename TIterator>
|
|
|
|
+ void operator()( TIterator begin, TIterator end ) const
|
|
|
|
+ {
|
|
|
|
+ std::wstring s( begin, end );
|
|
|
|
+ OutputDebugStringW( s.c_str() );
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
|
|
};
|
|
};
|
|
#endif
|
|
#endif
|
|
@@ -107,76 +108,82 @@ private:
|
|
int KSGStart Framework::Start( Startparam p )
|
|
int KSGStart Framework::Start( Startparam p )
|
|
{
|
|
{
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
- static OutputDebugStringBuf<char, std::char_traits<char>> charDebugOutput;
|
|
|
|
- std::cout.rdbuf( &charDebugOutput );
|
|
|
|
|
|
+ static OutputDebugStringBuf<char, std::char_traits<char>> charDebugOutput;
|
|
|
|
+ std::cout.rdbuf( &charDebugOutput );
|
|
#endif
|
|
#endif
|
|
- Network::Start( 50 );
|
|
|
|
-
|
|
|
|
- Punkt bildschirmGröße = BildschirmGröße();
|
|
|
|
- bildschirmGröße.x++;
|
|
|
|
- bildschirmGröße.y++;
|
|
|
|
-
|
|
|
|
- WNDCLASS wc = F_Normal( p.hinst );
|
|
|
|
- wc.lpszClassName = "Game Client";
|
|
|
|
-
|
|
|
|
- /*WFenster *fenster = new WFenster();
|
|
|
|
- fenster->erstellen( WS_OVERLAPPEDWINDOW, wc );
|
|
|
|
- fenster->setSize( 700, 770 );
|
|
|
|
- fenster->setPosition( Bildschirmmitte( fenster->getThis() ) );
|
|
|
|
- fenster->setAnzeigeModus( 1 );
|
|
|
|
- fenster->setVSchließAktion( fensterVS );
|
|
|
|
|
|
+ Network::Start( 50 );
|
|
|
|
+
|
|
|
|
+ InitDatei init( "data/optionen.ini" );
|
|
|
|
+ init.laden();
|
|
|
|
+ if( init.wertExistiert( "Log" ) )
|
|
|
|
+ Framework::setLogEnabled( init.zWert( "Log" )->istGleich( "1" ) );
|
|
|
|
+ Framework::logLine( "Anwendung wird gestartet..." );
|
|
|
|
+
|
|
|
|
+ Punkt bildschirmGröße = BildschirmGröße();
|
|
|
|
+ bildschirmGröße.x++;
|
|
|
|
+ bildschirmGröße.y++;
|
|
|
|
+ Framework::logLine( ( ( Text( "Ermittelte Bildschirmgroesse: " ) += ( bildschirmGröße.x - 1 ) ) += "x" ) += ( bildschirmGröße.y - 1 ) );
|
|
|
|
+
|
|
|
|
+ WNDCLASS wc = F_Normal( p.hinst );
|
|
|
|
+ wc.lpszClassName = "Game Client";
|
|
|
|
+
|
|
|
|
+ Framework::logLine( "Grafische Benutzeroberflaeche wird erstellt..." );
|
|
|
|
+ WFenster *fenster = new WFenster();
|
|
|
|
+ fenster->erstellen( WS_POPUP, wc );
|
|
|
|
+ fenster->setPosition( Punkt( 0, 0 ) );
|
|
|
|
+ fenster->setSize( bildschirmGröße );
|
|
fenster->setMausAktion( fensterME );
|
|
fenster->setMausAktion( fensterME );
|
|
fenster->setTastaturAktion( fensterTE );
|
|
fenster->setTastaturAktion( fensterTE );
|
|
|
|
+ fenster->setVSchließAktion( fensterVS );
|
|
|
|
|
|
Bildschirm *bildschirm = new Bildschirm3D( fenster->getThis() );
|
|
Bildschirm *bildschirm = new Bildschirm3D( fenster->getThis() );
|
|
- fenster->setBildschirm( bildschirm->getThis() );*/
|
|
|
|
- WFenster *fenster = new WFenster();
|
|
|
|
- fenster->erstellen( WS_POPUP, wc );
|
|
|
|
- fenster->setPosition( Punkt( 0, 0 ) );
|
|
|
|
- fenster->setSize( bildschirmGröße );
|
|
|
|
- fenster->setMausAktion( fensterME );
|
|
|
|
- fenster->setTastaturAktion( fensterTE );
|
|
|
|
- fenster->setVSchließAktion( fensterVS );
|
|
|
|
-
|
|
|
|
- Bildschirm *bildschirm = new Bildschirm3D( fenster->getThis() );
|
|
|
|
- fenster->setBildschirm( bildschirm->getThis() );
|
|
|
|
|
|
+ fenster->setBildschirm( bildschirm->getThis() );
|
|
fenster->setAnzeigeModus( 1 );
|
|
fenster->setAnzeigeModus( 1 );
|
|
- fenster->setFokus();
|
|
|
|
- bildschirm->update();
|
|
|
|
- bildschirm->render();
|
|
|
|
|
|
+ fenster->setFokus();
|
|
|
|
+ bildschirm->update();
|
|
|
|
+ bildschirm->render();
|
|
|
|
+
|
|
|
|
+ Framework::logLine( "Schrift wird geladen..." );
|
|
|
|
+ LTDSDatei *schriftDatei = new LTDSDatei();
|
|
|
|
+ schriftDatei->setPfad( new Text( "data/schriften/normal.ltds" ) );
|
|
|
|
+ schriftDatei->leseDaten();
|
|
|
|
+ Schrift *schrift = schriftDatei->ladeSchrift();
|
|
|
|
+ schriftDatei = schriftDatei->release();
|
|
|
|
+
|
|
|
|
+ Render *render = new Render( schrift->getThis() );
|
|
|
|
+ render->setBildschirm( bildschirm->getThis() );
|
|
|
|
|
|
- LTDSDatei *schriftDatei = new LTDSDatei();
|
|
|
|
- schriftDatei->setPfad( new Text( "data/schriften/normal.ltds" ) );
|
|
|
|
- schriftDatei->leseDaten();
|
|
|
|
- Schrift *schrift = schriftDatei->ladeSchrift();
|
|
|
|
- schriftDatei = schriftDatei->release();
|
|
|
|
|
|
+ Framework::logLine( "Globale Variablen werden initialisiert..." );
|
|
|
|
+ initVariables( schrift, bildschirm );
|
|
|
|
|
|
- Render *render = new Render( schrift->getThis() );
|
|
|
|
- render->setBildschirm( bildschirm->getThis() );
|
|
|
|
|
|
+ Framework::logLine( "Zeichen Thread wird gestartet..." );
|
|
|
|
+ render->start();
|
|
|
|
|
|
- initVariables( schrift, bildschirm );
|
|
|
|
|
|
+ Framework::logLine( "Nachrichtenschleife wird ausgefuehrt..." );
|
|
|
|
+ StartNachrichtenSchleife();
|
|
|
|
|
|
- render->start();
|
|
|
|
|
|
+ Framework::logLine( "Zeichen Thread wird beendet..." );
|
|
|
|
+ render->beenden();
|
|
|
|
+ render = render->release();
|
|
|
|
|
|
- StartNachrichtenSchleife();
|
|
|
|
|
|
+ bildschirm->removeMember( vorLogin->zFenster() );
|
|
|
|
+ bildschirm->removeMember( nachLogin );
|
|
|
|
|
|
- render->beenden();
|
|
|
|
- render = render->release();
|
|
|
|
|
|
+ Framework::logLine( "Speicher wird freigegeben..." );
|
|
|
|
+ releaseVariables();
|
|
|
|
+ schrift = schrift->release();
|
|
|
|
|
|
- bildschirm->removeMember( vorLogin->zFenster() );
|
|
|
|
- bildschirm->removeMember( nachLogin );
|
|
|
|
|
|
+ Framework::zTexturRegister()->leeren();
|
|
|
|
+ bildschirm = bildschirm->release();
|
|
|
|
+ fenster->setBildschirm( 0 );
|
|
|
|
+ fenster->zerstören();
|
|
|
|
+ fenster = fenster->release();
|
|
|
|
|
|
- releaseVariables();
|
|
|
|
- schrift = schrift->release();
|
|
|
|
|
|
+ Network::Exit();
|
|
|
|
|
|
- bildschirm = bildschirm->release();
|
|
|
|
- fenster->setBildschirm( 0 );
|
|
|
|
- fenster->zerstören();
|
|
|
|
- fenster = fenster->release();
|
|
|
|
|
|
+ DateiPfadErstellen( new Text( "data/tmp/keinabsturz" ) );
|
|
|
|
|
|
- Network::Exit();
|
|
|
|
-
|
|
|
|
- DateiPfadErstellen( new Text( "data/tmp/keinabsturz" ) );
|
|
|
|
|
|
+ Framework::logLine( "Programm wurde ordnungsgemaess beendet." );
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|