mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 11:09:19 +02:00
stl-based names class replacement, re-enabled cab camera shake, enhanced parser comment support, minor bug fixes.
This commit is contained in:
108
Ground.cpp
108
Ground.cpp
@@ -1308,8 +1308,9 @@ TGround::TGround()
|
||||
for( int i = 0; i < TP_LAST; ++i ) {
|
||||
nRootOfType[ i ] = nullptr; // zerowanie tablic wyszukiwania
|
||||
}
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
sTracks = new TNames(); // nazwy torów - na razie tak
|
||||
|
||||
#endif
|
||||
::SecureZeroMemory( TempConnectionType, sizeof( TempConnectionType ) );
|
||||
::SecureZeroMemory( pRendered, sizeof( pRendered ) );
|
||||
}
|
||||
@@ -1348,7 +1349,9 @@ void TGround::Free()
|
||||
iNumNodes = 0;
|
||||
// RootNode=NULL;
|
||||
nRootDynamic = NULL;
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
delete sTracks;
|
||||
#endif
|
||||
}
|
||||
|
||||
TGroundNode * TGround::DynamicFindAny(std::string asNameToFind)
|
||||
@@ -1381,7 +1384,38 @@ TGroundNode * TGround::FindGroundNode(std::string asNameToFind, TGroundNodeType
|
||||
{ // wyszukiwanie obiektu o podanej nazwie i konkretnym typie
|
||||
if ((iNodeType == TP_TRACK) || (iNodeType == TP_MEMCELL) || (iNodeType == TP_MODEL))
|
||||
{ // wyszukiwanie w drzewie binarnym
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
return (TGroundNode *)sTracks->Find(iNodeType, asNameToFind.c_str());
|
||||
#else
|
||||
/*
|
||||
switch( iNodeType ) {
|
||||
|
||||
case TP_TRACK: {
|
||||
auto const lookup = m_trackmap.find( asNameToFind );
|
||||
return
|
||||
lookup != m_trackmap.end() ?
|
||||
lookup->second :
|
||||
nullptr;
|
||||
}
|
||||
case TP_MODEL: {
|
||||
auto const lookup = m_modelmap.find( asNameToFind );
|
||||
return
|
||||
lookup != m_modelmap.end() ?
|
||||
lookup->second :
|
||||
nullptr;
|
||||
}
|
||||
case TP_MEMCELL: {
|
||||
auto const lookup = m_memcellmap.find( asNameToFind );
|
||||
return
|
||||
lookup != m_memcellmap.end() ?
|
||||
lookup->second :
|
||||
nullptr;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
*/
|
||||
return m_trackmap.Find( iNodeType, asNameToFind );
|
||||
#endif
|
||||
}
|
||||
// standardowe wyszukiwanie liniowe
|
||||
TGroundNode *Current;
|
||||
@@ -1705,6 +1739,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
tmp->MemCell->Load(parser);
|
||||
if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
if (sTracks->Update(TP_MEMCELL, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdzić, czy już jest
|
||||
{ // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność
|
||||
@@ -1713,6 +1748,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
}
|
||||
else
|
||||
sTracks->Add(TP_MEMCELL, tmp->asName.c_str(), tmp); // nazwa jest unikalna
|
||||
#else
|
||||
if( false == m_trackmap.Add( TP_MEMCELL, tmp->asName, tmp ) ) {
|
||||
// przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność wsteczna)
|
||||
ErrorLog( "Duplicated memcell: " + tmp->asName ); // to zgłaszać duplikat
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case TP_EVLAUNCH:
|
||||
@@ -1732,6 +1773,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
tmp->asName); // w nazwie może być nazwa odcinka izolowanego
|
||||
if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
if (sTracks->Update(TP_TRACK, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdzić, czy już jest
|
||||
{ // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność
|
||||
@@ -1741,6 +1783,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
}
|
||||
else
|
||||
sTracks->Add(TP_TRACK, tmp->asName.c_str(), tmp); // nazwa jest unikalna
|
||||
#else
|
||||
if( false == m_trackmap.Add( TP_TRACK, tmp->asName, tmp ) ) {
|
||||
// przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność wsteczna)
|
||||
ErrorLog( "Duplicated track: " + tmp->asName ); // to zgłaszać duplikat
|
||||
}
|
||||
#endif
|
||||
}
|
||||
tmp->pCenter = (tmp->pTrack->CurrentSegment()->FastGetPoint_0() +
|
||||
tmp->pTrack->CurrentSegment()->FastGetPoint(0.5) +
|
||||
@@ -1981,6 +2029,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
}
|
||||
else if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
if (sTracks->Update(TP_MODEL, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdzić, czy już jest
|
||||
{ // przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność
|
||||
@@ -1989,6 +2038,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
}
|
||||
else
|
||||
sTracks->Add(TP_MODEL, tmp->asName.c_str(), tmp); // nazwa jest unikalna
|
||||
#else
|
||||
if( false == m_trackmap.Add( TP_MODEL, tmp->asName, tmp ) ) {
|
||||
// przy zdublowaniu wskaźnik zostanie podmieniony w drzewku na późniejszy (zgodność wsteczna)
|
||||
ErrorLog( "Duplicated model: " + tmp->asName ); // to zgłaszać duplikat
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// str=Parser->GetNextSymbol().LowerCase();
|
||||
break;
|
||||
@@ -2268,7 +2323,15 @@ TSubRect * TGround::GetSubRect(int iCol, int iRow)
|
||||
|
||||
TEvent * TGround::FindEvent(const string &asEventName)
|
||||
{
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
return (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie
|
||||
#else
|
||||
auto const lookup = m_eventmap.find( asEventName );
|
||||
return
|
||||
lookup != m_eventmap.end() ?
|
||||
lookup->second :
|
||||
nullptr;
|
||||
#endif
|
||||
/* //powolna wyszukiwarka
|
||||
for (TEvent *Current=RootEvent;Current;Current=Current->Next2)
|
||||
{
|
||||
@@ -2281,13 +2344,25 @@ TEvent * TGround::FindEvent(const string &asEventName)
|
||||
|
||||
TEvent * TGround::FindEventScan(const string &asEventName)
|
||||
{ // wyszukanie eventu z opcją utworzenia niejawnego dla komórek skanowanych
|
||||
TEvent *e = (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie eventów
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
TEvent *e = (TEvent *)sTracks->Find( 0, asEventName.c_str() ); // wyszukiwanie w drzewie eventów
|
||||
#else
|
||||
auto const lookup = m_eventmap.find( asEventName );
|
||||
auto e =
|
||||
lookup != m_eventmap.end() ?
|
||||
lookup->second :
|
||||
nullptr;
|
||||
#endif
|
||||
if (e)
|
||||
return e; // jak istnieje, to w porządku
|
||||
if (asEventName.rfind(":scan") != std::string::npos) // jeszcze może być event niejawny
|
||||
{ // no to szukamy komórki pamięci o nazwie zawartej w evencie
|
||||
string n = asEventName.substr(0, asEventName.length() - 5); // do dwukropka
|
||||
if (sTracks->Find(TP_MEMCELL, n.c_str())) // jeśli jest takowa komórka pamięci
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
if( sTracks->Find( TP_MEMCELL, n.c_str() ) ) // jeśli jest takowa komórka pamięci
|
||||
#else
|
||||
if( m_trackmap.Find( TP_MEMCELL, n ) != nullptr ) // jeśli jest takowa komórka pamięci
|
||||
#endif
|
||||
e = new TEvent(n); // utworzenie niejawnego eventu jej odczytu
|
||||
}
|
||||
return e; // utworzony albo się nie udało
|
||||
@@ -2626,7 +2701,11 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
if (RootEvent->asName.find(
|
||||
"onstart") != string::npos) // event uruchamiany automatycznie po starcie
|
||||
AddToQuery(RootEvent, NULL); // dodanie do kolejki
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
sTracks->Add(0, tmp->asName.c_str(), tmp); // dodanie do wyszukiwarki
|
||||
#else
|
||||
m_eventmap.emplace( tmp->asName, tmp ); // dodanie do wyszukiwarki
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2905,10 +2984,12 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
parser >> token;
|
||||
}
|
||||
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
sTracks->Sort(TP_TRACK); // finalne sortowanie drzewa torów
|
||||
sTracks->Sort(TP_MEMCELL); // finalne sortowanie drzewa komórek pamięci
|
||||
sTracks->Sort(TP_MODEL); // finalne sortowanie drzewa modeli
|
||||
sTracks->Sort(0); // finalne sortowanie drzewa eventów
|
||||
#endif
|
||||
if (!bInitDone)
|
||||
FirstInit(); // jeśli nie było w scenerii
|
||||
if (Global::pTerrainCompact)
|
||||
@@ -3375,7 +3456,11 @@ void TGround::InitTracks()
|
||||
Current = new TGroundNode(); // to nie musi mieć nazwy, nazwa w wyszukiwarce wystarczy
|
||||
// Current->asName=p->asName; //mazwa identyczna, jak nazwa odcinka izolowanego
|
||||
Current->MemCell = new TMemCell(NULL); // nowa komórka
|
||||
#ifdef EU07_USE_OLD_TNAMES_CLASS
|
||||
sTracks->Add(TP_MEMCELL, p->asName.c_str(), Current); // dodanie do wyszukiwarki
|
||||
#else
|
||||
m_trackmap.Add( TP_MEMCELL, p->asName, Current );
|
||||
#endif
|
||||
Current->nNext =
|
||||
nRootOfType[TP_MEMCELL]; // to nie powinno tutaj być, bo robi się śmietnik
|
||||
nRootOfType[TP_MEMCELL] = Current;
|
||||
@@ -4038,15 +4123,16 @@ bool TGround::CheckQuery()
|
||||
}
|
||||
#endif
|
||||
//if (DebugModeFlag)
|
||||
WriteLog("Type: UpdateValues & Track command - " +
|
||||
std::string(tmpEvent->Params[0].asText) + " " +
|
||||
std::to_string(tmpEvent->Params[1].asdouble) + " " +
|
||||
std::to_string(tmpEvent->Params[2].asdouble));
|
||||
WriteLog("Type: UpdateValues & Track command - " +
|
||||
tmpEvent->Params[5].asMemCell->Text() + " " +
|
||||
std::to_string( tmpEvent->Params[ 5 ].asMemCell->Value1() ) + " " +
|
||||
std::to_string( tmpEvent->Params[ 5 ].asMemCell->Value2() ) );
|
||||
}
|
||||
else //if (DebugModeFlag)
|
||||
WriteLog("Type: UpdateValues - " + std::string( tmpEvent->Params[0].asText ) +
|
||||
" " + std::to_string(tmpEvent->Params[1].asdouble) + " " +
|
||||
std::to_string(tmpEvent->Params[2].asdouble));
|
||||
else //if (DebugModeFlag)
|
||||
WriteLog("Type: UpdateValues - " +
|
||||
tmpEvent->Params[5].asMemCell->Text() + " " +
|
||||
std::to_string( tmpEvent->Params[ 5 ].asMemCell->Value1() ) + " " +
|
||||
std::to_string( tmpEvent->Params[ 5 ].asMemCell->Value2() ) );
|
||||
}
|
||||
break;
|
||||
case tp_GetValues:
|
||||
|
||||
Reference in New Issue
Block a user