mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
assorted bug fixes
This commit is contained in:
@@ -1881,7 +1881,7 @@ bool TController::CheckVehicles(TOrders user)
|
||||
{ // je<6A>li pojazd posiada pantograf, to przydzielamy mu mask<73>, kt<6B>r<EFBFBD> b<>dzie informowa<77> o
|
||||
// je<6A>dzie bezpr<70>dowej
|
||||
p->iOverheadMask = pantmask;
|
||||
pantmask << 1; // przesuni<6E>cie bit<69>w, max. 32 pojazdy z pantografami w sk<73>adzie
|
||||
pantmask = pantmask << 1; // przesuni<6E>cie bit<69>w, max. 32 pojazdy z pantografami w sk<73>adzie
|
||||
}
|
||||
d = p->DirectionSet(d ? 1 : -1); // zwraca po<70>o<EFBFBD>enie nast<73>pnego (1=zgodny,0=odwr<77>cony -
|
||||
// wzgl<67>dem czo<7A>a sk<73>adu)
|
||||
@@ -2310,7 +2310,7 @@ bool TController::PrepareEngine()
|
||||
if (OK)
|
||||
{
|
||||
if (eStopReason == stopSleep) // je<6A>li dotychczas spa<70>
|
||||
eStopReason == stopNone; // teraz nie ma powodu do stania
|
||||
eStopReason = stopNone; // teraz nie ma powodu do stania
|
||||
iEngineActive = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2847,7 +2847,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
||||
i = 0;
|
||||
przek = przek / (np - nPrzekrF);
|
||||
for (TDynamicObject *p = GetFirstDynamic(MoverParameters->ActiveCab < 0 ? 1 : 0, 4); p;
|
||||
(kier > 0 ? p = p->NextC(4) : p = p->PrevC(4)))
|
||||
(true == kier ? p = p->NextC(4) : p = p->PrevC(4)))
|
||||
{
|
||||
if (!PrzekrF[i])
|
||||
{
|
||||
@@ -2858,7 +2858,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
||||
}
|
||||
i = 0;
|
||||
for (TDynamicObject *p = GetFirstDynamic(MoverParameters->ActiveCab < 0 ? 1 : 0, 4); p;
|
||||
(kier > 0 ? p = p->NextC(4) : p = p->PrevC(4)))
|
||||
(true == kier ? p = p->NextC(4) : p = p->PrevC(4)))
|
||||
{
|
||||
float Nmax = ((p->MoverParameters->P2FTrans * p->MoverParameters->MaxBrakePress[0] -
|
||||
p->MoverParameters->BrakeCylSpring) *
|
||||
@@ -4252,10 +4252,10 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
|
||||
iMultiTex = 0; // czy jest wiele tekstur wymiennych?
|
||||
parser.getTokens();
|
||||
parser >> asModel;
|
||||
if (asModel.find('#') == asModel.length()) // Ra 2015-01: nie podoba mi się to
|
||||
if( asModel[asModel.size() - 1] == '#' ) // Ra 2015-01: nie podoba mi się to
|
||||
{ // model wymaga wielu tekstur wymiennych
|
||||
iMultiTex = 1;
|
||||
asModel = asModel.substr(0, asModel.length() - 1);
|
||||
asModel.erase( asModel.length() - 1 );
|
||||
}
|
||||
if ((i = asModel.find(',')) != std::string::npos)
|
||||
{ // Ra 2015-01: może szukać przecinka w
|
||||
@@ -4273,6 +4273,7 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
|
||||
// modele w dynamics/basedir
|
||||
Global::asCurrentTexturePath = BaseDir; // biezaca sciezka do tekstur to dynamic/...
|
||||
mdModel = TModelsManager::GetModel(asModel, true);
|
||||
assert( mdModel != nullptr ); // TODO: handle this more gracefully than all going to shit
|
||||
if (ReplacableSkin != "none")
|
||||
{ // tekstura wymienna jest raczej jedynie w "dynamic\"
|
||||
ReplacableSkin =
|
||||
|
||||
2
EU07.cpp
2
EU07.cpp
@@ -572,7 +572,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance
|
||||
LPSTR lpCmdLine, // command line parameters
|
||||
int nCmdShow) // window show state
|
||||
{
|
||||
#ifdef _MSC_VER & _DEBUG
|
||||
#if defined(_MSC_VER) && defined (_DEBUG)
|
||||
// memory leaks
|
||||
_CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) | _CRTDBG_LEAK_CHECK_DF );
|
||||
// floating point operation errors
|
||||
|
||||
17
Ground.cpp
17
Ground.cpp
@@ -42,7 +42,6 @@ http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#define _PROBLEND 1
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
bool bCondition; // McZapkie: do testowania warunku na event multiple
|
||||
string LogComment;
|
||||
@@ -684,17 +683,6 @@ void TGroundNode::RenderAlphaDL()
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------ Podstawowy pojemnik terenu - sektor -----------------------
|
||||
//------------------------------------------------------------------------------
|
||||
TSubRect::TSubRect()
|
||||
{
|
||||
nRootNode = NULL; // lista wszystkich obiektów jest pusta
|
||||
nRenderHidden = nRenderRect = nRenderRectAlpha = nRender = nRenderMixed = nRenderAlpha =
|
||||
nRenderWires = NULL;
|
||||
tTrackAnim = NULL; // nic nie animujemy
|
||||
tTracks = NULL; // nie ma jeszcze torów
|
||||
nRootMesh = nMeshed = NULL; // te listy te¿ s¹ puste
|
||||
iNodeCount = 0; // licznik obiektów
|
||||
iTracks = 0; // licznik torów
|
||||
}
|
||||
TSubRect::~TSubRect()
|
||||
{
|
||||
if (Global::bManageNodes) // Ra: tu siê coœ sypie
|
||||
@@ -2278,8 +2266,9 @@ void TGround::FirstInit()
|
||||
for (j = 1; j < Current->iCount; ++j)
|
||||
{ // od 1 do koñca s¹ zestawy trójk¹tów
|
||||
std::string xxxzzz = Current->nNode[j].smTerrain->pName; // pobranie nazwy
|
||||
gr = GetRect(1000 * (stol_def(xxxzzz.substr(0, 3),0) - 500),
|
||||
1000 * (stol_def(xxxzzz.substr(3, 3),0) - 500));
|
||||
gr = GetRect(
|
||||
( std::stoi( xxxzzz.substr( 0, 3 )) - 500 ) * 1000,
|
||||
( std::stoi( xxxzzz.substr( 3, 3 )) - 500 ) * 1000 );
|
||||
if (Global::bUseVBO)
|
||||
gr->nTerrain = Current->nNode + j; // zapamiêtanie
|
||||
else
|
||||
|
||||
30
Ground.h
30
Ground.h
@@ -182,28 +182,28 @@ class TGroundNode : public Resource
|
||||
class TSubRect : public Resource, public CMesh
|
||||
{ // sektor składowy kwadratu kilometrowego
|
||||
public:
|
||||
int iTracks; // ilość torów w (tTracks)
|
||||
TTrack **tTracks; // tory do renderowania pojazdów
|
||||
int iTracks = 0; // ilość torów w (tTracks)
|
||||
TTrack **tTracks = nullptr; // tory do renderowania pojazdów
|
||||
protected:
|
||||
TTrack *tTrackAnim; // obiekty do przeliczenia animacji
|
||||
TGroundNode *nRootMesh; // obiekty renderujące wg tekstury (wtórne, lista po nNext2)
|
||||
TGroundNode *nMeshed; // lista obiektów dla których istnieją obiekty renderujące grupowo
|
||||
TTrack *tTrackAnim = nullptr; // obiekty do przeliczenia animacji
|
||||
TGroundNode *nRootMesh = nullptr; // obiekty renderujące wg tekstury (wtórne, lista po nNext2)
|
||||
TGroundNode *nMeshed = nullptr; // lista obiektów dla których istnieją obiekty renderujące grupowo
|
||||
public:
|
||||
TGroundNode *
|
||||
nRootNode; // wszystkie obiekty w sektorze, z wyjątkiem renderujących i pojazdów (nNext2)
|
||||
nRootNode = nullptr; // wszystkie obiekty w sektorze, z wyjątkiem renderujących i pojazdów (nNext2)
|
||||
TGroundNode *
|
||||
nRenderHidden; // lista obiektów niewidocznych, "renderowanych" również z tyłu (nNext3)
|
||||
TGroundNode *nRenderRect; // z poziomu sektora - nieprzezroczyste (nNext3)
|
||||
TGroundNode *nRenderRectAlpha; // z poziomu sektora - przezroczyste (nNext3)
|
||||
TGroundNode *nRenderWires; // z poziomu sektora - druty i inne linie (nNext3)
|
||||
TGroundNode *nRender; // indywidualnie - nieprzezroczyste (nNext3)
|
||||
TGroundNode *nRenderMixed; // indywidualnie - nieprzezroczyste i przezroczyste (nNext3)
|
||||
TGroundNode *nRenderAlpha; // indywidualnie - przezroczyste (nNext3)
|
||||
int iNodeCount; // licznik obiektów, do pomijania pustych sektorów
|
||||
nRenderHidden = nullptr; // lista obiektów niewidocznych, "renderowanych" również z tyłu (nNext3)
|
||||
TGroundNode *nRenderRect = nullptr; // z poziomu sektora - nieprzezroczyste (nNext3)
|
||||
TGroundNode *nRenderRectAlpha = nullptr; // z poziomu sektora - przezroczyste (nNext3)
|
||||
TGroundNode *nRenderWires = nullptr; // z poziomu sektora - druty i inne linie (nNext3)
|
||||
TGroundNode *nRender = nullptr; // indywidualnie - nieprzezroczyste (nNext3)
|
||||
TGroundNode *nRenderMixed = nullptr; // indywidualnie - nieprzezroczyste i przezroczyste (nNext3)
|
||||
TGroundNode *nRenderAlpha = nullptr; // indywidualnie - przezroczyste (nNext3)
|
||||
int iNodeCount = 0; // licznik obiektów, do pomijania pustych sektorów
|
||||
public:
|
||||
void LoadNodes(); // utworzenie VBO sektora
|
||||
public:
|
||||
TSubRect();
|
||||
// TSubRect() = default;
|
||||
virtual ~TSubRect();
|
||||
virtual void Release(); // zwalnianie VBO sektora
|
||||
void NodeAdd(TGroundNode *Node); // dodanie obiektu do sektora na etapie rozdzielania na sektory
|
||||
|
||||
@@ -352,6 +352,10 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
|
||||
Couplers[b].DmaxC = 0.1;
|
||||
Couplers[b].FmaxC = 1000.0;
|
||||
}
|
||||
for( b = 0; b < 2; ++b ) {
|
||||
HVCouplers[ b ][ 0 ] = 0.0;
|
||||
HVCouplers[ b ][ 1 ] = 0.0;
|
||||
}
|
||||
Power = 0.0;
|
||||
MaxLoad = 0;
|
||||
LoadAccepted = "";
|
||||
@@ -549,7 +553,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
|
||||
ResistorsFlag = false;
|
||||
RventRot = 0.0;
|
||||
RVentType = 0;
|
||||
RVentnmax = 0.0;
|
||||
RVentnmax = 1.0;
|
||||
RVentCutOff = 0.0;
|
||||
|
||||
enrot = 0.0;
|
||||
@@ -7791,7 +7795,14 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
|
||||
WriteLog("XBT EStED");
|
||||
Hamulec = std::make_shared<TEStED>(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
|
||||
Hamulec->SetRM(RapidMult);
|
||||
break;
|
||||
if( MBPM < 2 ) {
|
||||
//jesli przystawka wazaca
|
||||
Hamulec->SetLP( 0, MaxBrakePress[ 3 ], 0 );
|
||||
}
|
||||
else {
|
||||
Hamulec->SetLP( Mass, MBPM, MaxBrakePress[ 1 ] );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EP2:
|
||||
{
|
||||
|
||||
@@ -96,9 +96,9 @@ double PFVa(double PH, double PL, double S, double LIM,
|
||||
FM = FM * (LIM - PL) / DP; // jesli jestesmy przy nastawieniu, to zawor sie przymyka
|
||||
if ((sg > 0.5)) // jesli ponizej stosunku krytycznego
|
||||
if ((PH - PL) < DPL) // niewielka roznica cisnien
|
||||
return (PH - PL) / DPL * FM * 2 * sqrt((sg) * (1 - sg));
|
||||
return (PH - PL) / DPL * FM * 2 * sqrt((sg) * (1 - sg)); // BUG: (1-sg) can be < 0, leading to sqrt(-x)
|
||||
else
|
||||
return FM * 2 * sqrt((sg) * (1 - sg));
|
||||
return FM * 2 * sqrt( (sg) * ( 1 - sg ) ); // BUG: (1-sg) can be < 0, leading to sqrt(-x)
|
||||
else // powyzej stosunku krytycznego
|
||||
return FM;
|
||||
}
|
||||
@@ -1835,7 +1835,7 @@ void TKE::CheckReleaser(double dt)
|
||||
CVP = CntrlRes->P();
|
||||
|
||||
// odluzniacz
|
||||
if ((BrakeStatus && b_rls) == b_rls)
|
||||
if ( true == ((BrakeStatus & b_rls) == b_rls))
|
||||
if ((CVP - VVP < 0))
|
||||
BrakeStatus &= 247;
|
||||
else
|
||||
@@ -2591,32 +2591,23 @@ double TM394::GetPos(int i)
|
||||
|
||||
double TH14K1::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
||||
{
|
||||
static int const LBDelay = 100; // szybkosc + zasilanie sterujacego
|
||||
int const LBDelay = 100; // szybkosc + zasilanie sterujacego
|
||||
// static double const BPT_K[/*?*/ /*-1..4*/ (4) - (-1) + 1][2] =
|
||||
//{ (10, 0), (4, 1), (0, 1), (4, 0), (4, -1), (15, -1) };
|
||||
static double const NomPress = 5.0;
|
||||
double const NomPress = 5.0;
|
||||
|
||||
double LimPP;
|
||||
double dpPipe;
|
||||
double dpMainValve;
|
||||
double ActFlowSpeed;
|
||||
int BCP;
|
||||
int BCP = std::lround(i_bcp);
|
||||
if( i_bcp < -1 ) { BCP = 1; }
|
||||
|
||||
BCP = lround(i_bcp);
|
||||
if (i_bcp < -1)
|
||||
BCP = 1;
|
||||
LimPP = BPT_K[BCP + 1][1];
|
||||
if (LimPP < 0)
|
||||
LimPP = 0.5 * PP;
|
||||
else if (LimPP > 0)
|
||||
LimPP = PP;
|
||||
else
|
||||
LimPP = CP;
|
||||
ActFlowSpeed = BPT_K[BCP + 1][0];
|
||||
double LimPP = BPT_K[BCP + 1][1];
|
||||
if( LimPP < 0.0 ) { LimPP = 0.5 * PP; }
|
||||
else if( LimPP > 0.0 ) { LimPP = PP; }
|
||||
else { LimPP = CP; }
|
||||
double ActFlowSpeed = BPT_K[BCP + 1][0];
|
||||
|
||||
CP = CP + 6 * Min0R(abs(LimPP - CP), 0.05) * PR(CP, LimPP) * dt; // zbiornik sterujacy
|
||||
CP = CP + 6 * std::min( std::abs(LimPP - CP), 0.05 ) * PR(CP, LimPP) * dt; // zbiornik sterujacy
|
||||
|
||||
dpMainValve = 0;
|
||||
double dpMainValve = 0.0;
|
||||
|
||||
if (BCP == -1)
|
||||
dpMainValve = PF(HP, PP, ActFlowSpeed / LBDelay) * dt;
|
||||
|
||||
@@ -279,7 +279,7 @@ std::string Tab2Sp(std::string const &s) /*Tab to Space sign*/
|
||||
{
|
||||
std::string s2 = "";
|
||||
char tmp = (char)9;
|
||||
for (int b = 0; b < s.length(); ++b)
|
||||
for (std::size_t b = 0; b < s.length(); ++b)
|
||||
//{
|
||||
// if (s[b] == tmp[0])
|
||||
// s[b] = tmp[1];
|
||||
@@ -415,6 +415,9 @@ std::string to_hex_str( int const Value, int const Width )
|
||||
|
||||
int stol_def(const std::string &str, const int &DefaultValue)
|
||||
{
|
||||
// NOTE: there's good chance this function is bugged, it produced wrong result on at least one occasion
|
||||
// TODO: rewrite into something more reliable
|
||||
|
||||
// this function was developed iteratively on Codereview.stackexchange
|
||||
// with the assistance of @Corbin
|
||||
std::size_t len = str.size();
|
||||
|
||||
@@ -1844,7 +1844,11 @@ bool TModel3d::LoadFromFile(std::string const &FileName, bool dynamic) {
|
||||
Init(); // generowanie siatek i zapis E3D
|
||||
}
|
||||
}
|
||||
return Root ? (iSubModelsCount > 0) : false; // brak pliku albo problem z wczytaniem
|
||||
bool const result = Root ? (iSubModelsCount > 0) : false; // brak pliku albo problem z wczytaniem
|
||||
if( false == result ) {
|
||||
ErrorLog( "Failed to load 3d model \"" + FileName + "\"" );
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic)
|
||||
|
||||
@@ -572,7 +572,7 @@ void TPythonScreens::run()
|
||||
|
||||
void TPythonScreens::finish()
|
||||
{
|
||||
_thread == NULL;
|
||||
_thread = NULL;
|
||||
}
|
||||
|
||||
DWORD WINAPI ScreenRendererThread(LPVOID lpParam)
|
||||
|
||||
10
Train.cpp
10
Train.cpp
@@ -908,7 +908,7 @@ void TTrain::OnKeyDown(int cKey)
|
||||
else if (cKey == Global::Keys[k_LeftSign]) // lewe swiatlo - w<><77>czenie
|
||||
// ABu 060205: dzielo Wingera po malutkim liftingu:
|
||||
{
|
||||
if (!mvOccupied->LightsPosNo > 0)
|
||||
if (false == (mvOccupied->LightsPosNo > 0))
|
||||
{
|
||||
if ((GetAsyncKeyState(VK_CONTROL) < 0) &&
|
||||
(ggRearLeftLightButton.SubModel)) // hunter-230112 - z controlem zapala z tylu
|
||||
@@ -1083,7 +1083,7 @@ void TTrain::OnKeyDown(int cKey)
|
||||
// tylne (koncowki) -
|
||||
// wlaczenie
|
||||
{
|
||||
if (!mvOccupied->LightsPosNo > 0)
|
||||
if (false == (mvOccupied->LightsPosNo > 0))
|
||||
{
|
||||
if ((GetAsyncKeyState(VK_CONTROL) < 0) &&
|
||||
(ggRearRightLightButton.SubModel)) // hunter-230112 - z controlem zapala z tylu
|
||||
@@ -2115,7 +2115,7 @@ if
|
||||
else if (cKey == Global::Keys[k_LeftSign]) // ABu 060205: lewe swiatlo -
|
||||
// wylaczenie
|
||||
{
|
||||
if (!mvOccupied->LightsPosNo > 0)
|
||||
if (false == (mvOccupied->LightsPosNo > 0))
|
||||
{
|
||||
if ((GetAsyncKeyState(VK_CONTROL) < 0) &&
|
||||
(ggRearLeftLightButton.SubModel)) // hunter-230112 - z controlem gasi z tylu
|
||||
@@ -2288,7 +2288,7 @@ if
|
||||
if (cKey == Global::Keys[k_RightSign]) // Winger 070304: swiatla tylne
|
||||
// (koncowki) - wlaczenie
|
||||
{
|
||||
if (!mvOccupied->LightsPosNo > 0)
|
||||
if (false == (mvOccupied->LightsPosNo > 0))
|
||||
{
|
||||
if ((GetAsyncKeyState(VK_CONTROL) < 0) &&
|
||||
(ggRearRightLightButton.SubModel)) // hunter-230112 - z controlem gasi z tylu
|
||||
@@ -3239,7 +3239,7 @@ bool TTrain::Update()
|
||||
rsRunningNoise.AM = am;
|
||||
rsRunningNoise.AA = 0.7;
|
||||
rsRunningNoise.FA = fa;
|
||||
rsRunningNoise.FM - fm;
|
||||
rsRunningNoise.FM = fm;
|
||||
}
|
||||
mvOccupied->EventFlag = false;
|
||||
}
|
||||
|
||||
@@ -330,5 +330,3 @@ void TTrackFollower::Render(float fNr)
|
||||
}
|
||||
#endif
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma package(smart_init)
|
||||
|
||||
@@ -35,7 +35,6 @@ http://mozilla.org/MPL/2.0/.
|
||||
#define TEXTURE_FILTER_CONTROL_EXT 0x8500
|
||||
#define TEXTURE_LOD_BIAS_EXT 0x8501
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
typedef void(APIENTRY *FglutBitmapCharacter)(void *font, int character); // typ funkcji
|
||||
FglutBitmapCharacter glutBitmapCharacterDLL = NULL; // deklaracja zmiennej
|
||||
|
||||
Reference in New Issue
Block a user