Merge branch 'master'

Merge to 481.
This commit is contained in:
firleju
2016-09-13 06:38:29 +02:00
10 changed files with 2011 additions and 1935 deletions

3808
Driver.cpp

File diff suppressed because it is too large Load Diff

View File

@@ -867,9 +867,11 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
if (smWahacze[i])
smWahacze[i]->SetRotate(float3(1, 0, 0),
fWahaczeAmp * cos(MoverParameters->eAngle));
if (Mechanik && (Controller != Humandriver))
if (Mechanik)
{ // rysowanie figurki mechanika
if (smMechanik0) // mechanik od strony sprzęgu 0
/*
if (smMechanik0) // mechanik od strony sprzęgu 0
if (smMechanik1) // jak jest drugi, to pierwszego jedynie pokazujemy
smMechanik0->iVisible = MoverParameters->ActiveCab > 0;
else
@@ -881,6 +883,17 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
}
if (smMechanik1) // mechanik od strony sprzęgu 1
smMechanik1->iVisible = MoverParameters->ActiveCab < 0;
*/
if (MoverParameters->ActiveCab > 0)
{
btMechanik1.TurnOn();
btnOn = true;
}
if (MoverParameters->ActiveCab < 0)
{
btMechanik2.TurnOn();
btnOn = true;
}
}
// ABu: Przechyly na zakretach
// Ra: przechyłkę załatwiamy na etapie przesuwania modelu
@@ -1572,7 +1585,7 @@ TDynamicObject::TDynamicObject()
mdLoad = NULL;
mdLowPolyInt = NULL;
mdPrzedsionek = NULL;
smMechanik0 = smMechanik1 = NULL;
//smMechanik0 = smMechanik1 = NULL;
smBuforLewy[0] = smBuforLewy[1] = NULL;
smBuforPrawy[0] = smBuforPrawy[1] = NULL;
enginevolume = 0;
@@ -1968,6 +1981,8 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
btHeadSignals21.Init("headlamp23", mdModel, false);
btHeadSignals22.Init("headlamp21", mdModel, false);
btHeadSignals23.Init("headlamp22", mdModel, false);
btMechanik1.Init("mechanik1", mdLowPolyInt, false);
btMechanik2.Init("mechanik2", mdLowPolyInt, false);
TurnOff(); // resetowanie zmiennych submodeli
// wyszukiwanie zderzakow
if (mdModel) // jeśli ma w czym szukać
@@ -3356,17 +3371,25 @@ bool TDynamicObject::Update(double dt, double dt1)
// NBMX Obsluga drzwi, MC: zuniwersalnione
if ((dDoorMoveL < MoverParameters->DoorMaxShiftL) && (MoverParameters->DoorLeftOpened))
{
rsDoorOpen.Play(vol, 0, MechInside, vPosition);
dDoorMoveL += dt1 * 0.5 * MoverParameters->DoorOpenSpeed;
}
if ((dDoorMoveL > 0) && (!MoverParameters->DoorLeftOpened))
{
rsDoorClose.Play(vol, 0, MechInside, vPosition);
dDoorMoveL -= dt1 * MoverParameters->DoorCloseSpeed;
if (dDoorMoveL < 0)
dDoorMoveL = 0;
}
if ((dDoorMoveR < MoverParameters->DoorMaxShiftR) && (MoverParameters->DoorRightOpened))
{
rsDoorOpen.Play(vol, 0, MechInside, vPosition);
dDoorMoveR += dt1 * 0.5 * MoverParameters->DoorOpenSpeed;
}
if ((dDoorMoveR > 0) && (!MoverParameters->DoorRightOpened))
{
rsDoorClose.Play(vol, 0, MechInside, vPosition);
dDoorMoveR -= dt1 * MoverParameters->DoorCloseSpeed;
if (dDoorMoveR < 0)
dDoorMoveR = 0;
@@ -3432,7 +3455,8 @@ bool TDynamicObject::Update(double dt, double dt1)
}
if (MoverParameters->LoadStatus)
LoadUpdate(); // zmiana modelu ładunku
return true; // Ra: chyba tak?
return true; // Ra: chyba tak?
}
bool TDynamicObject::FastUpdate(double dt)
@@ -3512,6 +3536,8 @@ void TDynamicObject::TurnOff()
btHeadSignals21.TurnOff();
btHeadSignals22.TurnOff();
btHeadSignals23.TurnOff();
btMechanik1.TurnOff();
btMechanik2.TurnOff();
};
void TDynamicObject::Render()
@@ -3875,7 +3901,11 @@ void TDynamicObject::RenderSounds()
sReleaser.TurnOn(MechInside, GetPosition());
else
sReleaser.TurnOff(MechInside, GetPosition());
sReleaser.Update(MechInside, GetPosition());
//sReleaser.Update(MechInside, GetPosition());
double releaser_vol = 1;
if (MoverParameters->BrakePress < 0.1)
releaser_vol = MoverParameters->BrakePress * 10;
sReleaser.UpdateAF(releaser_vol, 1, MechInside, GetPosition());
// if ((MoverParameters->ConverterFlag==false) &&
// (MoverParameters->TrainType!=dt_ET22))
// if
@@ -4244,6 +4274,10 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
{ // tekstura wymienna jest raczej jedynie w "dynamic\"
ReplacableSkin =
Global::asCurrentTexturePath + ReplacableSkin; // skory tez z dynamic/...
AnsiString x = TextureTest(Global::asCurrentTexturePath + "nowhere"); // na razie prymitywnie
if (!x.IsEmpty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID(NULL, NULL, (Global::asCurrentTexturePath + "nowhere").c_str(), 9);
/*
if ((i = ReplacableSkin.Pos("|")) > 0) // replacable dzielone
{
iMultiTex = -1;
@@ -4302,6 +4336,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
}
}
}
*/
if (iMultiTex > 0)
{ // jeśli model ma 4 tekstury
ReplacableSkinID[1] = TTexturesManager::GetTextureID(
@@ -4336,6 +4371,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
}
}
else
ReplacableSkinID[1] = TTexturesManager::GetTextureID(
NULL, NULL, ReplacableSkin.c_str(), Global::iDynamicFiltering);
if (TTexturesManager::GetAlpha(ReplacableSkinID[1]))
@@ -4929,7 +4965,8 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (str == AnsiString("pendulumamplitude:"))
fWahaczeAmp = Parser->GetNextSymbol().ToDouble();
}
else if (str == AnsiString("engineer:"))
/*
else if (str == AnsiString("engineer:"))
{ // nazwa submodelu maszynisty
str = Parser->GetNextSymbol();
smMechanik0 = mdModel->GetFromName(str.c_str());
@@ -4944,6 +4981,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
// if (smMechanik0) //a jest pierwszy
// smMechanik0->WillBeAnimated(); //to będziemy go obracać
}
*/
else if (str == AnsiString("animdoorprefix:"))
{ // nazwa animowanych drzwi
int i, j, k, m;
@@ -5628,7 +5666,7 @@ AnsiString TDynamicObject::TextureTest(AnsiString &name)
return ""; // nie znaleziona
};
void TDynamicObject::DestinationSet(AnsiString to)
void TDynamicObject::DestinationSet(AnsiString to, AnsiString numer)
{ // ustawienie stacji
// docelowej oraz wymiennej
// tekstury 4, jeśli
@@ -5639,25 +5677,39 @@ void TDynamicObject::DestinationSet(AnsiString to)
// rozkładu
if (abs(iMultiTex) >= 4)
return; // jak są 4 tekstury wymienne, to nie zmieniać rozkładem
numer = Global::Bezogonkow(numer);
asDestination = to;
to = Global::Bezogonkow(to); // do szukania pliku obcinamy ogonki
AnsiString x;
x = TextureTest(asBaseDir + numer + "@" + MoverParameters->TypeName);
if (!x.IsEmpty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
x = TextureTest(asBaseDir + numer );
if (!x.IsEmpty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
if (to.IsEmpty())
to = "nowhere";
x = TextureTest(asBaseDir + to + "@" +
MoverParameters->TypeName); // w pierwszej kolejności z nazwą FIZ/MMD
x = TextureTest(asBaseDir + to + "@" + MoverParameters->TypeName); // w pierwszej kolejności z nazwą FIZ/MMD
if (!x.IsEmpty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID(
NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
x = TextureTest(asBaseDir + to); // na razie prymitywnie
if (!x.IsEmpty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID(
NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
else
ReplacableSkinID[4] = 0; // 0 to brak? -1 odpada, bo inaczej się będzie mapować
{
x = TextureTest(asBaseDir + "nowhere"); // jak nie znalazł dedykowanej, to niech daje nowhere
if (!x.IsEmpty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID(NULL, NULL, x.c_str(), 9);
}
// Ra 2015-01: żeby zalogować błąd, trzeba by mieć pewność, że model używa
// tekstury nr 4
};

View File

@@ -266,8 +266,10 @@ class TDynamicObject
TButton btHeadSignals21; // oswietlenie czolowe - tyl
TButton btHeadSignals22;
TButton btHeadSignals23;
TSubModel *smMechanik0; // Ra: mechanik wbudowany w model jako submodel?
TSubModel *smMechanik1; // mechanik od strony sprzęgu 1
TButton btMechanik1;
TButton btMechanik2;
//TSubModel *smMechanik0; // Ra: mechanik wbudowany w model jako submodel?
//TSubModel *smMechanik1; // mechanik od strony sprzęgu 1
double enginevolume; // MC: pomocnicze zeby gladziej silnik buczal
int iAxles; // McZapkie: to potem mozna skasowac i zastapic iNumAxles
@@ -504,7 +506,7 @@ class TDynamicObject
void ParamSet(int what, int into);
int RouteWish(TTrack *tr); // zapytanie do AI, po którym segmencie skrzyżowania
// jechać
void DestinationSet(AnsiString to);
void DestinationSet(AnsiString to, AnsiString numer);
AnsiString TextureTest(AnsiString &name);
void OverheadTrack(float o);
double MED[9][8]; // lista zmiennych do debugowania hamulca ED

View File

@@ -60,7 +60,7 @@ AutoIncBuild=0
MajorVer=16
MinorVer=0
Release=1173
Build=478
Build=481
Debug=1
PreRelease=0
Special=0
@@ -72,7 +72,7 @@ CodePage=1250
[Version Info Keys]
CompanyName=EU07 Team
FileDescription=MaSzyna EU07-424
FileVersion=16.0.1173.478
FileVersion=16.0.1173.481
InternalName=DP+SPKS+asynch+python
LegalCopyright=
LegalTrademarks=

BIN
EU07.res

Binary file not shown.

View File

@@ -49,9 +49,9 @@ double Global::fLuminance = 1.0; // jasno
int Global::iReCompile = 0; // zwiêkszany, gdy trzeba odœwie¿yæ siatki
HWND Global::hWnd = NULL; // uchwyt okna
int Global::iCameraLast = -1;
AnsiString Global::asRelease = "16.0.1172.478";
AnsiString Global::asRelease = "16.0.1172.481";
AnsiString Global::asVersion =
"Compilation 2016-06-23, release " + Global::asRelease + "."; // tutaj, bo wysy³any
"Compilation 2016-08-24, release " + Global::asRelease + "."; // tutaj, bo wysy³any
int Global::iViewMode = 0; // co aktualnie widaæ: 0-kabina, 1-latanie, 2-sprzêgi, 3-dokumenty
int Global::iTextMode = 0; // tryb pracy wyœwietlacza tekstowego
int Global::iScreenMode[12] = {0, 0, 0, 0, 0, 0,

View File

@@ -4981,7 +4981,7 @@ var b:byte;
const Vepsilon=1e-5; Aepsilon=1e-3; //ASBSpeed=0.8;
begin
TotalCurrent:=0;
hvc:=Max0R(Max0R(PantFrontVolt,PantRearVolt),ElectricTraction.TractionVoltage);
hvc:=Max0R(Max0R(PantFrontVolt,PantRearVolt),ElectricTraction.TractionVoltage*0.9);
for b:=0 to 1 do //przekazywanie napiec
if ((Couplers[b].CouplingFlag and ctrain_power) = ctrain_power)or(((Couplers[b].CouplingFlag and ctrain_heating) = ctrain_heating)and(Heating)) then
begin

View File

@@ -100,7 +100,7 @@ end;
function TTrainParameters.CheckTrainLatency: real;
begin
if (LastStationLatency>1.0) or (LastStationLatency<-1.0) then
if (LastStationLatency>1.0) or (LastStationLatency<0) then
CheckTrainLatency:=LastStationLatency {spoznienie + lub do przodu - z tolerancja 1 min}
else
CheckTrainLatency:=0

View File

@@ -3139,7 +3139,7 @@ bool TTrain::Update()
dsbWejscie_na_drugi_uklad->Play(0, 0, 0);
}
}
// potem dorobic bufory, sprzegi jako RealSound.
if (TestFlag(mvOccupied->SoundFlag, sound_bufferclamp)) // zderzaki uderzaja o siebie
{
if (TestFlag(mvOccupied->SoundFlag, sound_loud))
@@ -4096,33 +4096,42 @@ bool TTrain::Update()
if (TestFlag(mvOccupied->SecuritySystem.Status, s_CAalarm) ||
TestFlag(mvOccupied->SecuritySystem.Status, s_SHPalarm))
{
if(dsbBuzzer)
{
dsbBuzzer->GetStatus(&stat);
if (!(stat & DSBSTATUS_PLAYING))
{
dsbBuzzer->Play(0, 0, DSBPLAY_LOOPING);
Console::BitsSet(1 << 14); // ustawienie bitu 16 na PoKeys
}
}
}
else
{
if(dsbBuzzer)
{
dsbBuzzer->GetStatus(&stat);
if (stat & DSBSTATUS_PLAYING)
{
dsbBuzzer->Stop();
Console::BitsClear(1 << 14); // ustawienie bitu 16 na PoKeys
}
}
}
}
else // wylaczone
{
btLampkaCzuwaka.TurnOff();
btLampkaSHP.TurnOff();
if(dsbBuzzer)
{
dsbBuzzer->GetStatus(&stat);
if (stat & DSBSTATUS_PLAYING)
{
dsbBuzzer->Stop();
Console::BitsClear(1 << 14); // ustawienie bitu 16 na PoKeys
}
}
}
//******************************************
@@ -5014,7 +5023,12 @@ bool TTrain::LoadMMediaFile(AnsiString asFileName)
// Parser->LoadStringToParse(asFile);
Parser->First();
str = "";
//Wartoœci domyœlne by nie wysypywa³o przy wybrakowanych mmd @240816 Stele
dsbPneumaticSwitch = TSoundsManager::GetFromName("silence1.wav", true);
dsbBufferClamp = TSoundsManager::GetFromName("en57_bufferclamp.wav", true);
dsbCouplerDetach = TSoundsManager::GetFromName("couplerdetach.wav", true);
dsbCouplerStretch = TSoundsManager::GetFromName("en57_couplerstretch.wav", true);
dsbCouplerAttach = TSoundsManager::GetFromName("couplerattach.wav", true);
while ((!Parser->EndOfFile) && (str != AnsiString("internaldata:")))
{
str = Parser->GetNextSymbol().LowerCase();
@@ -5109,16 +5123,23 @@ bool TTrain::LoadMMediaFile(AnsiString asFileName)
{
str = Parser->GetNextSymbol().LowerCase();
dsbCouplerAttach = TSoundsManager::GetFromName(str.c_str(), true);
dsbCouplerStretch = TSoundsManager::GetFromName(
"en57_couplerstretch.wav", true); // McZapkie-090503: PROWIZORKA!!!
}
else if (str == AnsiString("couplerstretch:")) // laczenie:
{
str = Parser->GetNextSymbol().LowerCase();
dsbCouplerStretch = TSoundsManager::GetFromName(str.c_str(), true); // McZapkie-090503: PROWIZORKA!!! "en57_couplerstretch.wav"
}
else if (str == AnsiString("couplerdetach:")) // rozlaczanie:
{
str = Parser->GetNextSymbol().LowerCase();
dsbCouplerDetach = TSoundsManager::GetFromName(str.c_str(), true);
dsbBufferClamp = TSoundsManager::GetFromName(
"en57_bufferclamp.wav", true); // McZapkie-090503: PROWIZORKA!!!
}
else if (str == AnsiString("bufferclamp:")) // laczenie:
{
str = Parser->GetNextSymbol().LowerCase();
dsbBufferClamp = TSoundsManager::GetFromName(str.c_str(), true); // McZapkie-090503: PROWIZORKA!!! "en57_bufferclamp.wav"
}
else if (str == AnsiString("ignition:"))
{ // odpalanie silnika
str = Parser->GetNextSymbol().LowerCase();

View File

@@ -26,6 +26,7 @@ http://mozilla.org/MPL/2.0/.
#include "DynObj.h"
#include "Ground.h"
#include "Event.h"
#include "Driver.h"
TTrackFollower::TTrackFollower()
{
@@ -132,7 +133,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary)
{
if (iSetFlag(iEventFlag, -1)) // zawsze zeruje flagę sprawdzenia, jak mechanik
// dosiądzie, to się nie wykona
if (Owner->Mechanik) // tylko dla jednego członu
if (Owner->Mechanik->Primary()) // tylko dla jednego członu
// if (TestFlag(iEventFlag,1)) //McZapkie-280503: wyzwalanie event tylko dla
// pojazdow z obsada
if (bPrimary && pCurrentTrack->evEvent1 &&
@@ -154,7 +155,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary)
{
if (iSetFlag(iEventFlag, -2)) // zawsze ustawia flagę sprawdzenia, jak mechanik
// dosiądzie, to się nie wykona
if (Owner->Mechanik) // tylko dla jednego członu
if (Owner->Mechanik->Primary()) // tylko dla jednego członu
// if (TestFlag(iEventFlag,2)) //sprawdzanie jest od razu w pierwszym
// warunku
if (bPrimary && pCurrentTrack->evEvent2 &&
@@ -173,7 +174,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary)
}
else // if (fDistance==0) //McZapkie-140602: wyzwalanie zdarzenia gdy pojazd stoi
{
if (Owner->Mechanik) // tylko dla jednego członu
if (Owner->Mechanik->Primary()) // tylko dla jednego członu
if (pCurrentTrack->evEvent0)
if (!pCurrentTrack->evEvent0->iQueued)
Global::AddToQuery(pCurrentTrack->evEvent0, Owner);