16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 05:49:19 +02:00

stl-based origin stack replacement

This commit is contained in:
tmj-fstate
2017-05-24 15:31:53 +02:00
parent 7c5f5d3d04
commit ac61dbdf14

View File

@@ -2046,9 +2046,7 @@ bool TGround::Init(std::string File)
cParser parser(File, cParser::buffer_FILE, subpath, Global::bLoadTraction); cParser parser(File, cParser::buffer_FILE, subpath, Global::bLoadTraction);
std::string token; std::string token;
const int OriginStackMaxDepth = 100; // rozmiar stosu dla zagnieżdżenia origin std::stack<Math3D::vector3> OriginStack; // stos zagnieżdżenia origin
int OriginStackTop = 0;
vector3 OriginStack[OriginStackMaxDepth]; // stos zagnieżdżenia origin
TGroundNode *LastNode = NULL; // do użycia w trainset TGroundNode *LastNode = NULL; // do użycia w trainset
iNumNodes = 0; iNumNodes = 0;
@@ -2222,8 +2220,7 @@ bool TGround::Init(std::string File)
tmp->evNext2 = RootEvent; // lista wszystkich eventów (m.in. do InitEvents) tmp->evNext2 = RootEvent; // lista wszystkich eventów (m.in. do InitEvents)
RootEvent = tmp; RootEvent = tmp;
if (!found) if (!found)
{ // jeśli nazwa wystąpiła, to do kolejki i wyszukiwarki dodawany jest tylko { // jeśli nazwa wystąpiła, to do kolejki i wyszukiwarki dodawany jest tylko pierwszy
// pierwszy
if (RootEvent->Type != tp_Ignored) if (RootEvent->Type != tp_Ignored)
if (RootEvent->asName.find( if (RootEvent->asName.find(
"onstart") != std::string::npos) // event uruchamiany automatycznie po starcie "onstart") != std::string::npos) // event uruchamiany automatycznie po starcie
@@ -2233,56 +2230,39 @@ bool TGround::Init(std::string File)
} }
} }
} }
// else
// if (str==AnsiString("include")) //Tolaris to zrobil wewnatrz parsera
// {
// Include(Parser);
// }
else if (str == "rotate") else if (str == "rotate")
{ {
// parser.getTokens(3); // parser.getTokens(3);
// parser >> aRotate.x >> aRotate.y >> aRotate.z; //Ra: to potrafi dawać błędne // parser >> aRotate.x >> aRotate.y >> aRotate.z; //Ra: to potrafi dawać błędne rezultaty // ??? how so TODO: investigate
// rezultaty
parser.getTokens(); parser.getTokens();
parser >> aRotate.x; parser >> aRotate.x;
parser.getTokens(); parser.getTokens();
parser >> aRotate.y; parser >> aRotate.y;
parser.getTokens(); parser.getTokens();
parser >> aRotate.z; parser >> aRotate.z;
// WriteLog("*** rotate "+AnsiString(aRotate.x)+" "+AnsiString(aRotate.y)+"
// "+AnsiString(aRotate.z));
} }
else if (str == "origin") else if (str == "origin")
{ {
// str=Parser->GetNextSymbol().LowerCase(); Math3D::vector3 offset;
// if (str=="begin") parser.getTokens(3);
{ parser
if (OriginStackTop >= OriginStackMaxDepth - 1) >> offset.x
{ >> offset.y
MessageBox(0, "Origin stack overflow ", "Error", MB_OK); >> offset.z;
break; // sumowanie całkowitego przesunięcia
} OriginStack.emplace(
parser.getTokens(3); offset + (
parser >> OriginStack[OriginStackTop].x >> OriginStack[OriginStackTop].y >> OriginStack.empty() ?
OriginStack[OriginStackTop].z; Math3D::vector3() :
pOrigin += OriginStack[OriginStackTop]; // sumowanie całkowitego przesunięcia OriginStack.top() ) );
OriginStackTop++; // zwiększenie wskaźnika stosu pOrigin = OriginStack.top();
}
} }
else if (str == "endorigin") else if (str == "endorigin")
{ {
// else OriginStack.pop();
// if (str=="end") pOrigin = ( OriginStack.empty() ?
{ Math3D::vector3() :
if (OriginStackTop <= 0) OriginStack.top() );
{
MessageBox(0, "Origin stack underflow ", "Error", MB_OK);
break;
}
OriginStackTop--; // zmniejszenie wskaźnika stosu
pOrigin -= OriginStack[OriginStackTop];
}
} }
else if (str == "atmo") // TODO: uporzadkowac gdzie maja byc parametry mgly! else if (str == "atmo") // TODO: uporzadkowac gdzie maja byc parametry mgly!
{ // Ra: ustawienie parametrów OpenGL przeniesione do FirstInit { // Ra: ustawienie parametrów OpenGL przeniesione do FirstInit