mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 13:29:18 +02:00
Merged branch mover_in_c++ into mover_in_c++
This commit is contained in:
314
Console.cpp
314
Console.cpp
@@ -114,7 +114,7 @@ int Console::iMode = 0;
|
||||
int Console::iConfig = 0;
|
||||
TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL};
|
||||
TLPT *Console::LPT = NULL;
|
||||
MWDComm *Console::MWD = NULL; // maciek001: obiekt dla MWD
|
||||
TMWDComm *Console::MWDComm = NULL; // maciek001: obiekt dla MWD
|
||||
int Console::iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez
|
||||
int Console::iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza
|
||||
|
||||
@@ -126,13 +126,14 @@ Console::Console()
|
||||
iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl]
|
||||
iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift]
|
||||
}
|
||||
MWDComm = NULL;
|
||||
};
|
||||
|
||||
Console::~Console()
|
||||
{
|
||||
delete PoKeys55[0];
|
||||
delete PoKeys55[1];
|
||||
delete MWD;
|
||||
delete MWDComm;
|
||||
};
|
||||
|
||||
void Console::ModeSet(int m, int h)
|
||||
@@ -177,17 +178,20 @@ int Console::On()
|
||||
PoKeys55[0] = NULL;
|
||||
}
|
||||
break;
|
||||
case 5: // maciek001: MWD OK
|
||||
MWD = new MWDComm();
|
||||
if (!(MWD->Open()))
|
||||
{
|
||||
delete MWD;
|
||||
iMode = 0;
|
||||
Global::iFeedbackMode = 0;
|
||||
WriteLog("COM Port not open!");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (Global::bMWDmasterEnable)
|
||||
{
|
||||
WriteLog("Opening ComPort");
|
||||
MWDComm = new TMWDComm();
|
||||
if (!(MWDComm->Open())) // jeżeli nie otwarł portu
|
||||
{
|
||||
WriteLog("ERROR: ComPort is NOT OPEN!");
|
||||
delete MWDComm;
|
||||
MWDComm = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
@@ -206,8 +210,8 @@ void Console::Off()
|
||||
PoKeys55[1] = NULL;
|
||||
delete LPT;
|
||||
LPT = NULL;
|
||||
delete MWD; // maciek001: zamykanie portu COM i takie tam inne ;)
|
||||
MWD = NULL;
|
||||
delete MWDComm;
|
||||
MWDComm = NULL;
|
||||
};
|
||||
|
||||
void Console::BitsSet(int mask, int entry)
|
||||
@@ -296,104 +300,57 @@ void Console::BitsUpdate(int mask)
|
||||
PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0);
|
||||
}
|
||||
break;
|
||||
case 5: // maciek001: MWD lampki i kontrolki
|
||||
/* out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp
|
||||
out4: stycz.liniowe, pezekaznikróżnicobwpomoc, nadmiarprzetw, roznicowy obw. gł,
|
||||
nadmiarsilniki, wylszybki, zanikprąduprzyjeździenaoporach, nadmiarsprezarki
|
||||
out5: HASLER */
|
||||
if (mask & 0x0001)
|
||||
if (iBits & 1)
|
||||
{
|
||||
MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też
|
||||
if (!MWD->bSHPstate)
|
||||
{
|
||||
MWD->bSHPstate = true;
|
||||
MWD->bPrzejazdSHP = true;
|
||||
}
|
||||
else
|
||||
MWD->bPrzejazdSHP = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
MWD->WriteDataBuff[4] &= ~(1 << 7);
|
||||
MWD->bPrzejazdSHP = false;
|
||||
MWD->bSHPstate = false;
|
||||
}
|
||||
if (mask & 0x0002)
|
||||
if (iBits & 2)
|
||||
MWD->WriteDataBuff[4] |= 1 << 6; // CA
|
||||
else
|
||||
MWD->WriteDataBuff[4] &= ~(1 << 6);
|
||||
if (mask & 0x0004)
|
||||
if (iBits & 4)
|
||||
MWD->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych
|
||||
else
|
||||
MWD->WriteDataBuff[4] &= ~(1 << 1);
|
||||
if (mask & 0x0008)
|
||||
if (iBits & 8)
|
||||
MWD->WriteDataBuff[5] |= 1 << 5; // wyłącznik szybki
|
||||
else
|
||||
MWD->WriteDataBuff[5] &= ~(1 << 5);
|
||||
if (mask & 0x0010)
|
||||
if (iBits & 0x10)
|
||||
MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silników trakcyjnych
|
||||
else
|
||||
MWD->WriteDataBuff[5] &= ~(1 << 4);
|
||||
if (mask & 0x0020)
|
||||
if (iBits & 0x20)
|
||||
MWD->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe
|
||||
else
|
||||
MWD->WriteDataBuff[5] &= ~(1 << 0);
|
||||
if (mask & 0x0040)
|
||||
if (iBits & 0x40)
|
||||
MWD->WriteDataBuff[4] |= 1 << 2; // poślizg
|
||||
else
|
||||
MWD->WriteDataBuff[4] &= ~(1 << 2);
|
||||
if (mask & 0x0080)
|
||||
if (iBits & 0x80)
|
||||
MWD->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++
|
||||
else
|
||||
MWD->WriteDataBuff[5] &= ~(1 << 2);
|
||||
if (mask & 0x0100)
|
||||
if (iBits & 0x100)
|
||||
MWD->WriteDataBuff[5] |= 1 << 7; // nadmiarowy sprężarki
|
||||
else
|
||||
MWD->WriteDataBuff[5] &= ~(1 << 7);
|
||||
if (mask & 0x0200)
|
||||
if (iBits & 0x200)
|
||||
MWD->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory
|
||||
else
|
||||
MWD->WriteDataBuff[2] &= ~(1 << 1);
|
||||
if (mask & 0x0400)
|
||||
if (iBits & 0x400)
|
||||
MWD->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch
|
||||
else
|
||||
MWD->WriteDataBuff[2] &= ~(1 << 2);
|
||||
if (mask & 0x0800)
|
||||
if (iBits & 0x800)
|
||||
MWD->WriteDataBuff[4] |= 1 << 0; // ogrzewanie pociągu
|
||||
else
|
||||
MWD->WriteDataBuff[4] &= ~(1 << 0);
|
||||
if (mask & 0x1000)
|
||||
if (iBits & 0x1000)
|
||||
MWD->bHamowanie = true; // hasler: ciśnienie w hamulcach HASLER rysik 2
|
||||
else
|
||||
MWD->bHamowanie = false;
|
||||
if (mask & 0x2000)
|
||||
if (iBits & 0x2000)
|
||||
MWD->WriteDataBuff[6] |=
|
||||
1 << 4; // hasler: prąd "na" silnikach HASLER rysik 3
|
||||
else
|
||||
MWD->WriteDataBuff[6] &= ~(1 << 4);
|
||||
if (mask & 0x4000)
|
||||
if (iBits & 0x4000)
|
||||
MWD->WriteDataBuff[6] |= 1 << 7; // brzęczyk SHP/CA
|
||||
else
|
||||
MWD->WriteDataBuff[6] &= ~(1 << 7);
|
||||
// if(mask & 0x8000) if(iBits & 0x8000) MWD->WriteDataBuff[1] |= 1<<7; (puste)
|
||||
// else MWD->WriteDataBuff[0] &= ~(1<<7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Global::bMWDmasterEnable)
|
||||
{
|
||||
// maciek001: MWDComm lampki i kontrolki
|
||||
// out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp
|
||||
// out4: stycz.liniowe, pezekaznikr??nicobwpomoc, nadmiarprzetw, roznicowy obw. g?, nadmiarsilniki, wylszybki, zanikpr?duprzyje?dzienaoporach, nadmiarsprezarki
|
||||
// out5: HASLER */
|
||||
if (mask & 0x0001) if (iBits & 1) {
|
||||
MWDComm->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też
|
||||
if (!MWDComm->bSHPstate) {
|
||||
MWDComm->bSHPstate = true;
|
||||
MWDComm->bPrzejazdSHP = true;
|
||||
}
|
||||
else MWDComm->bPrzejazdSHP = false;
|
||||
}
|
||||
else {
|
||||
MWDComm->WriteDataBuff[4] &= ~(1 << 7);
|
||||
MWDComm->bPrzejazdSHP = false;
|
||||
MWDComm->bSHPstate = false;
|
||||
}
|
||||
if (mask & 0x0002) if (iBits & 2) MWDComm->WriteDataBuff[4] |= 1 << 6; // CA
|
||||
else MWDComm->WriteDataBuff[4] &= ~(1 << 6);
|
||||
if (mask & 0x0004) if (iBits & 4) MWDComm->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych
|
||||
else MWDComm->WriteDataBuff[4] &= ~(1 << 1);
|
||||
if (mask & 0x0008) if (iBits & 8) MWDComm->WriteDataBuff[5] |= 1 << 5; // wy??cznik szybki
|
||||
else MWDComm->WriteDataBuff[5] &= ~(1 << 5);
|
||||
if (mask & 0x0010) if (iBits & 0x10) MWDComm->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silnik?w trakcyjnych
|
||||
else MWDComm->WriteDataBuff[5] &= ~(1 << 4);
|
||||
if (mask & 0x0020) if (iBits & 0x20) MWDComm->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe
|
||||
else MWDComm->WriteDataBuff[5] &= ~(1 << 0);
|
||||
if (mask & 0x0040) if (iBits & 0x40) MWDComm->WriteDataBuff[4] |= 1 << 2; // po?lizg
|
||||
else MWDComm->WriteDataBuff[4] &= ~(1 << 2);
|
||||
if (mask & 0x0080) if (iBits & 0x80) MWDComm->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++
|
||||
else MWDComm->WriteDataBuff[5] &= ~(1 << 2);
|
||||
if (mask & 0x0100) if (iBits & 0x100) MWDComm->WriteDataBuff[5] |= 1 << 7; // nadmiarowy spr??arki
|
||||
else MWDComm->WriteDataBuff[5] &= ~(1 << 7);
|
||||
if (mask & 0x0200) if (iBits & 0x200) MWDComm->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory
|
||||
else MWDComm->WriteDataBuff[2] &= ~(1 << 1);
|
||||
if (mask & 0x0400) if (iBits & 0x400) MWDComm->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch
|
||||
else MWDComm->WriteDataBuff[2] &= ~(1 << 2);
|
||||
if (mask & 0x0800) if (iBits & 0x800) MWDComm->WriteDataBuff[4] |= 1 << 0; // ogrzewanie poci?gu
|
||||
else MWDComm->WriteDataBuff[4] &= ~(1 << 0);
|
||||
if (mask & 0x1000) if (iBits & 0x1000) MWDComm->bHamowanie = true; // hasler: ci?nienie w hamulcach HASLER rysik 2
|
||||
else MWDComm->bHamowanie = false;
|
||||
if (mask & 0x2000) if (iBits & 0x2000) MWDComm->WriteDataBuff[6] |= 1 << 4; // hasler: pr?d "na" silnikach HASLER rysik 3
|
||||
else MWDComm->WriteDataBuff[6] &= ~(1 << 4);
|
||||
if (mask & 0x4000) if (iBits & 0x4000) MWDComm->WriteDataBuff[6] |= 1 << 7; // brz?czyk SHP/CA
|
||||
else MWDComm->WriteDataBuff[6] &= ~(1 << 7);
|
||||
//if(mask & 0x8000) if(iBits & 0x8000) MWDComm->WriteDataBuff[1] |= 1<<7; (puste)
|
||||
//else MWDComm->WriteDataBuff[0] &= ~(1<<7);
|
||||
}
|
||||
};
|
||||
|
||||
bool Console::Pressed(int x)
|
||||
@@ -431,61 +388,43 @@ void Console::ValueSet(int x, double y)
|
||||
WriteLog(" calibrated=" + std::to_string(temp));
|
||||
PoKeys55[0]->PWM(x, temp);
|
||||
}
|
||||
if (iMode == 5 && MWD) // pwm-y i prędkość
|
||||
{
|
||||
unsigned int iliczba;
|
||||
if (x == 0)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) +
|
||||
0.5); // zbiornik główny
|
||||
MWD->WriteDataBuff[12] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[11] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 1)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) +
|
||||
0.5); // przewód główny
|
||||
MWD->WriteDataBuff[10] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[9] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 2)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) +
|
||||
0.5); // cylinder hamulcowy
|
||||
MWD->WriteDataBuff[8] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[7] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 3)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) +
|
||||
0.5); // woltomierz WN
|
||||
MWD->WriteDataBuff[14] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[13] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 4)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||
0.5); // amp WN 1
|
||||
MWD->WriteDataBuff[16] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[15] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 5)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||
0.5); // amp WN 2
|
||||
MWD->WriteDataBuff[18] = (unsigned char)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[17] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 6)
|
||||
{
|
||||
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) +
|
||||
0.5); // amp WN 3
|
||||
MWD->WriteDataBuff[20] = (unsigned int)(iliczba >> 8);
|
||||
MWD->WriteDataBuff[19] = (unsigned char)iliczba;
|
||||
}
|
||||
else if (x == 7)
|
||||
MWD->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość
|
||||
}
|
||||
if (Global::bMWDmasterEnable)
|
||||
{
|
||||
unsigned int iliczba;
|
||||
switch (x)
|
||||
{
|
||||
case 0: iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + 0.5); // zbiornik g??wny
|
||||
MWDComm->WriteDataBuff[12] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[11] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 1: iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) + 0.5); // przew?d g??wny
|
||||
MWDComm->WriteDataBuff[10] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[9] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 2: iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + 0.5); // cylinder hamulcowy
|
||||
MWDComm->WriteDataBuff[8] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[7] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 3: iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + 0.5); // woltomierz WN
|
||||
MWDComm->WriteDataBuff[14] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[13] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 4: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 1
|
||||
MWDComm->WriteDataBuff[16] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[15] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 5: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 2
|
||||
MWDComm->WriteDataBuff[18] = (unsigned char)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[17] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 6: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 3
|
||||
MWDComm->WriteDataBuff[20] = (unsigned int)(iliczba >> 8);
|
||||
MWDComm->WriteDataBuff[19] = (unsigned char)iliczba;
|
||||
break;
|
||||
case 7: MWDComm->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void Console::Update()
|
||||
@@ -503,10 +442,11 @@ void Console::Update()
|
||||
Global::iPause |= 8; // tak???
|
||||
PoKeys55[0]->Connect(); // próba ponownego podłączenia
|
||||
}
|
||||
if (iMode == 5) // Obs?uga MWD OK
|
||||
{
|
||||
MWD->Run();
|
||||
}
|
||||
if (Global::bMWDmasterEnable)
|
||||
{
|
||||
if (MWDComm->GetMWDState()) MWDComm->Run();
|
||||
else MWDComm->Close();
|
||||
}
|
||||
};
|
||||
|
||||
float Console::AnalogGet(int x)
|
||||
@@ -531,25 +471,19 @@ float Console::AnalogCalibrateGet(int x)
|
||||
b +
|
||||
Global::fCalibrateIn[x][0];
|
||||
}
|
||||
if (iMode == 5 && MWD) // maciek001: obs?uga hamulc?w (wej?? analogowych) OK
|
||||
{
|
||||
float b = MWD->fAnalog[x];
|
||||
// b =
|
||||
// b*(Global::fMWDAnalogCalib[x][0]-Global::fMWDAnalogCalib[x][1])/Global::fMWDAnalogCalib[x][3]+Global::fMWDAnalogCalib[x][1]/Global::fMWDAnalogCalib[x][3];
|
||||
b = (b - Global::fMWDAnalogCalib[x][1]) /
|
||||
(Global::fMWDAnalogCalib[x][1] - Global::fMWDAnalogCalib[x][0]);
|
||||
switch (x)
|
||||
{
|
||||
case 0:
|
||||
return (b * 8 - 2);
|
||||
break;
|
||||
case 1:
|
||||
return (b * 10);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (Global::bMWDmasterEnable && Global::bMWDBreakEnable)
|
||||
{
|
||||
float b = (float)MWDComm->uiAnalog[x];
|
||||
b = (b - Global::fMWDAnalogInCalib[x][0]) / (Global::fMWDAnalogInCalib[x][1] - Global::fMWDAnalogInCalib[x][0]);
|
||||
switch (x)
|
||||
{
|
||||
case 0: return (b * 8 - 2);
|
||||
break;
|
||||
case 1: return (b * 10);
|
||||
break;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
return -1.0; // odcięcie
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
class TConsoleDevice; // urządzenie podłączalne za pomocą DLL
|
||||
class TPoKeys55;
|
||||
class TLPT;
|
||||
class MWDComm; // maciek001: dodana obsluga portu COM
|
||||
class TMWDComm; // maciek001: dodana obsluga portu COM
|
||||
|
||||
// klasy konwersji znaków wprowadzanych z klawiatury
|
||||
class TKeyTrans
|
||||
@@ -32,7 +32,7 @@ class Console
|
||||
static int iBits; // podstawowy zestaw lampek
|
||||
static TPoKeys55 *PoKeys55[2]; // może ich być kilka
|
||||
static TLPT *LPT;
|
||||
static MWDComm *MWD; // maciek001: na potrzeby MWD
|
||||
static TMWDComm *MWDComm; // maciek001: na potrzeby MWD
|
||||
static void BitsUpdate(int mask);
|
||||
// zmienne dla trybu "jednokabinowego", potrzebne do współpracy z pulpitem (PoKeys)
|
||||
// używając klawiatury, każdy pojazd powinien mieć własny stan przełączników
|
||||
|
||||
669
Console/MWD.cpp
669
Console/MWD.cpp
@@ -22,55 +22,62 @@ http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
|
||||
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
|
||||
|
||||
HANDLE hComm;
|
||||
|
||||
MWDComm::MWDComm() // konstruktor
|
||||
TMWDComm::TMWDComm() // konstruktor
|
||||
{
|
||||
MWDTime = 0;
|
||||
bSHPstate = false;
|
||||
bPrzejazdSHP = false;
|
||||
bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry!
|
||||
bKabina2 = false;
|
||||
bHamowanie = false;
|
||||
bCzuwak = false;
|
||||
MWDTime = 0;
|
||||
bSHPstate = false;
|
||||
bPrzejazdSHP = false;
|
||||
bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry!
|
||||
bKabina2 = false;
|
||||
bHamowanie = false;
|
||||
bCzuwak = false;
|
||||
|
||||
bRysik1H = false;
|
||||
bRysik1L = false;
|
||||
bRysik2H = false;
|
||||
bRysik2L = false;
|
||||
bRysik1H = false;
|
||||
bRysik1L = false;
|
||||
bRysik2H = false;
|
||||
bRysik2L = false;
|
||||
|
||||
bocznik = 0;
|
||||
nastawnik = 0;
|
||||
kierunek = 0;
|
||||
bnkMask = 0;
|
||||
bocznik = 0;
|
||||
nastawnik = 0;
|
||||
kierunek = 0;
|
||||
bnkMask = 0;
|
||||
|
||||
int i = 0;
|
||||
while (i < BYTETOWRITE)
|
||||
{
|
||||
if (i < BYTETOREAD)
|
||||
ReadDataBuff[i] = 0;
|
||||
WriteDataBuff[i] = 0;
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while (i < 6)
|
||||
{
|
||||
lastStateData[i] = 0;
|
||||
maskSwitch[i] = 0;
|
||||
bitSwitch[i] = 0;
|
||||
i++;
|
||||
}
|
||||
int i = 6;
|
||||
|
||||
while (i)
|
||||
{
|
||||
i--;
|
||||
lastStateData[i] = 0;
|
||||
maskData[i] = 0;
|
||||
maskSwitch[i] = 0;
|
||||
bitSwitch[i] = 0;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while (i<BYTETOWRITE)
|
||||
{
|
||||
if (i<BYTETOREAD)ReadDataBuff[i] = 0;
|
||||
WriteDataBuff[i] = 0;
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while (i<6)
|
||||
{
|
||||
lastStateData[i] = 0;
|
||||
maskSwitch[i] = 0;
|
||||
bitSwitch[i] = 0;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
MWDComm::~MWDComm() // destruktor
|
||||
TMWDComm::~TMWDComm() // destruktor
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
bool MWDComm::Open() // otwieranie portu COM
|
||||
bool TMWDComm::Open() // otwieranie portu COM
|
||||
{
|
||||
LPCSTR portId = Global::sMWDPortId.c_str();
|
||||
hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
|
||||
@@ -124,8 +131,12 @@ bool MWDComm::Open() // otwieranie portu COM
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool MWDComm::Close() // zamykanie portu COM
|
||||
bool TMWDComm::Close() // zamykanie portu COM
|
||||
{
|
||||
Global::bMWDmasterEnable = false; // główne włączenie portu!
|
||||
Global::bMWDInputEnable = false; // włącz wejścia
|
||||
Global::bMWDBreakEnable = false; // włącz wejścia analogowe
|
||||
|
||||
WriteLog("COM Port is closing...");
|
||||
int i = 0;
|
||||
while (i < BYTETOWRITE) // zerowanie danych...
|
||||
@@ -141,7 +152,7 @@ bool MWDComm::Close() // zamykanie portu COM
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
|
||||
inline bool TMWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
|
||||
{
|
||||
if (hComm > 0)
|
||||
return 1;
|
||||
@@ -149,26 +160,33 @@ inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych
|
||||
bool TMWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych
|
||||
{
|
||||
DWORD bytes_read;
|
||||
ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL);
|
||||
DWORD bytes_read;
|
||||
ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL);
|
||||
|
||||
fAnalog[0] =
|
||||
(float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) /
|
||||
Global::fMWDAnalogCalib[0][2]; // 4095.0f; //max wartosc wynikająca z rozdzielczości
|
||||
fAnalog[1] =
|
||||
(float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][2];
|
||||
fAnalog[2] =
|
||||
(float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][2];
|
||||
fAnalog[3] =
|
||||
(float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][2];
|
||||
CheckData();
|
||||
|
||||
return TRUE;
|
||||
if (Global::bMWDBreakEnable)
|
||||
{
|
||||
uiAnalog[0] = (ReadDataBuff[9] << 8) + ReadDataBuff[8];
|
||||
uiAnalog[1] = (ReadDataBuff[11] << 8) + ReadDataBuff[10];
|
||||
uiAnalog[2] = (ReadDataBuff[13] << 8) + ReadDataBuff[12];
|
||||
uiAnalog[3] = (ReadDataBuff[15] << 8) + ReadDataBuff[14];
|
||||
if (Global::bMWDdebugEnable && (Global::iMWDDebugMode & 1))
|
||||
{
|
||||
WriteLog("Main Break = " + to_string(uiAnalog[0]));
|
||||
WriteLog("Locomotiv Break = " + to_string(uiAnalog[1]));
|
||||
}
|
||||
if (Global::bMWDdebugEnable && (Global::iMWDDebugMode & 2))
|
||||
{
|
||||
WriteLog("Analog input 1 = " + to_string(uiAnalog[2]));
|
||||
WriteLog("Analog imput 2 = " + to_string(uiAnalog[3]));
|
||||
}
|
||||
}
|
||||
if (Global::bMWDInputEnable) CheckData();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool MWDComm::SendData() // wysyłanie danych
|
||||
bool TMWDComm::SendData() // wysyłanie danych
|
||||
{
|
||||
DWORD bytes_write;
|
||||
DWORD fdwEvtMask;
|
||||
@@ -178,29 +196,30 @@ bool MWDComm::SendData() // wysyłanie danych
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia
|
||||
bool TMWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia
|
||||
{
|
||||
MWDTime++;
|
||||
if (!(MWDTime % 5))
|
||||
{
|
||||
if (GetMWDState())
|
||||
{
|
||||
SendData();
|
||||
if (Global::bMWDInputDataEnable)
|
||||
ReadData();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteLog("Port COM: connection ERROR!");
|
||||
// może spróbować się połączyć znowu?
|
||||
return 0;
|
||||
}
|
||||
MWDTime = 0;
|
||||
}
|
||||
if (GetMWDState())
|
||||
{
|
||||
MWDTime++;
|
||||
if (!(MWDTime % Global::iMWDdivider))
|
||||
{
|
||||
MWDTime = 0;
|
||||
SendData();
|
||||
ReadData();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteLog("Port COM: connection ERROR!");
|
||||
Close();
|
||||
// może spróbować się połączyć znowu?
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
|
||||
void TMWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
|
||||
{
|
||||
int i = 0;
|
||||
while (i < 6)
|
||||
@@ -257,298 +276,238 @@ void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowa
|
||||
|
||||
// wciskanie przycisków klawiatury
|
||||
/*PORT0*/
|
||||
if (maskData[0] & 0x02 && lastStateData[0] & 0x02)
|
||||
KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
|
||||
else
|
||||
KeyBoard('M', 0); // monostabilny
|
||||
if (maskData[0] & 0x04 && lastStateData[0] & 0x04)
|
||||
{ // impuls załączający wyłącznik szybki
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard('M', 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyBoard('M', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
if (maskData[0] & 0x08 && lastStateData[0] & 0x08)
|
||||
KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
|
||||
else
|
||||
KeyBoard('N', 0); // monostabilny
|
||||
if (maskData[0] & 0x20 && lastStateData[0] & 0x20)
|
||||
{ // odblok nadmiarowego przetwornicy, ogrzewania poc.
|
||||
KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych
|
||||
KeyBoard('N', 1); // monostabilny
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyBoard('N', 0);
|
||||
KeyBoard(0x11, 0);
|
||||
}
|
||||
if (maskData[0] & 0x40 && lastStateData[0] & 0x40)
|
||||
KeyBoard('L', 1); // wył. styczników liniowych
|
||||
else
|
||||
KeyBoard('L', 0); // monostabilny
|
||||
if (maskData[0] & 0x80 && lastStateData[0] & 0x80)
|
||||
KeyBoard(0x20, 1); // kasowanie czuwaka/SHP
|
||||
else
|
||||
KeyBoard(0x20, 0); // kasowanie czuwaka/SHP
|
||||
if (maskData[0] & 0x02) if (lastStateData[0] & 0x02) KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
|
||||
else KeyBoard('M', 0); // monostabilny
|
||||
if (maskData[0] & 0x04) if (lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard('M', 1);
|
||||
}
|
||||
else {
|
||||
KeyBoard('M', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
if (maskData[0] & 0x08) if (lastStateData[0] & 0x08) KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
|
||||
else KeyBoard('N', 0); // monostabilny
|
||||
if (maskData[0] & 0x20) if (lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc.
|
||||
KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych
|
||||
KeyBoard('N', 1); // monostabilny
|
||||
}
|
||||
else {
|
||||
KeyBoard('N', 0);
|
||||
KeyBoard(0x11, 0);
|
||||
}
|
||||
if (maskData[0] & 0x40) if (lastStateData[0] & 0x40) KeyBoard('L', 1); // wył. styczników liniowych
|
||||
else KeyBoard('L', 0); // monostabilny
|
||||
if (maskData[0] & 0x80) if (lastStateData[0] & 0x80) KeyBoard(0x20, 1); // kasowanie czuwaka/SHP
|
||||
else KeyBoard(0x20, 0); // kasowanie czuwaka/SHP
|
||||
|
||||
/*PORT1*/
|
||||
|
||||
// puszczanie przycisku bistabilnego klawiatury
|
||||
if (maskSwitch[1] & 0x02)
|
||||
{
|
||||
if (bitSwitch[1] & 0x02)
|
||||
{
|
||||
KeyBoard('X', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('X', 0);
|
||||
maskSwitch[1] &= ~0x02;
|
||||
}
|
||||
if (maskSwitch[1] & 0x04)
|
||||
{
|
||||
if (bitSwitch[1] & 0x04)
|
||||
{
|
||||
KeyBoard('C', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('C', 0);
|
||||
maskSwitch[1] &= ~0x04;
|
||||
}
|
||||
if (maskSwitch[1] & 0x10)
|
||||
{
|
||||
if (bitSwitch[1] & 0x10)
|
||||
{
|
||||
KeyBoard('H', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('H', 0);
|
||||
maskSwitch[1] &= ~0x10;
|
||||
}
|
||||
if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40)
|
||||
{
|
||||
if (maskSwitch[1] & 0x20)
|
||||
KeyBoard(0x10, 0);
|
||||
if (maskSwitch[1] & 0x40)
|
||||
KeyBoard(0x11, 0);
|
||||
KeyBoard('B', 0);
|
||||
maskSwitch[1] &= ~0x60;
|
||||
}
|
||||
if (maskSwitch[1] & 0x80)
|
||||
{
|
||||
if (bitSwitch[1] & 0x80)
|
||||
{
|
||||
KeyBoard('F', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('F', 0);
|
||||
maskSwitch[1] &= ~0x80;
|
||||
}
|
||||
if (maskSwitch[1] & 0x02) {
|
||||
if (bitSwitch[1] & 0x02) {
|
||||
KeyBoard('X', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('X', 0);
|
||||
maskSwitch[1] &= ~0x02;
|
||||
}
|
||||
if (maskSwitch[1] & 0x04) {
|
||||
if (bitSwitch[1] & 0x04) {
|
||||
KeyBoard('C', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('C', 0);
|
||||
maskSwitch[1] &= ~0x04;
|
||||
}
|
||||
if (maskSwitch[1] & 0x10) {
|
||||
if (bitSwitch[1] & 0x10) {
|
||||
KeyBoard('H', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('H', 0);
|
||||
maskSwitch[1] &= ~0x10;
|
||||
}
|
||||
if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40) {
|
||||
if (maskSwitch[1] & 0x20) KeyBoard(0x10, 0);
|
||||
if (maskSwitch[1] & 0x40) KeyBoard(0x11, 0);
|
||||
KeyBoard('B', 0);
|
||||
maskSwitch[1] &= ~0x60;
|
||||
}
|
||||
if (maskSwitch[1] & 0x80) {
|
||||
if (bitSwitch[1] & 0x80) {
|
||||
KeyBoard('F', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('F', 0);
|
||||
maskSwitch[1] &= ~0x80;
|
||||
}
|
||||
|
||||
if (maskData[1] & 0x02 && lastStateData[1] & 0x02)
|
||||
{ // przetwornica
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('X', 1);
|
||||
maskSwitch[1] |= 0x02;
|
||||
bitSwitch[1] |= 0x02;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[1] |= 0x02;
|
||||
bitSwitch[1] &= ~0x02;
|
||||
KeyBoard('X', 1);
|
||||
}
|
||||
if (maskData[1] & 0x04 && lastStateData[1] & 0x04)
|
||||
{ // sprężarka
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('C', 1);
|
||||
maskSwitch[1] |= 0x04;
|
||||
bitSwitch[1] |= 0x04;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[1] |= 0x04;
|
||||
bitSwitch[1] &= ~0x04;
|
||||
KeyBoard('C', 1);
|
||||
}
|
||||
if (maskData[1] & 0x08 && lastStateData[1] & 0x08)
|
||||
KeyBoard('S', 1); // piasecznica
|
||||
else
|
||||
KeyBoard('S', 0); // monostabilny
|
||||
if (maskData[1] & 0x10 && lastStateData[1] & 0x10)
|
||||
{ // ogrzewanie składu
|
||||
KeyBoard(0x11, 1); // bistabilny
|
||||
KeyBoard('H', 1);
|
||||
maskSwitch[1] |= 0x10;
|
||||
bitSwitch[1] |= 0x10;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[1] |= 0x10;
|
||||
bitSwitch[1] &= ~0x10;
|
||||
KeyBoard('H', 1);
|
||||
}
|
||||
if (maskData[1] & 0x20 || maskData[1] & 0x40)
|
||||
{ // przełącznik hamowania
|
||||
if (lastStateData[1] & 0x20)
|
||||
{ // Shift+B
|
||||
KeyBoard(0x10, 1);
|
||||
maskSwitch[1] |= 0x20;
|
||||
}
|
||||
else if (lastStateData[1] & 0x40)
|
||||
{ // Ctrl+B
|
||||
KeyBoard(0x11, 1);
|
||||
maskSwitch[1] |= 0x40;
|
||||
}
|
||||
KeyBoard('B', 1);
|
||||
}
|
||||
|
||||
if (maskData[1] & 0x80 && lastStateData[1] & 0x80)
|
||||
{ // rozruch wysoki/niski
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('F', 1);
|
||||
maskSwitch[1] |= 0x80;
|
||||
bitSwitch[1] |= 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[1] |= 0x80;
|
||||
bitSwitch[1] &= ~0x80;
|
||||
KeyBoard('F', 1);
|
||||
}
|
||||
if (maskData[1] & 0x02) if (lastStateData[1] & 0x02) { // przetwornica
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('X', 1);
|
||||
maskSwitch[1] |= 0x02;
|
||||
bitSwitch[1] |= 0x02;
|
||||
}
|
||||
else {
|
||||
maskSwitch[1] |= 0x02;
|
||||
bitSwitch[1] &= ~0x02;
|
||||
KeyBoard('X', 1);
|
||||
}
|
||||
if (maskData[1] & 0x04) if (lastStateData[1] & 0x04) { // sprężarka
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('C', 1);
|
||||
maskSwitch[1] |= 0x04;
|
||||
bitSwitch[1] |= 0x04;
|
||||
}
|
||||
else {
|
||||
maskSwitch[1] |= 0x04;
|
||||
bitSwitch[1] &= ~0x04;
|
||||
KeyBoard('C', 1);
|
||||
}
|
||||
if (maskData[1] & 0x08) if (lastStateData[1] & 0x08) KeyBoard('S', 1); // piasecznica
|
||||
else KeyBoard('S', 0); // monostabilny
|
||||
if (maskData[1] & 0x10) if (lastStateData[1] & 0x10) { // ogrzewanie składu
|
||||
KeyBoard(0x11, 1); // bistabilny
|
||||
KeyBoard('H', 1);
|
||||
maskSwitch[1] |= 0x10;
|
||||
bitSwitch[1] |= 0x10;
|
||||
}
|
||||
else {
|
||||
maskSwitch[1] |= 0x10;
|
||||
bitSwitch[1] &= ~0x10;
|
||||
KeyBoard('H', 1);
|
||||
}
|
||||
if (maskData[1] & 0x20 || maskData[1] & 0x40) { // przełącznik hamowania
|
||||
if (lastStateData[1] & 0x20) { // Shift+B
|
||||
KeyBoard(0x10, 1);
|
||||
maskSwitch[1] |= 0x20;
|
||||
}
|
||||
else if (lastStateData[1] & 0x40) { // Ctrl+B
|
||||
KeyBoard(0x11, 1);
|
||||
maskSwitch[1] |= 0x40;
|
||||
}
|
||||
KeyBoard('B', 1);
|
||||
}
|
||||
|
||||
/*PORT2*/
|
||||
if (maskData[1] & 0x80) if (lastStateData[1] & 0x80) { // rozruch wysoki/niski
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('F', 1);
|
||||
maskSwitch[1] |= 0x80;
|
||||
bitSwitch[1] |= 0x80;
|
||||
}
|
||||
else {
|
||||
maskSwitch[1] |= 0x80;
|
||||
bitSwitch[1] &= ~0x80;
|
||||
KeyBoard('F', 1);
|
||||
}
|
||||
|
||||
if (maskSwitch[2] & 0x01)
|
||||
{
|
||||
if (bitSwitch[2] & 0x01)
|
||||
{
|
||||
KeyBoard('P', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('P', 0);
|
||||
maskSwitch[2] &= ~0x01;
|
||||
}
|
||||
if (maskSwitch[2] & 0x02)
|
||||
{
|
||||
if (bitSwitch[2] & 0x02)
|
||||
{
|
||||
KeyBoard('O', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('O', 0);
|
||||
maskSwitch[2] &= ~0x02;
|
||||
}
|
||||
|
||||
if (maskData[2] & 0x01 && lastStateData[2] & 0x01)
|
||||
{ // pantograf przedni
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('P', 1);
|
||||
maskSwitch[2] |= 0x01;
|
||||
bitSwitch[2] |= 0x01;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[2] |= 0x01;
|
||||
bitSwitch[2] &= ~0x01;
|
||||
KeyBoard('P', 1);
|
||||
}
|
||||
if (maskData[2] & 0x02 && lastStateData[2] & 0x02)
|
||||
{ // pantograf tylni
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('O', 1);
|
||||
maskSwitch[2] |= 0x02;
|
||||
bitSwitch[2] |= 0x02;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[2] |= 0x02;
|
||||
bitSwitch[2] &= ~0x02;
|
||||
KeyBoard('O', 1);
|
||||
}
|
||||
if (maskData[2] & 0x04 && lastStateData[2] & 0x04)
|
||||
{ // przyhamowanie przy poślizgu
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard(0x0D, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//PORT2
|
||||
if (maskSwitch[2] & 0x01) {
|
||||
if (bitSwitch[2] & 0x01) {
|
||||
KeyBoard('P', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('P', 0);
|
||||
maskSwitch[2] &= ~0x01;
|
||||
}
|
||||
if (maskSwitch[2] & 0x02) {
|
||||
if (bitSwitch[2] & 0x02) {
|
||||
KeyBoard('O', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('O', 0);
|
||||
maskSwitch[2] &= ~0x02;
|
||||
}
|
||||
|
||||
KeyBoard(0x0D, 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
/*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł
|
||||
KeyBoard(' ',0); // bistabilny
|
||||
KeyBoard(0x10,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x10,0);
|
||||
KeyBoard(' ',1);
|
||||
}
|
||||
if(maskData[2] & 0x10 && lastStateData[2] & 0x10) { // przyciemnienie świateł
|
||||
KeyBoard(' ',0); // bistabilny
|
||||
KeyBoard(0x11,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x11,0);
|
||||
KeyBoard(' ',1);
|
||||
}*/
|
||||
if (maskData[2] & 0x20 && lastStateData[2] & 0x20)
|
||||
KeyBoard(0x66, 1); // odluźniacz
|
||||
else
|
||||
KeyBoard(0x66, 0); // monostabilny
|
||||
if (maskData[2] & 0x40 && lastStateData[2] & 0x40)
|
||||
{ // syrena wysoka
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard('A', 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyBoard('A', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
if (maskData[2] & 0x80 && lastStateData[2] & 0x80)
|
||||
KeyBoard('A', 1); // syrena niska
|
||||
else
|
||||
KeyBoard('A', 0); // monostabilny
|
||||
|
||||
/*PORT3*/
|
||||
if (maskData[2] & 0x01) if (lastStateData[2] & 0x01) { // pantograf przedni
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('P', 1);
|
||||
maskSwitch[2] |= 0x01;
|
||||
bitSwitch[2] |= 0x01;
|
||||
}
|
||||
else {
|
||||
maskSwitch[2] |= 0x01;
|
||||
bitSwitch[2] &= ~0x01;
|
||||
KeyBoard('P', 1);
|
||||
}
|
||||
if (maskData[2] & 0x02) if (lastStateData[2] & 0x02) { // pantograf tylni
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('O', 1);
|
||||
maskSwitch[2] |= 0x02;
|
||||
bitSwitch[2] |= 0x02;
|
||||
}
|
||||
else {
|
||||
maskSwitch[2] |= 0x02;
|
||||
bitSwitch[2] &= ~0x02;
|
||||
KeyBoard('O', 1);
|
||||
}
|
||||
if (maskData[2] & 0x04) if (lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard(0x0D, 1);
|
||||
}
|
||||
else {
|
||||
|
||||
if (maskSwitch[3] & 0x01)
|
||||
{
|
||||
if (bitSwitch[3] & 0x01)
|
||||
{
|
||||
KeyBoard('J', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else
|
||||
KeyBoard('J', 0);
|
||||
maskSwitch[3] &= ~0x01;
|
||||
}
|
||||
KeyBoard(0x0D, 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
/*if(maskData[2] & 0x08) if (lastStateData[2] & 0x08){ // przyciemnienie świateł
|
||||
KeyBoard(' ',0); // bistabilny
|
||||
KeyBoard(0x10,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x10,0);
|
||||
KeyBoard(' ',1);
|
||||
}
|
||||
if(maskData[2] & 0x10) if (lastStateData[2] & 0x10) { // przyciemnienie świateł
|
||||
KeyBoard(' ',0); // bistabilny
|
||||
KeyBoard(0x11,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x11,0);
|
||||
KeyBoard(' ',1);
|
||||
}*/
|
||||
if (maskData[2] & 0x20) if (lastStateData[2] & 0x20) KeyBoard(0x66, 1); // odluźniacz
|
||||
else KeyBoard(0x66, 0); // monostabilny
|
||||
if (maskData[2] & 0x40) if (lastStateData[2] & 0x40) { // syrena wysoka
|
||||
KeyBoard(0x10, 1); // monostabilny
|
||||
KeyBoard('A', 1);
|
||||
}
|
||||
else {
|
||||
KeyBoard('A', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
if (maskData[2] & 0x80) if (lastStateData[2] & 0x80) KeyBoard('A', 1); // syrena niska
|
||||
else KeyBoard('A', 0); // monostabilny
|
||||
|
||||
if (maskData[3] & 0x01 && lastStateData[3] & 0x01)
|
||||
{ // bateria
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('J', 1);
|
||||
maskSwitch[3] |= 0x01;
|
||||
bitSwitch[3] |= 0x01;
|
||||
}
|
||||
else
|
||||
{
|
||||
maskSwitch[3] |= 0x01;
|
||||
bitSwitch[3] &= ~0x01;
|
||||
KeyBoard('J', 1);
|
||||
}
|
||||
|
||||
//PORT3
|
||||
|
||||
if (maskSwitch[3] & 0x01) {
|
||||
if (bitSwitch[3] & 0x01) {
|
||||
KeyBoard('J', 0);
|
||||
KeyBoard(0x10, 0);
|
||||
}
|
||||
else KeyBoard('J', 0);
|
||||
maskSwitch[3] &= ~0x01;
|
||||
}
|
||||
|
||||
if (maskData[3] & 0x01) if (lastStateData[3] & 0x01) { // bateria
|
||||
KeyBoard(0x10, 1); // bistabilny
|
||||
KeyBoard('J', 1);
|
||||
maskSwitch[3] |= 0x01;
|
||||
bitSwitch[3] |= 0x01;
|
||||
}
|
||||
else {
|
||||
maskSwitch[3] |= 0x01;
|
||||
bitSwitch[3] &= ~0x01;
|
||||
KeyBoard('J', 1);
|
||||
}
|
||||
|
||||
/*
|
||||
if(maskData[3] & 0x04 && lastStateData[1] & 0x04) { KeyBoard(0x10,1);
|
||||
@@ -790,7 +749,7 @@ void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowa
|
||||
WriteDataBuff[6] &= ~(1 << 3);
|
||||
}
|
||||
|
||||
void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
|
||||
void TMWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
|
||||
{
|
||||
INPUT ip;
|
||||
// Set up a generic keyboard event.
|
||||
|
||||
@@ -19,48 +19,53 @@ http://mozilla.org/MPL/2.0/.
|
||||
#define MWDH
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#define BYTETOWRITE 31 // ilość bajtów przesyłanych z MaSzyny
|
||||
#define BYTETOREAD 16 // ilość bajtów przesyłanych do MaSzyny
|
||||
|
||||
typedef unsigned char BYTE;
|
||||
typedef unsigned long DWORD;
|
||||
|
||||
class MWDComm
|
||||
class TMWDComm
|
||||
{
|
||||
private:
|
||||
int MWDTime; //
|
||||
char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6];
|
||||
int bocznik, nastawnik, kierunek;
|
||||
char bnkMask;
|
||||
private:
|
||||
int MWDTime; //
|
||||
char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6];
|
||||
int bocznik, nastawnik, kierunek;
|
||||
char bnkMask;
|
||||
|
||||
bool ReadData(); // BYTE *pReadDataBuff);
|
||||
bool SendData(); // BYTE *pWriteDataBuff);
|
||||
void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA
|
||||
void KeyBoard(int key, bool s);
|
||||
bool ReadData(); //BYTE *pReadDataBuff);
|
||||
bool SendData(); //BYTE *pWriteDataBuff);
|
||||
void CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA
|
||||
void KeyBoard(int key, bool s);
|
||||
|
||||
bool bRysik1H;
|
||||
bool bRysik1L;
|
||||
bool bRysik2H;
|
||||
bool bRysik2L;
|
||||
//void CheckData2();
|
||||
|
||||
public:
|
||||
bool Open(); // Otwarcie portu
|
||||
bool Close(); // Zamknięcie portu
|
||||
bool Run(); // Obsługa portu
|
||||
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
|
||||
bool bRysik1H;
|
||||
bool bRysik1L;
|
||||
bool bRysik2H;
|
||||
bool bRysik2L;
|
||||
|
||||
// zmienne do rysików HASLERA
|
||||
bool bSHPstate;
|
||||
bool bPrzejazdSHP;
|
||||
bool bKabina1;
|
||||
bool bKabina2;
|
||||
bool bHamowanie;
|
||||
bool bCzuwak;
|
||||
public:
|
||||
bool Open(); // Otwarcie portu
|
||||
bool Close(); // Zamknięcie portu
|
||||
bool Run(); // Obsługa portu
|
||||
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
|
||||
|
||||
float fAnalog[4]; // trzymanie danych z wejść analogowych
|
||||
// zmienne do rysików HASLERA
|
||||
bool bSHPstate;
|
||||
bool bPrzejazdSHP;
|
||||
bool bKabina1;
|
||||
bool bKabina2;
|
||||
bool bHamowanie;
|
||||
bool bCzuwak;
|
||||
|
||||
unsigned int uiAnalog[4]; // trzymanie danych z wejść analogowych
|
||||
|
||||
BYTE ReadDataBuff[17]; // bufory danych
|
||||
BYTE WriteDataBuff[31];
|
||||
BYTE ReadDataBuff[BYTETOREAD]; //17]; // bufory danych
|
||||
BYTE WriteDataBuff[BYTETOWRITE]; //31];
|
||||
|
||||
MWDComm(); // konstruktor
|
||||
~MWDComm(); // destruktor
|
||||
TMWDComm(); // konstruktor
|
||||
~TMWDComm(); // destruktor
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
12
DynObj.cpp
12
DynObj.cpp
@@ -4633,8 +4633,13 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
|
||||
*/
|
||||
if( true == pAnimations.empty() )
|
||||
{ // Ra: tworzenie tabeli animacji, jeśli jeszcze nie było
|
||||
if (!iAnimations) // jeśli nie podano jawnie, ile ma być animacji
|
||||
/*
|
||||
// disabled as default animation amounts are no longer supported
|
||||
if( !iAnimations ) {
|
||||
// jeśli nie podano jawnie, ile ma być animacji
|
||||
iAnimations = 28; // tyle było kiedyś w każdym pojeździe (2 wiązary wypadły)
|
||||
}
|
||||
*/
|
||||
/* //pojazd może mieć pantograf do innych celów niż napęd
|
||||
if (MoverParameters->EnginePowerSource.SourceType!=CurrentCollector)
|
||||
{//nie będzie pantografów, to się trochę uprości
|
||||
@@ -5463,6 +5468,11 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
|
||||
} while( ( token != "" )
|
||||
&& ( false == Stop_InternalData ) );
|
||||
|
||||
if( !iAnimations ) {
|
||||
// if the animations weren't defined the model is likely to be non-functional. warrants a warning.
|
||||
ErrorLog( "Animations tag is missing from the .mmd file \"" + asFileName + "\"" );
|
||||
}
|
||||
|
||||
if (mdModel)
|
||||
mdModel->Init(); // obrócenie modelu oraz optymalizacja, również zapisanie
|
||||
// binarnego
|
||||
|
||||
2
DynObj.h
2
DynObj.h
@@ -185,7 +185,7 @@ private:
|
||||
|
||||
private: // zmienne i metody do animacji submodeli; Ra: sprzatam animacje w pojeździe
|
||||
public: // tymczasowo udostępnione do wyszukiwania drutu
|
||||
int iAnimType[ANIM_TYPES]; // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wózki,5-pantografy,6-tłoki
|
||||
int iAnimType[ ANIM_TYPES ]; // 0-osie,1-drzwi,2-obracane,3-zderzaki,4-wózki,5-pantografy,6-tłoki
|
||||
private:
|
||||
int iAnimations; // liczba obiektów animujących
|
||||
/*
|
||||
|
||||
@@ -317,6 +317,7 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
{
|
||||
if (token.find('#') != std::string::npos)
|
||||
token.erase(token.find('#')); // obcięcie unikatowości
|
||||
win1250_to_ascii( token ); // get rid of non-ascii chars
|
||||
bEnabled = false; // nie do kolejki (dla SetVelocity też, ale jak jest do toru
|
||||
// dowiązany)
|
||||
Params[6].asCommand = cm_PassengerStopPoint;
|
||||
|
||||
264
Globals.cpp
264
Globals.cpp
@@ -74,7 +74,9 @@ int Global::iSegmentsRendered = 90; // ilość segmentów do regulacji wydajnoś
|
||||
TCamera *Global::pCamera = NULL; // parametry kamery
|
||||
TDynamicObject *Global::pUserDynamic = NULL; // pojazd użytkownika, renderowany bez trzęsienia
|
||||
bool Global::bSmudge = false; // czy wyświetlać smugę, a pojazd użytkownika na końcu
|
||||
/*
|
||||
std::string Global::asTranscript[5]; // napisy na ekranie (widoczne)
|
||||
*/
|
||||
TTranscripts Global::tranTexts; // obiekt obsługujący stenogramy dźwięków na ekranie
|
||||
|
||||
// parametry scenerii
|
||||
@@ -189,17 +191,20 @@ int Global::iBpp = 32; // chyba już nie używa się kart, na których 16bpp co
|
||||
//randomizacja
|
||||
std::mt19937 Global::random_engine = std::mt19937(std::time(NULL));
|
||||
// maciek001: konfiguracja wstępna portu COM
|
||||
bool Global::bMWDdebugEnable = false;
|
||||
bool Global::bMWDInputDataEnable = false;
|
||||
unsigned int Global::iMWDBaudrate = 500000;
|
||||
std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy - na razie nie działa
|
||||
bool Global::bMWDBreakEnable = false; // zmienić na FALSE!!! jak już będzie działać wczytywanie z *.ini
|
||||
double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być -1)
|
||||
double Global::fMWDzg[2] = {0.9, 1023};
|
||||
double Global::fMWDpg[2] = {0.8, 1023};
|
||||
double Global::fMWDph[2] = {0.6, 1023};
|
||||
double Global::fMWDvolt[2] = {4000, 1023};
|
||||
double Global::fMWDamp[2] = {800, 1023};
|
||||
bool Global::bMWDmasterEnable = false; // główne włączenie portu!
|
||||
bool Global::bMWDdebugEnable = false; // włącz dodawanie do logu
|
||||
int Global::iMWDDebugMode = 0; // co ma wyświetlać w logu
|
||||
std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy
|
||||
unsigned long int Global::iMWDBaudrate = 9600; // prędkość transmisji danych
|
||||
bool Global::bMWDInputEnable = false; // włącz wejścia
|
||||
bool Global::bMWDBreakEnable = false; // włącz wejścia analogowe
|
||||
double Global::fMWDAnalogInCalib[4][2] = { { 0, 1023 },{ 0, 1023 },{ 0, 1023 },{ 0, 1023 } }; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być)
|
||||
double Global::fMWDzg[2] = { 0.9, 1023 };
|
||||
double Global::fMWDpg[2] = { 0.8, 1023 };
|
||||
double Global::fMWDph[2] = { 0.6, 1023 };
|
||||
double Global::fMWDvolt[2] = { 4000, 1023 };
|
||||
double Global::fMWDamp[2] = { 800, 1023 };
|
||||
int Global::iMWDdivider = 5;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -804,93 +809,94 @@ void Global::ConfigParse(cParser &Parser)
|
||||
>> Global::Background[2]; // b
|
||||
}
|
||||
// maciek001: ustawienia MWD
|
||||
else if (token == "mwddebug")
|
||||
{ // czy włączyć obslugę hamulców
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDdebugEnable = (token == "yes");
|
||||
}
|
||||
else if (token == "comportname")
|
||||
{
|
||||
Parser.getTokens();
|
||||
Parser >> sMWDPortId;
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("PortName " + sMWDPortId);
|
||||
}
|
||||
else if (token == "mwdbaudrate")
|
||||
{ // pobierz prędkość transmisji danych
|
||||
Parser.getTokens(1, false);
|
||||
Parser >> iMWDBaudrate;
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("PortName " + to_string(iMWDBaudrate));
|
||||
}
|
||||
else if (token == "mwdbreakenable")
|
||||
{ // czy włączyć obsługę hamulców
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDBreakEnable = (token == "yes");
|
||||
}
|
||||
else if (token == "mwdinputenable")
|
||||
{
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDInputDataEnable = (token == "yes");
|
||||
}
|
||||
else if (token == "mwdbreak") // wartość max dla potencjometru hamulca zasadniczego
|
||||
{
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
int i = stol_def(token, -1); // numer wej�cia
|
||||
if ((i >= 0) && (i <= 3))
|
||||
{
|
||||
Parser.getTokens(3, false);
|
||||
Parser >> fMWDAnalogCalib[i][0] // max -> 2^16 -1
|
||||
>> fMWDAnalogCalib[i][1] // min -> 0
|
||||
>>
|
||||
fMWDAnalogCalib[i][2]; // rozdzielczość -> 255 maksymalna możliwa wartość z ADC
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("Break settings " + to_string(i) + ": " +
|
||||
to_string(fMWDAnalogCalib[i][0]) + " " +
|
||||
to_string(fMWDAnalogCalib[i][1]) + " " +
|
||||
to_string(fMWDAnalogCalib[i][2]));
|
||||
}
|
||||
}
|
||||
else if (token == "mwdzbiornikglowny")
|
||||
{
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDzg[0] >> fMWDzg[1];
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("AirTank settings: " + to_string(fMWDzg[0]) + " " + to_string(fMWDzg[1]));
|
||||
}
|
||||
else if (token == "mwdprzewodglowny")
|
||||
{
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDpg[0] >> fMWDpg[1];
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + " " +
|
||||
to_string(fMWDpg[1]));
|
||||
}
|
||||
else if (token == "mwdcylinderhamulcowy")
|
||||
{
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDph[0] >> fMWDph[1];
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + " " + to_string(fMWDph[1]));
|
||||
}
|
||||
else if (token == "mwdwoltomierzwn")
|
||||
{
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDvolt[0] >> fMWDvolt[1];
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("Volt settings: " + to_string(fMWDvolt[0]) + " " + to_string(fMWDvolt[1]));
|
||||
}
|
||||
else if (token == "mwdamperomierzwn")
|
||||
{
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDamp[0] >> fMWDamp[1];
|
||||
if (bMWDdebugEnable)
|
||||
WriteLog("Amp settings: " + to_string(fMWDamp[0]) + " " + to_string(fMWDamp[1]));
|
||||
}
|
||||
else if (token == "mwdmasterenable") { // główne włączenie maszyny!
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDmasterEnable = (token == "yes");
|
||||
if (bMWDdebugEnable) WriteLog("SerialPort Master Enable");
|
||||
}
|
||||
else if (token == "mwddebugenable") { // logowanie pracy
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDdebugEnable = (token == "yes");
|
||||
if (bMWDdebugEnable) WriteLog("MWD Debug Mode On");
|
||||
}
|
||||
else if (token == "mwddebugmode") { // co ma być debugowane?
|
||||
Parser.getTokens(1, false);
|
||||
Parser >> iMWDDebugMode;
|
||||
if (bMWDdebugEnable) WriteLog("Debug Mode = " + to_string(iMWDDebugMode));
|
||||
}
|
||||
else if (token == "mwdcomportname") { // nazwa portu COM
|
||||
Parser.getTokens();
|
||||
Parser >> sMWDPortId;
|
||||
if (bMWDdebugEnable) WriteLog("PortName " + sMWDPortId);
|
||||
}
|
||||
else if (token == "mwdbaudrate") { // prędkość transmisji danych
|
||||
Parser.getTokens(1, false);
|
||||
Parser >> iMWDBaudrate;
|
||||
if (bMWDdebugEnable) WriteLog("Baud rate = " + to_string((int)(iMWDBaudrate / 1000)) + (" kbps"));
|
||||
}
|
||||
else if (token == "mwdinputenable") { // włącz wejścia
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDInputEnable = (token == "yes");
|
||||
if (bMWDdebugEnable && bMWDInputEnable) WriteLog("MWD Input Enable");
|
||||
}
|
||||
else if (token == "mwdbreakenable") { // włącz obsługę hamulców
|
||||
Parser.getTokens();
|
||||
Parser >> token;
|
||||
bMWDBreakEnable = (token == "yes");
|
||||
if (bMWDdebugEnable && bMWDBreakEnable) WriteLog("MWD Break Enable");
|
||||
}
|
||||
else if (token == "mwdmainbreakconfig") { // ustawienia hamulca zespolonego
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDAnalogInCalib[0][0] >> fMWDAnalogInCalib[0][1];
|
||||
if (bMWDdebugEnable) WriteLog("Main break settings: " + to_string(fMWDAnalogInCalib[0][0]) + (" ") + to_string(fMWDAnalogInCalib[0][1]));
|
||||
}
|
||||
else if (token == "mwdlocbreakconfig") { // ustawienia hamulca lokomotywy
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDAnalogInCalib[1][0] >> fMWDAnalogInCalib[1][1];
|
||||
if (bMWDdebugEnable) WriteLog("Locomotive break settings: " + to_string(fMWDAnalogInCalib[1][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[1][1]));
|
||||
}
|
||||
else if (token == "mwdanalogin1config") { // ustawienia hamulca zespolonego
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDAnalogInCalib[2][0] >> fMWDAnalogInCalib[2][1];
|
||||
if (bMWDdebugEnable) WriteLog("Analog input 1 settings: " + to_string(fMWDAnalogInCalib[2][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[2][1]));
|
||||
}
|
||||
else if (token == "mwdanalogin2config") { // ustawienia hamulca lokomotywy
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDAnalogInCalib[3][0] >> fMWDAnalogInCalib[3][1];
|
||||
if (bMWDdebugEnable) WriteLog("Analog input 2 settings: " + to_string(fMWDAnalogInCalib[3][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[3][1]));
|
||||
}
|
||||
else if (token == "mwdmaintankpress") { // max ciśnienie w zbiorniku głownym i rozdzielczość
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDzg[0] >> fMWDzg[1];
|
||||
if (bMWDdebugEnable) WriteLog("MainAirTank settings: " + to_string(fMWDzg[0]) + to_string(" ") + to_string(fMWDzg[1]));
|
||||
}
|
||||
else if (token == "mwdmainpipepress") { // max ciśnienie w przewodzie głownym i rozdzielczość
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDpg[0] >> fMWDpg[1];
|
||||
if (bMWDdebugEnable) WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + to_string(" ") + to_string(fMWDpg[1]));
|
||||
}
|
||||
else if (token == "mwdbreakpress") { // max ciśnienie w hamulcach i rozdzielczość
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDph[0] >> fMWDph[1];
|
||||
if (bMWDdebugEnable) WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + to_string(" ") + to_string(fMWDph[1]));
|
||||
}
|
||||
else if (token == "mwdhivoltmeter") { // max napięcie na woltomierzu WN
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDvolt[0] >> fMWDvolt[1];
|
||||
if (bMWDdebugEnable) WriteLog("VoltMeter settings: " + to_string(fMWDvolt[0]) + to_string(" ") + to_string(fMWDvolt[1]));
|
||||
}
|
||||
else if (token == "mwdhiampmeter") {
|
||||
Parser.getTokens(2, false);
|
||||
Parser >> fMWDamp[0] >> fMWDamp[1];
|
||||
if (bMWDdebugEnable) WriteLog("Amp settings: " + to_string(fMWDamp[0]) + to_string(" ") + to_string(fMWDamp[1]));
|
||||
}
|
||||
else if (token == "mwddivider") {
|
||||
Parser.getTokens(1, false);
|
||||
Parser >> iMWDdivider;
|
||||
}
|
||||
} while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile)
|
||||
// na koniec trochę zależności
|
||||
if (!bLoadTraction) // wczytywanie drutów i słupów
|
||||
@@ -1130,6 +1136,7 @@ bool Global::DoEvents()
|
||||
|
||||
TTranscripts::TTranscripts()
|
||||
{
|
||||
/*
|
||||
iCount = 0; // brak linijek do wyświetlenia
|
||||
iStart = 0; // wypełniać od linijki 0
|
||||
for (int i = 0; i < MAX_TRANSCRIPTS; ++i)
|
||||
@@ -1137,19 +1144,35 @@ TTranscripts::TTranscripts()
|
||||
aLines[i].fHide = -1.0; // wolna pozycja (czas symulacji, 360.0 to doba)
|
||||
aLines[i].iNext = -1; // nie ma kolejnej
|
||||
}
|
||||
*/
|
||||
fRefreshTime = 360.0; // wartośc zaporowa
|
||||
};
|
||||
TTranscripts::~TTranscripts(){};
|
||||
void TTranscripts::AddLine(char const *txt, float show, float hide, bool it)
|
||||
|
||||
void TTranscripts::AddLine(std::string const &txt, float show, float hide, bool it)
|
||||
{ // dodanie linii do tabeli, (show) i (hide) w [s] od aktualnego czasu
|
||||
if (show == hide)
|
||||
return; // komentarz jest ignorowany
|
||||
show = Global::fTimeAngleDeg + show / 240.0; // jeśli doba to 360, to 1s będzie równe 1/240
|
||||
hide = Global::fTimeAngleDeg + hide / 240.0;
|
||||
|
||||
TTranscript transcript;
|
||||
transcript.asText = txt;
|
||||
transcript.fShow = show;
|
||||
transcript.fHide = hide;
|
||||
transcript.bItalic = it;
|
||||
aLines.emplace_back( transcript );
|
||||
// set the next refresh time while at it
|
||||
// TODO, TBD: sort the transcript lines? in theory, they should be coming arranged in the right order anyway
|
||||
// short of cases with multiple sounds overleaping
|
||||
fRefreshTime = aLines.front().fHide;
|
||||
/*
|
||||
int i = iStart, j, k; // od czegoś trzeba zacząć
|
||||
while ((aLines[i].iNext >= 0) ? (aLines[aLines[i].iNext].fShow <= show) :
|
||||
false) // póki nie koniec i wcześniej puszczane
|
||||
i = aLines[i].iNext; // przejście do kolejnej linijki
|
||||
*/
|
||||
/*
|
||||
//(i) wskazuje na linię, po której należy wstawić dany tekst, chyba że
|
||||
while (txt ? *txt : false)
|
||||
for (j = 0; j < MAX_TRANSCRIPTS; ++j)
|
||||
@@ -1176,11 +1199,13 @@ void TTranscripts::AddLine(char const *txt, float show, float hide, bool it)
|
||||
fRefreshTime = show; // to odświeżyć wcześniej
|
||||
break; // więcej już nic
|
||||
}
|
||||
*/
|
||||
};
|
||||
void TTranscripts::Add(char const *txt, float len, bool backgorund)
|
||||
void TTranscripts::Add(std::string const &txt, float len, bool backgorund)
|
||||
{ // dodanie tekstów, długość dźwięku, czy istotne
|
||||
if (!txt)
|
||||
if (true == txt.empty())
|
||||
return; // pusty tekst
|
||||
/*
|
||||
int i = 0, j = int(0.5 + 10.0 * len); //[0.1s]
|
||||
if (*txt == '[')
|
||||
{ // powinny być dwa nawiasy
|
||||
@@ -1197,14 +1222,44 @@ void TTranscripts::Add(char const *txt, float len, bool backgorund)
|
||||
++txt; // pominięcie drugiego ]
|
||||
}
|
||||
}
|
||||
AddLine(txt, 0.1 * i, 0.1 * j, false);
|
||||
*/
|
||||
std::string asciitext{ txt }; win1250_to_ascii( asciitext ); // TODO: launch relevant conversion table based on language
|
||||
cParser parser( asciitext );
|
||||
while( true == parser.getTokens( 3, false, "[]\n" ) ) {
|
||||
|
||||
float begin, end;
|
||||
std::string transcript;
|
||||
parser
|
||||
>> begin
|
||||
>> end
|
||||
>> transcript;
|
||||
AddLine( transcript, 0.10 * begin, 0.12 * end, false );
|
||||
}
|
||||
// try to handle malformed(?) cases with no show/hide times
|
||||
std::string transcript; parser >> transcript;
|
||||
while( false == transcript.empty() ) {
|
||||
|
||||
WriteLog( "Transcript text with no display/hide times: \"" + transcript + "\"" );
|
||||
AddLine( transcript, 0.0, 0.12 * transcript.size(), false );
|
||||
transcript = ""; parser >> transcript;
|
||||
}
|
||||
};
|
||||
void TTranscripts::Update()
|
||||
{ // usuwanie niepotrzebnych (nie częściej niż 10 razy na sekundę)
|
||||
if (fRefreshTime > Global::fTimeAngleDeg)
|
||||
if( Global::fTimeAngleDeg < fRefreshTime )
|
||||
return; // nie czas jeszcze na zmiany
|
||||
// czas odświeżenia można ustalić wg tabelki, kiedy coś się w niej zmienia
|
||||
fRefreshTime = Global::fTimeAngleDeg + 360.0; // wartość zaporowa
|
||||
// fRefreshTime = Global::fTimeAngleDeg + 360.0; // wartość zaporowa
|
||||
|
||||
while( ( false == aLines.empty() )
|
||||
&& ( Global::fTimeAngleDeg >= aLines.front().fHide ) ) {
|
||||
// remove expired lines
|
||||
aLines.pop_front();
|
||||
}
|
||||
// update next refresh time
|
||||
if( false == aLines.empty() ) { fRefreshTime = aLines.front().fHide; }
|
||||
else { fRefreshTime = 360.0f; }
|
||||
/*
|
||||
int i = iStart, j = -1; // od czegoś trzeba zacząć
|
||||
bool change = false; // czy zmieniać napisy?
|
||||
do
|
||||
@@ -1247,6 +1302,7 @@ void TTranscripts::Update()
|
||||
for (++j; j < 5; ++j)
|
||||
Global::asTranscript[j] = ""; // i czyszczenie nieużywanych linijek
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
// Ra: tymczasowe rozwiązanie kwestii zagranicznych (czeskich) napisów
|
||||
|
||||
45
Globals.h
45
Globals.h
@@ -130,21 +130,31 @@ class TTranscript
|
||||
int iNext; // następna używana linijka, żeby nie przestawiać fizycznie tabeli
|
||||
};
|
||||
|
||||
/*
|
||||
#define MAX_TRANSCRIPTS 30
|
||||
*/
|
||||
class TTranscripts
|
||||
{ // klasa obsługująca napisy do dźwięków
|
||||
/*
|
||||
TTranscript aLines[MAX_TRANSCRIPTS]; // pozycje na napisy do wyświetlenia
|
||||
*/
|
||||
public:
|
||||
std::deque<TTranscript> aLines;
|
||||
/*
|
||||
int iCount; // liczba zajętych pozycji
|
||||
int iStart; // pierwsza istotna pozycja w tabeli, żeby sortować przestawiając numerki
|
||||
*/
|
||||
private:
|
||||
float fRefreshTime;
|
||||
|
||||
public:
|
||||
TTranscripts();
|
||||
~TTranscripts();
|
||||
void AddLine(char const *txt, float show, float hide, bool it);
|
||||
void Add(char const *txt, float len,
|
||||
bool backgorund = false); // dodanie tekstów, długość dźwięku, czy istotne
|
||||
void Update(); // usuwanie niepotrzebnych (ok. 10 razy na sekundę)
|
||||
void AddLine(std::string const &txt, float show, float hide, bool it);
|
||||
// dodanie tekstów, długość dźwięku, czy istotne
|
||||
void Add(std::string const &txt, float len, bool background = false);
|
||||
// usuwanie niepotrzebnych (ok. 10 razy na sekundę)
|
||||
void Update();
|
||||
};
|
||||
|
||||
class Global
|
||||
@@ -298,7 +308,9 @@ class Global
|
||||
static double fBrakeStep; // krok zmiany hamulca dla klawiszy [Num3] i [Num9]
|
||||
static bool bJoinEvents; // czy grupować eventy o tych samych nazwach
|
||||
static bool bSmudge; // czy wyświetlać smugę, a pojazd użytkownika na końcu
|
||||
/*
|
||||
static std::string asTranscript[5]; // napisy na ekranie (widoczne)
|
||||
*/
|
||||
static TTranscripts tranTexts; // obiekt obsługujący stenogramy dźwięków na ekranie
|
||||
static std::string asLang; // domyślny język - http://tools.ietf.org/html/bcp47
|
||||
static int iHiddenEvents; // czy łączyć eventy z torami poprzez nazwę toru
|
||||
@@ -321,16 +333,19 @@ class Global
|
||||
static double CutValueToRange(double min, double value, double max);
|
||||
|
||||
// maciek001: zmienne dla MWD
|
||||
static bool bMWDdebugEnable;
|
||||
static unsigned int iMWDBaudrate;
|
||||
static std::string sMWDPortId;
|
||||
static bool bMWDBreakEnable;
|
||||
static bool bMWDInputDataEnable;
|
||||
static double fMWDAnalogCalib[4][3];
|
||||
static double fMWDzg[2];
|
||||
static double fMWDpg[2];
|
||||
static double fMWDph[2];
|
||||
static double fMWDvolt[2];
|
||||
static double fMWDamp[2];
|
||||
static bool bMWDmasterEnable; // główne włączenie portu COM
|
||||
static bool bMWDdebugEnable; // logowanie pracy
|
||||
static int iMWDDebugMode;
|
||||
static std::string sMWDPortId; // nazwa portu COM
|
||||
static unsigned long int iMWDBaudrate; // prędkość transmisji
|
||||
static bool bMWDInputEnable; // włącz wejścia
|
||||
static bool bMWDBreakEnable; // włącz wejścia analogowe (hamulce)
|
||||
static double fMWDAnalogInCalib[4][2]; // ustawienia kranów hamulca zespolonego i dodatkowego - min i max
|
||||
static double fMWDzg[2]; // max wartość wskazywana i max wartość generowana (rozdzielczość)
|
||||
static double fMWDpg[2];
|
||||
static double fMWDph[2];
|
||||
static double fMWDvolt[2];
|
||||
static double fMWDamp[2];
|
||||
static int iMWDdivider;
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -412,6 +412,21 @@ std::string ToUpper(std::string const &text)
|
||||
return uppercase;
|
||||
}
|
||||
|
||||
// replaces polish letters with basic ascii
|
||||
void
|
||||
win1250_to_ascii( std::string &Input ) {
|
||||
|
||||
std::unordered_map<char, char> charmap{
|
||||
{ 165, 'A' }, { 198, 'C' }, { 202, 'E' }, { 163, 'L' }, { 209, 'N' }, { 211, 'O' }, { 140, 'S' }, { 143, 'Z' }, { 175, 'Z' },
|
||||
{ 185, 'a' }, { 230, 'c' }, { 234, 'e' }, { 179, 'l' }, { 241, 'n' }, { 243, 'o' }, { 156, 's' }, { 159, 'z' }, { 191, 'z' }
|
||||
};
|
||||
std::unordered_map<char, char>::const_iterator lookup;
|
||||
for( auto &input : Input ) {
|
||||
if( ( lookup = charmap.find( input ) ) != charmap.end() )
|
||||
input = lookup->second;
|
||||
}
|
||||
}
|
||||
|
||||
void ComputeArc(double X0, double Y0, double Xn, double Yn, double R, double L, double dL,
|
||||
double &phi, double &Xout, double &Yout)
|
||||
/*wylicza polozenie Xout Yout i orientacje phi punktu na elemencie dL luku*/
|
||||
|
||||
@@ -107,15 +107,15 @@ bool FuzzyLogicAI(double Test, double Threshold, double Probability);
|
||||
/*operacje na stringach*/
|
||||
std::string ReadWord( std::ifstream& infile); /*czyta slowo z wiersza pliku tekstowego*/
|
||||
//std::string Ups(std::string s);
|
||||
std::string TrimSpace(std::string &s);
|
||||
char* TrimAndReduceSpaces(const char* s);
|
||||
std::string ExtractKeyWord(std::string InS, std::string KeyWord); /*wyciaga slowo kluczowe i lancuch do pierwszej spacji*/
|
||||
//std::string TrimSpace(std::string &s);
|
||||
//char* TrimAndReduceSpaces(const char* s);
|
||||
//std::string ExtractKeyWord(std::string InS, std::string KeyWord); /*wyciaga slowo kluczowe i lancuch do pierwszej spacji*/
|
||||
std::string DUE(std::string s); /*Delete Until Equal sign*/
|
||||
std::string DWE(std::string s); /*Delete While Equal sign*/
|
||||
std::string ExchangeCharInString(std::string const &s, const char &aim, const char &target); // zamienia jeden znak na drugi
|
||||
std::vector<std::string> &Split(const std::string &s, char delim, std::vector<std::string> &elems);
|
||||
std::vector<std::string> Split(const std::string &s, char delim);
|
||||
std::vector<std::string> Split(const std::string &s);
|
||||
//std::vector<std::string> Split(const std::string &s);
|
||||
|
||||
std::string to_string(int _Val);
|
||||
std::string to_string(unsigned int _Val);
|
||||
@@ -125,6 +125,7 @@ std::string to_string(double _Val);
|
||||
std::string to_string(double _Val, int precision);
|
||||
std::string to_string(double _Val, int precision, int width);
|
||||
std::string to_hex_str( int const _Val, int const width = 4 );
|
||||
|
||||
inline std::string to_string(bool _Val)
|
||||
{
|
||||
return _Val == true ? "true" : "false";
|
||||
@@ -135,6 +136,9 @@ int stol_def(const std::string & str, const int & DefaultValue);
|
||||
std::string ToLower(std::string const &text);
|
||||
std::string ToUpper(std::string const &text);
|
||||
|
||||
// replaces polish letters with basic ascii
|
||||
void win1250_to_ascii( std::string &Input );
|
||||
|
||||
/*procedury, zmienne i funkcje graficzne*/
|
||||
void ComputeArc(double X0, double Y0, double Xn, double Yn, double R, double L, double dL, double & phi, double & Xout, double & Yout);
|
||||
/*wylicza polozenie Xout Yout i orientacje phi punktu na elemencie dL luku*/
|
||||
|
||||
@@ -271,22 +271,25 @@ void TTextSound::Play(double Volume, int Looping, bool ListenerInside, vector3 N
|
||||
pSound->GetStatus(&stat);
|
||||
if (!(stat & DSBSTATUS_PLAYING)) // jeśli nie jest aktualnie odgrywany
|
||||
{
|
||||
/*
|
||||
std::string t( asText );
|
||||
size_t i;
|
||||
do
|
||||
{ // na razie zrobione jakkolwiek, docelowo przenieść teksty do tablicy nazw
|
||||
i = t.find('\r'); // znak nowej linii
|
||||
if( i == std::string::npos ) {
|
||||
Global::tranTexts.Add( t.c_str(), fTime, true );
|
||||
Global::tranTexts.Add( t, fTime, true );
|
||||
}
|
||||
else
|
||||
{
|
||||
Global::tranTexts.Add(t.substr(0, i).c_str(), fTime, true);
|
||||
Global::tranTexts.Add(t.substr(0, i), fTime, true);
|
||||
t.erase(0, i + 1);
|
||||
while (t.empty() ? false : (unsigned char)(t[1]) < 33)
|
||||
t.erase(0, 1);
|
||||
}
|
||||
} while (i != std::string::npos);
|
||||
*/
|
||||
Global::tranTexts.Add( asText, fTime, true );
|
||||
}
|
||||
}
|
||||
TRealSound::Play(Volume, Looping, ListenerInside, NewPosition);
|
||||
|
||||
13
Texture.cpp
13
Texture.cpp
@@ -175,7 +175,7 @@ opengl_texture::load_DDS() {
|
||||
|
||||
data_width = ddsd.dwWidth;
|
||||
data_height = ddsd.dwHeight;
|
||||
data_mapcount = 1;// ddsd.dwMipMapCount;
|
||||
data_mapcount = ddsd.dwMipMapCount;
|
||||
|
||||
int blockSize = ( data_format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ? 8 : 16 );
|
||||
int offset = 0;
|
||||
@@ -194,11 +194,13 @@ opengl_texture::load_DDS() {
|
||||
data_state = resource_state::failed;
|
||||
return;
|
||||
}
|
||||
|
||||
int datasize = filesize - offset;
|
||||
/*
|
||||
// this approach loads only the first mipmap and relies on graphics card to fill the rest
|
||||
data_mapcount = 1;
|
||||
int datasize = ( ( data_width + 3 ) / 4 ) * ( ( data_height + 3 ) / 4 ) * blockSize;
|
||||
*/
|
||||
int datasize = filesize - offset;
|
||||
/*
|
||||
// calculate size of accepted data
|
||||
// NOTE: this is a fallback, as we should be able to just move the file caret by calculated offset and read the rest
|
||||
@@ -331,7 +333,8 @@ opengl_texture::load_TGA() {
|
||||
int const pixelcount = data_width * data_height;
|
||||
|
||||
for( int i = 0; i < pixelcount; ++i ) {
|
||||
file.read( (char *)buffer, sizeof( unsigned char ) );
|
||||
|
||||
file.read( (char *)&buffer[ 0 ], sizeof( unsigned char ) * bytesperpixel );
|
||||
if( bytesperpixel == 1 ) {
|
||||
// expand greyscale data
|
||||
buffer[ 1 ] = buffer[ 0 ];
|
||||
@@ -473,8 +476,8 @@ opengl_texture::create() {
|
||||
datasize, (GLubyte *)&data[0] + dataoffset );
|
||||
|
||||
dataoffset += datasize;
|
||||
datawidth = std::max( datawidth / 2, 4 );
|
||||
dataheight = std::max( dataheight / 2, 4 );
|
||||
datawidth = std::max( datawidth / 2, 1 );
|
||||
dataheight = std::max( dataheight / 2, 1 );
|
||||
}
|
||||
else{
|
||||
// uncompressed texture data
|
||||
|
||||
@@ -25,7 +25,7 @@ struct opengl_texture {
|
||||
void load();
|
||||
void create();
|
||||
// members
|
||||
GLuint id{ -1 }; // associated GL resource
|
||||
GLuint id{ (GLuint) -1 }; // associated GL resource
|
||||
bool has_alpha{ false }; // indicates the texture has alpha channel
|
||||
bool is_ready{ false }; // indicates the texture was processed and is ready for use
|
||||
std::string traits; // requested texture attributes: wrapping modes etc
|
||||
|
||||
@@ -3758,7 +3758,7 @@ bool TTrain::Update( double const Deltatime )
|
||||
{
|
||||
if (DynamicObject->Mechanik ?
|
||||
(DynamicObject->Mechanik->AIControllFlag ? false :
|
||||
Global::iFeedbackMode == 4 ) :
|
||||
(Global::iFeedbackMode == 4 || (Global::bMWDmasterEnable && Global::bMWDBreakEnable))) :
|
||||
false) // nie blokujemy AI
|
||||
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
||||
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
||||
@@ -3782,7 +3782,7 @@ bool TTrain::Update( double const Deltatime )
|
||||
if (ggLocalBrake.SubModel)
|
||||
{
|
||||
if (DynamicObject->Mechanik ?
|
||||
(DynamicObject->Mechanik->AIControllFlag ? false : Global::iFeedbackMode == 4) :
|
||||
(DynamicObject->Mechanik->AIControllFlag ? false : (Global::iFeedbackMode == 4 || Global::bMWDmasterEnable)) :
|
||||
false) // nie blokujemy AI
|
||||
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
||||
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
||||
|
||||
18
World.cpp
18
World.cpp
@@ -2611,6 +2611,7 @@ TWorld::Render_UI() {
|
||||
}
|
||||
// if ((Global::iTextMode!=VK_F3))
|
||||
{ // stenogramy dźwięków (ukryć, gdy tabelka skanowania lub rozkład?)
|
||||
/*
|
||||
glColor3f( 1.0f, 1.0f, 0.0f ); //żółte
|
||||
for( int i = 0; i < 5; ++i ) { // kilka linijek
|
||||
if( Global::asTranscript[ i ].empty() )
|
||||
@@ -2620,6 +2621,23 @@ TWorld::Render_UI() {
|
||||
glPrint( Global::Bezogonkow( Global::asTranscript[ i ] ).c_str() );
|
||||
}
|
||||
}
|
||||
*/
|
||||
int i = 0;
|
||||
for( auto const &transcript : Global::tranTexts.aLines ) {
|
||||
|
||||
if( Global::fTimeAngleDeg >= transcript.fShow ) {
|
||||
|
||||
cParser parser( transcript.asText );
|
||||
while( true == parser.getTokens(1, false, "|") ) {
|
||||
|
||||
std::string transcriptline; parser >> transcriptline;
|
||||
::glColor3f( 1.0f, 1.0f, 0.0f ); //żółte
|
||||
::glRasterPos2f( -0.20f, -0.05f - 0.01f * i );
|
||||
glPrint( transcriptline.c_str() );
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (Global::iViewMode!=Global::iTextMode)
|
||||
|
||||
@@ -13,6 +13,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "mtable.h"
|
||||
#include "mczapkie/mctools.h"
|
||||
|
||||
// using namespace Mtable;
|
||||
std::shared_ptr<TMTableTime> Mtable::GlobalTime;
|
||||
@@ -278,8 +279,10 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
|
||||
if (s != "|")
|
||||
break;
|
||||
} // while (!(() || fin.eof()));
|
||||
if (s != "|")
|
||||
if( s != "|" ) {
|
||||
Relation1 = s;
|
||||
win1250_to_ascii( Relation1 );
|
||||
}
|
||||
else
|
||||
ConversionError = -5;
|
||||
while (fin >> s || !fin.bad())
|
||||
@@ -294,6 +297,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
|
||||
break;
|
||||
} // while (!( || (fin.eof())));
|
||||
fin >> Relation2;
|
||||
win1250_to_ascii( Relation2 );
|
||||
while (fin >> s || !fin.bad())
|
||||
{
|
||||
if (s == "Wymagany")
|
||||
@@ -352,6 +356,8 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
|
||||
while (s.find("|") == std::string::npos)
|
||||
fin >> s;
|
||||
fin >> record->StationName;
|
||||
// get rid of non-ascii chars. TODO: run correct version based on locale
|
||||
win1250_to_ascii( record->StationName );
|
||||
do
|
||||
{
|
||||
fin >> s;
|
||||
|
||||
Reference in New Issue
Block a user