This commit is contained in:
VB
2017-03-05 22:34:10 +01:00
7 changed files with 104 additions and 65 deletions

View File

@@ -27,6 +27,7 @@ Stele, firleju, szociu, hunter, ZiomalCl, OLI_EU and others
#include "PyInt.h" #include "PyInt.h"
#include "World.h" #include "World.h"
#include "Mover.h" #include "Mover.h"
#include "usefull.h"
#pragma comment (lib, "glu32.lib") #pragma comment (lib, "glu32.lib")
#pragma comment (lib, "dsound.lib") #pragma comment (lib, "dsound.lib")

View File

@@ -5043,7 +5043,7 @@ void TGround::Navigate(std::string const &ClassName, UINT Msg, WPARAM wParam, LP
void TGround::WyslijEvent(const std::string &e, const std::string &d) void TGround::WyslijEvent(const std::string &e, const std::string &d)
{ // Ra: jeszcze do wyczyszczenia { // Ra: jeszcze do wyczyszczenia
DaneRozkaz r; DaneRozkaz r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = 2; // 2 - event r.iComm = 2; // 2 - event
size_t i = e.length(), j = d.length(); size_t i = e.length(), j = d.length();
r.cString[0] = char(i); r.cString[0] = char(i);
@@ -5051,7 +5051,7 @@ void TGround::WyslijEvent(const std::string &e, const std::string &d)
r.cString[i + 2] = char(j); // licznik po zerze kończącym r.cString[i + 2] = char(j); // licznik po zerze kończącym
strcpy(r.cString + 3 + i, d.c_str()); // zakończony zerem strcpy(r.cString + 3 + i, d.c_str()); // zakończony zerem
COPYDATASTRUCT cData; COPYDATASTRUCT cData;
cData.dwData = 'EU07'; // sygnatura cData.dwData = MAKE_ID4( 'E', 'U', '0', '7' ); // sygnatura
cData.cbData = (DWORD)(12 + i + j); // 8+dwa liczniki i dwa zera kończące cData.cbData = (DWORD)(12 + i + j); // 8+dwa liczniki i dwa zera kończące
cData.lpData = &r; cData.lpData = &r;
Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData ); Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData );
@@ -5061,14 +5061,14 @@ void TGround::WyslijEvent(const std::string &e, const std::string &d)
void TGround::WyslijUszkodzenia(const std::string &t, char fl) void TGround::WyslijUszkodzenia(const std::string &t, char fl)
{ // wysłanie informacji w postaci pojedynczego tekstu { // wysłanie informacji w postaci pojedynczego tekstu
DaneRozkaz r; DaneRozkaz r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = 13; // numer komunikatu r.iComm = 13; // numer komunikatu
size_t i = t.length(); size_t i = t.length();
r.cString[0] = char(fl); r.cString[0] = char(fl);
r.cString[1] = char(i); r.cString[1] = char(i);
strcpy(r.cString + 2, t.c_str()); // z zerem kończącym strcpy(r.cString + 2, t.c_str()); // z zerem kończącym
COPYDATASTRUCT cData; COPYDATASTRUCT cData;
cData.dwData = 'EU07'; // sygnatura cData.dwData = MAKE_ID4( 'E', 'U', '0', '7' ); // sygnatura
cData.cbData = (DWORD)(11 + i); // 8+licznik i zero kończące cData.cbData = (DWORD)(11 + i); // 8+licznik i zero kończące
cData.lpData = &r; cData.lpData = &r;
Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData ); Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData );
@@ -5078,7 +5078,7 @@ void TGround::WyslijUszkodzenia(const std::string &t, char fl)
void TGround::WyslijString(const std::string &t, int n) void TGround::WyslijString(const std::string &t, int n)
{ // wysłanie informacji w postaci pojedynczego tekstu { // wysłanie informacji w postaci pojedynczego tekstu
DaneRozkaz r; DaneRozkaz r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = n; // numer komunikatu r.iComm = n; // numer komunikatu
size_t i = t.length(); size_t i = t.length();
r.cString[0] = char(i); r.cString[0] = char(i);
@@ -5100,7 +5100,7 @@ void TGround::WyslijNamiary(TGroundNode *t)
{ // wysłanie informacji o pojeździe - (float), długość ramki będzie zwiększana w miarę potrzeby { // wysłanie informacji o pojeździe - (float), długość ramki będzie zwiększana w miarę potrzeby
// WriteLog("Wysylam pojazd"); // WriteLog("Wysylam pojazd");
DaneRozkaz r; DaneRozkaz r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = 7; // 7 - dane pojazdu r.iComm = 7; // 7 - dane pojazdu
int i = 32; int i = 32;
size_t j = t->asName.length(); size_t j = t->asName.length();
@@ -5175,7 +5175,7 @@ void TGround::WyslijNamiary(TGroundNode *t)
void TGround::WyslijObsadzone() void TGround::WyslijObsadzone()
{ // wysłanie informacji o pojeździe { // wysłanie informacji o pojeździe
DaneRozkaz2 r; DaneRozkaz2 r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = 12; // kod 12 r.iComm = 12; // kod 12
for (int i=0; i<1984; ++i) r.cString[i] = 0; for (int i=0; i<1984; ++i) r.cString[i] = 0;
@@ -5206,7 +5206,7 @@ void TGround::WyslijObsadzone()
} }
COPYDATASTRUCT cData; COPYDATASTRUCT cData;
cData.dwData = 'EU07'; // sygnatura cData.dwData = MAKE_ID4( 'E', 'U', '0', '7' ); // sygnatura
cData.cbData = 8 + 1984; // 8+licznik i zero kończące cData.cbData = 8 + 1984; // 8+licznik i zero kończące
cData.lpData = &r; cData.lpData = &r;
// WriteLog("Ramka gotowa"); // WriteLog("Ramka gotowa");
@@ -5218,7 +5218,7 @@ void TGround::WyslijObsadzone()
void TGround::WyslijParam(int nr, int fl) void TGround::WyslijParam(int nr, int fl)
{ // wysłanie parametrów symulacji w ramce (nr) z flagami (fl) { // wysłanie parametrów symulacji w ramce (nr) z flagami (fl)
DaneRozkaz r; DaneRozkaz r;
r.iSygn = 'EU07'; r.iSygn = MAKE_ID4( 'E', 'U', '0', '7' );
r.iComm = nr; // zwykle 5 r.iComm = nr; // zwykle 5
r.iPar[0] = fl; // flagi istotności kolejnych parametrów r.iPar[0] = fl; // flagi istotności kolejnych parametrów
int i = 0; // domyślnie brak danych int i = 0; // domyślnie brak danych
@@ -5231,7 +5231,7 @@ void TGround::WyslijParam(int nr, int fl)
break; break;
} }
COPYDATASTRUCT cData; COPYDATASTRUCT cData;
cData.dwData = 'EU07'; // sygnatura cData.dwData = MAKE_ID4( 'E', 'U', '0', '7' ); // sygnatura
cData.cbData = 12 + i; // 12+rozmiar danych cData.cbData = 12 + i; // 12+rozmiar danych
cData.lpData = &r; cData.lpData = &r;
Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData ); Navigate( "TEU07SRK", WM_COPYDATA, (WPARAM)glfwGetWin32Window( Global::window ), (LPARAM)&cData );

View File

@@ -75,10 +75,8 @@ std::string Now() {
std::time_t timenow = std::time( nullptr ); std::time_t timenow = std::time( nullptr );
std::tm tm = *std::localtime( &timenow ); std::tm tm = *std::localtime( &timenow );
std::stringstream converter; std::stringstream converter;
std::string output;
converter << std::put_time( &tm, "%c" ); converter << std::put_time( &tm, "%c" );
converter >> output; return converter.str();
return output;
/* char buffer[ 256 ]; /* char buffer[ 256 ];
sprintf( buffer, sprintf( buffer,

View File

@@ -1639,8 +1639,7 @@ bool TModel3d::LoadFromFile(std::string const &FileName, bool dynamic)
// wczytanie modelu z pliku // wczytanie modelu z pliku
std::string name = ToLower(FileName); std::string name = ToLower(FileName);
// trim extension if needed // trim extension if needed
if( ( name.rfind( '.' ) != std::string::npos ) if( name.rfind( '.' ) != std::string::npos )
&& ( name.substr( name.rfind( '.' ) ) == ".t3d" ) )
{ {
name.erase(name.rfind('.')); name.erase(name.rfind('.'));
} }

134
World.cpp
View File

@@ -1089,13 +1089,15 @@ bool TWorld::Update()
Update_Environment(); Update_Environment();
} // koniec działań niewykonywanych podczas pauzy } // koniec działań niewykonywanych podczas pauzy
// poprzednie jakoś tam działało // poprzednie jakoś tam działało
double dt = Timer::GetDeltaRenderTime(); // nie uwzględnia pauzowania ani mnożenia czasu
fTime50Hz += // fixed step, simulation time based updates
dt; // w pauzie też trzeba zliczać czas, bo przy dużym FPS będzie problem z odczytem ramek double dt = Timer::GetDeltaTime(); // 0.0 gdy pauza
if (fTime50Hz >= 0.2) /*
Console::Update(); // to i tak trzeba wywoływać
dt = Timer::GetDeltaTime(); // 0.0 gdy pauza
fTimeBuffer += dt; //[s] dodanie czasu od poprzedniej ramki fTimeBuffer += dt; //[s] dodanie czasu od poprzedniej ramki
*/
m_primaryupdateaccumulator += dt;
m_secondaryupdateaccumulator += dt;
/*
if (fTimeBuffer >= fMaxDt) // jest co najmniej jeden krok; normalnie 0.01s if (fTimeBuffer >= fMaxDt) // jest co najmniej jeden krok; normalnie 0.01s
{ // Ra: czas dla fizyki jest skwantowany - fizykę lepiej przeliczać stałym krokiem { // Ra: czas dla fizyki jest skwantowany - fizykę lepiej przeliczać stałym krokiem
// tak można np. moc silników itp., ale ruch musi być przeliczany w każdej klatce, bo // tak można np. moc silników itp., ale ruch musi być przeliczany w każdej klatce, bo
@@ -1109,43 +1111,59 @@ bool TWorld::Update()
if (n > 20) if (n > 20)
n = 20; // Ra: jeżeli FPS jest zatrważająco niski, to fizyka nie może zająć całkowicie procesora n = 20; // Ra: jeżeli FPS jest zatrważająco niski, to fizyka nie może zająć całkowicie procesora
} }
// awaria PoKeys mogła włączyć pauzę - przekazać informację */
if (Global::iMultiplayer) // dajemy znać do serwera o wykonaniu /*
if (iPause != Global::iPause) // NOTE: until we have no physics state interpolation during render, we need to rely on the old code
{ // przesłanie informacji o pauzie do programu nadzorującego // doing fixed step calculations but flexible step render results in ugly mini jitter
Ground.WyslijParam(5, 3); // ramka 5 z czasem i stanem zapauzowania // core routines (physics)
iPause = Global::iPause; int updatecount = 0;
} while( ( m_primaryupdateaccumulator >= m_primaryupdaterate )
double iter; &&( updatecount < 20 ) ) {
int n = 1; // no more than 20 updates per single pass, to keep physics from hogging up all run time
if (dt > fMaxDt) // normalnie 0.01s Ground.Update( m_primaryupdaterate, 1 );
++updatecount;
m_primaryupdateaccumulator -= m_primaryupdaterate;
}
*/
int updatecount = 1;
if( dt > m_primaryupdaterate ) // normalnie 0.01s
{ {
iter = ceil(dt / fMaxDt); auto const iterations = std::ceil(dt / m_primaryupdaterate);
n = iter; updatecount = std::min( 20, static_cast<int>( iterations ) );
dt = dt / iter; // Ra: fizykę lepiej by było przeliczać ze stałym krokiem dt = dt / iterations; // Ra: fizykę lepiej by było przeliczać ze stałym krokiem
if (n > 20)
n = 20; // McZapkie-081103: przesuniecie granicy FPS z 10 na 5
} }
// else n=1; // NOTE: updates are limited to 20, but dt is distributed over potentially many more iterations
// blablabla // this means at count > 20 simulation and render are going to desync. is that right?
// Ground.UpdatePhys(dt,n); //na razie tu //2014-12: yB przeniósł do Ground.Update() :( Ground.Update(dt, updatecount); // tu zrobić tylko coklatkową aktualizację przesunięć
Ground.Update(dt, n); // tu zrobić tylko coklatkową aktualizację przesunięć /*
if (DebugModeFlag && Console::Pressed(GLFW_KEY_ESCAPE)) if (DebugModeFlag)
{ // yB dodał przyspieszacz fizyki if (Global::bActive) // nie przyspieszać, gdy jedzie w tle :)
Ground.Update(dt, n); if( Console::Pressed( GLFW_KEY_ESCAPE ) ) {
Ground.Update(dt, n); // yB dodał przyspieszacz fizyki
Ground.Update(dt, n); Ground.Update(dt, n);
Ground.Update(dt, n); // 5 razy Ground.Update(dt, n);
Ground.Update(dt, n);
Ground.Update(dt, n); // 5 razy
}
*/
// secondary fixed step simulation time routines
while( m_secondaryupdateaccumulator >= m_secondaryupdaterate ) {
Global::tranTexts.Update(); // obiekt obsługujący stenogramy dźwięków na ekranie
// awaria PoKeys mogła włączyć pauzę - przekazać informację
if( Global::iMultiplayer ) // dajemy znać do serwera o wykonaniu
if( iPause != Global::iPause ) { // przesłanie informacji o pauzie do programu nadzorującego
Ground.WyslijParam( 5, 3 ); // ramka 5 z czasem i stanem zapauzowania
iPause = Global::iPause;
}
// TODO: add fixed step part of the camera update here
m_secondaryupdateaccumulator -= m_secondaryupdaterate; // these should be inexpensive enough we have no cap
} }
dt = Timer::GetDeltaTime(); // czas niekwantowany // variable step simulation time routines
Update_Camera( dt );
Ground.CheckQuery();
Ground.Update_Lights();
if( Train != nullptr ) { if( Train != nullptr ) {
TSubModel::iInstance = reinterpret_cast<size_t>( Train->Dynamic() ); TSubModel::iInstance = reinterpret_cast<size_t>( Train->Dynamic() );
Train->Update( dt ); Train->Update( dt );
@@ -1154,6 +1172,23 @@ bool TWorld::Update()
TSubModel::iInstance = 0; TSubModel::iInstance = 0;
} }
Ground.CheckQuery();
Ground.Update_Lights();
// render time routines follow:
dt = Timer::GetDeltaRenderTime(); // nie uwzględnia pauzowania ani mnożenia czasu
// fixed step render time routines
fTime50Hz += dt; // w pauzie też trzeba zliczać czas, bo przy dużym FPS będzie problem z odczytem ramek
if( fTime50Hz >= 0.2 ) {
Console::Update(); // to i tak trzeba wywoływać
fTime50Hz -= 0.2;
}
// variable step render time routines
Update_Camera( dt ); // TODO: move the fixed step cab camera updates to fixed step secondary routines section
// przy 0.25 smuga gaśnie o 6:37 w Quarku, a mogłaby już 5:40 // przy 0.25 smuga gaśnie o 6:37 w Quarku, a mogłaby już 5:40
// Ra 2014-12: przy 0.15 się skarżyli, że nie widać smug => zmieniłem na 0.25 // Ra 2014-12: przy 0.15 się skarżyli, że nie widać smug => zmieniłem na 0.25
// changed light activation threshold to 0.5, paired with strength reduction in daylight // changed light activation threshold to 0.5, paired with strength reduction in daylight
@@ -1169,6 +1204,7 @@ bool TWorld::Update()
m_init = true; m_init = true;
// visualize state changes
if (!Render()) if (!Render())
return false; return false;
@@ -2586,7 +2622,7 @@ TWorld::Render_UI() {
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
{ // odebranie komunikatu z serwera { // odebranie komunikatu z serwera
if (pRozkaz->iSygn == 'EU07') if (pRozkaz->iSygn == MAKE_ID4('E','U','0','7') )
switch (pRozkaz->iComm) switch (pRozkaz->iComm)
{ {
case 0: // odesłanie identyfikatora wersji case 0: // odesłanie identyfikatora wersji
@@ -2617,7 +2653,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
int i = int i =
int(pRozkaz->cString[8]); // długość pierwszego łańcucha (z przodu dwa floaty) int(pRozkaz->cString[8]); // długość pierwszego łańcucha (z przodu dwa floaty)
CommLog( CommLog(
to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + Now() + " " + to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) + std::string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) +
" rcvd"); " rcvd");
TGroundNode *t = Ground.DynamicFind( TGroundNode *t = Ground.DynamicFind(
@@ -2635,7 +2671,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
break; break;
case 4: // badanie zajętości toru case 4: // badanie zajętości toru
{ {
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + CommLog(Now() + " " + to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
TGroundNode *t = Ground.FindGroundNode( TGroundNode *t = Ground.FindGroundNode(
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK); std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK);
@@ -2646,7 +2682,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
break; break;
case 5: // ustawienie parametrów case 5: // ustawienie parametrów
{ {
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " params " + CommLog(Now() + " " + to_string(pRozkaz->iComm) + " params " +
to_string(*pRozkaz->iPar) + " rcvd"); to_string(*pRozkaz->iPar) + " rcvd");
if (*pRozkaz->iPar == 0) // sprawdzenie czasu if (*pRozkaz->iPar == 0) // sprawdzenie czasu
if (*pRozkaz->iPar & 1) // ustawienie czasu if (*pRozkaz->iPar & 1) // ustawienie czasu
@@ -2671,7 +2707,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
case 6: // pobranie parametrów ruchu pojazdu case 6: // pobranie parametrów ruchu pojazdu
if (Global::iMultiplayer) if (Global::iMultiplayer)
{ // Ra 2014-12: to ma działać również dla pojazdów bez obsady { // Ra 2014-12: to ma działać również dla pojazdów bez obsady
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + CommLog(Now() + " " + to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) +
" rcvd"); " rcvd");
if (pRozkaz->cString[0]) // jeśli długość nazwy jest niezerowa if (pRozkaz->cString[0]) // jeśli długość nazwy jest niezerowa
@@ -2694,15 +2730,15 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
} }
break; break;
case 8: // ponowne wysłanie informacji o zajętych odcinkach toru case 8: // ponowne wysłanie informacji o zajętych odcinkach toru
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy track" + " rcvd"); CommLog(Now() + " " + to_string(pRozkaz->iComm) + " all busy track" + " rcvd");
Ground.TrackBusyList(); Ground.TrackBusyList();
break; break;
case 9: // ponowne wysłanie informacji o zajętych odcinkach izolowanych case 9: // ponowne wysłanie informacji o zajętych odcinkach izolowanych
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy isolated" + " rcvd"); CommLog(Now() + " " + to_string(pRozkaz->iComm) + " all busy isolated" + " rcvd");
Ground.IsolatedBusyList(); Ground.IsolatedBusyList();
break; break;
case 10: // badanie zajętości jednego odcinka izolowanego case 10: // badanie zajętości jednego odcinka izolowanego
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + CommLog(Now() + " " + to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
Ground.IsolatedBusy(std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0]))); Ground.IsolatedBusy(std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])));
break; break;
@@ -2710,14 +2746,14 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
// Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0])));
break; break;
case 12: // skrocona ramka parametrow pojazdow AI (wszystkich!!) case 12: // skrocona ramka parametrow pojazdow AI (wszystkich!!)
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " obsadzone" + " rcvd"); CommLog(Now() + " " + to_string(pRozkaz->iComm) + " obsadzone" + " rcvd");
Ground.WyslijObsadzone(); Ground.WyslijObsadzone();
// Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0])));
break; break;
case 13: // ramka uszkodzenia i innych stanow pojazdu, np. wylaczenie CA, wlaczenie recznego itd. case 13: // ramka uszkodzenia i innych stanow pojazdu, np. wylaczenie CA, wlaczenie recznego itd.
// WriteLog("Przyszlo 13!"); // WriteLog("Przyszlo 13!");
// WriteLog(pRozkaz->cString); // WriteLog(pRozkaz->cString);
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + CommLog(Now() + " " + to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) +
" rcvd"); " rcvd");
if (pRozkaz->cString[1]) // jeśli długość nazwy jest niezerowa if (pRozkaz->cString[1]) // jeśli długość nazwy jest niezerowa

View File

@@ -80,6 +80,10 @@ class TWorld
double fTime50Hz; // bufor czasu dla komunikacji z PoKeys double fTime50Hz; // bufor czasu dla komunikacji z PoKeys
double fTimeBuffer; // bufor czasu aktualizacji dla stałego kroku fizyki double fTimeBuffer; // bufor czasu aktualizacji dla stałego kroku fizyki
double fMaxDt; //[s] krok czasowy fizyki (0.01 dla normalnych warunków) double fMaxDt; //[s] krok czasowy fizyki (0.01 dla normalnych warunków)
double m_primaryupdaterate{ 1.0 / 100.0 };
double m_primaryupdateaccumulator{ 0.0 }; // keeps track of elapsed simulation time, for core fixed step routines
double m_secondaryupdaterate{ 1.0 / 50.0 };
double m_secondaryupdateaccumulator{ 0.0 }; // keeps track of elapsed simulation time, for less important fixed step routines
int iPause; // wykrywanie zmian w zapauzowaniu int iPause; // wykrywanie zmian w zapauzowaniu
double VelPrev; // poprzednia prędkość double VelPrev; // poprzednia prędkość
int tprev; // poprzedni czas int tprev; // poprzedni czas

View File

@@ -1,5 +1,6 @@
#include "stdafx.h" #include "stdafx.h"
#include "World.h" #include "World.h"
#include "usefull.h"
#pragma warning (disable: 4091) #pragma warning (disable: 4091)
#include <dbghelp.h> #include <dbghelp.h>
@@ -61,7 +62,7 @@ LRESULT APIENTRY WndProc( HWND hWnd, // handle for this window
case WM_COPYDATA: { case WM_COPYDATA: {
// obsługa danych przesłanych przez program sterujący // obsługa danych przesłanych przez program sterujący
pDane = (PCOPYDATASTRUCT)lParam; pDane = (PCOPYDATASTRUCT)lParam;
if( pDane->dwData == 'EU07' ) // sygnatura danych if( pDane->dwData == MAKE_ID4('E', 'U', '0', '7')) // sygnatura danych
World.OnCommandGet( (DaneRozkaz *)( pDane->lpData ) ); World.OnCommandGet( (DaneRozkaz *)( pDane->lpData ) );
break; break;
} }