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

Poprawka dla MWD aby kompilował się na VS

This commit is contained in:
firleju
2017-01-18 06:10:08 +01:00
parent 6440d64b2c
commit 51fff210e1
8 changed files with 4664 additions and 4069 deletions

View File

@@ -14,10 +14,10 @@ http://mozilla.org/MPL/2.0/.
author: Maciej Witek 2016
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
*/
#include "stdafx.h"
#include "MWD.h"
#include "Logs.h"
#include "Globals.h"
#include "Logs.h"
#include "World.h"
#include <windows.h>
@@ -50,7 +50,8 @@ MWDComm::MWDComm() // konstruktor
int i = 0;
while (i < BYTETOWRITE)
{
if(i<BYTETOREAD)ReadDataBuff[i] = 0;
if (i < BYTETOREAD)
ReadDataBuff[i] = 0;
WriteDataBuff[i] = 0;
i++;
}
@@ -72,11 +73,15 @@ MWDComm::~MWDComm() // destruktor
bool MWDComm::Open() // otwieranie portu COM
{
LPCSTR portId = Global::sMWDPortId.c_str();
hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (hComm == INVALID_HANDLE_VALUE){
if(GetLastError()==ERROR_FILE_NOT_FOUND){
WriteLog("PortCOM ERROR: serial port does not exist"); //serial port does not exist. Inform user.
if (hComm == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_FILE_NOT_FOUND)
{
WriteLog("PortCOM ERROR: serial port does not exist"); // serial port does not exist.
// Inform user.
}
WriteLog("PortCOM ERROR! not open!");
// some other error occurred. Inform user.
@@ -138,8 +143,10 @@ bool MWDComm::Close() // zamykanie portu COM
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
{
if(hComm > 0) return 1;
else return 0;
if (hComm > 0)
return 1;
else
return 0;
}
bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych
@@ -147,10 +154,15 @@ bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zap
DWORD bytes_read;
ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL);
fAnalog[0] = (float)((ReadDataBuff[9]<<8)+ReadDataBuff[8]) / Global::fMWDAnalogCalib[0][3]; //4095.0f; //max wartosc wynikająca z rozdzielczości
fAnalog[1] = (float)((ReadDataBuff[11]<<8)+ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3];
fAnalog[2] = (float)((ReadDataBuff[13]<<8)+ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3];
fAnalog[3] = (float)((ReadDataBuff[15]<<8)+ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3];
fAnalog[0] =
(float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) /
Global::fMWDAnalogCalib[0][3]; // 4095.0f; //max wartosc wynikająca z rozdzielczości
fAnalog[1] =
(float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3];
fAnalog[2] =
(float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3];
fAnalog[3] =
(float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3];
CheckData();
return TRUE;
@@ -174,9 +186,11 @@ bool MWDComm::Run() // wywo
if (GetMWDState())
{
SendData();
if (Global::bMWDInputDataEnable) ReadData();
if (Global::bMWDInputDataEnable)
ReadData();
return 1;
}else
}
else
{
WriteLog("Port COM: connection ERROR!");
// może spróbować się połączyć znowu?
@@ -186,7 +200,7 @@ bool MWDComm::Run() // wywo
}
}
bool MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
{
int i = 0;
while (i < 6)
@@ -200,9 +214,11 @@ bool MWDComm::CheckData() // sprawdzanie wej
Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów
1 M wyłącznik wył. szybkiego
2 Shift+M impuls załączający wył. szybki
3 N odblok. przekaźników nadmiarowych i różnicowego obwodu głównego
3 N odblok. przekaźników nadmiarowych
i różnicowego obwodu głównego
4 NC rezerwa
5 Ctrl+N odblok. przek. nadmiarowych przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych
5 Ctrl+N odblok. przek. nadmiarowych
przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych
6 L wył. styczników liniowych
7 SPACE kasowanie czuwaka
@@ -211,7 +227,8 @@ bool MWDComm::CheckData() // sprawdzanie wej
2 (Shift) C sprężarka
3 S piasecznice
4 (Shift) H ogrzewanie składu
5 przel. hamowania Shift+B pspbpwy Ctrl+B pospieszny B towarowy
5 przel. hamowania Shift+B
pspbpwy Ctrl+B pospieszny B towarowy
6 przel. hamowania
7 (Shift) F rozruch w/n
@@ -235,169 +252,235 @@ bool MWDComm::CheckData() // sprawdzanie wej
*/
/* po przełączeniu bistabilnego najpierw wciskamy klawisz i przy następnym
wejściu w pętlę MWD puszczamy bo inaczej nie działa */
wejściu w pętlę MWD puszczamy bo inaczej nie działa
*/
// 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
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{
}
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.
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{
}
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] & 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
/*PORT1*/
// puszczanie przycisku bistabilnego klawiatury
if(maskSwitch[1]&0x02){
if(bitSwitch[1] &0x02){
if (maskSwitch[1] & 0x02)
{
if (bitSwitch[1] & 0x02)
{
KeyBoard('X', 0);
KeyBoard(0x10, 0);
}else KeyBoard('X',0);
}
else
KeyBoard('X', 0);
maskSwitch[1] &= ~0x02;
}
if(maskSwitch[1]&0x04){
if(bitSwitch[1] &0x04){
if (maskSwitch[1] & 0x04)
{
if (bitSwitch[1] & 0x04)
{
KeyBoard('C', 0);
KeyBoard(0x10, 0);
}else KeyBoard('C',0);
}
else
KeyBoard('C', 0);
maskSwitch[1] &= ~0x04;
}
if(maskSwitch[1]&0x10){
if(bitSwitch[1] &0x10){
if (maskSwitch[1] & 0x10)
{
if (bitSwitch[1] & 0x10)
{
KeyBoard('H', 0);
KeyBoard(0x10, 0);
}else KeyBoard('H',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);
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){
if (maskSwitch[1] & 0x80)
{
if (bitSwitch[1] & 0x80)
{
KeyBoard('F', 0);
KeyBoard(0x10, 0);
}else KeyBoard('F',0);
}
else
KeyBoard('F', 0);
maskSwitch[1] &= ~0x80;
}
if(maskData[1] & 0x02 && lastStateData[1] & 0x02) { // przetwornica
if (maskData[1] & 0x02 && lastStateData[1] & 0x02)
{ // przetwornica
KeyBoard(0x10, 1); // bistabilny
KeyBoard('X', 1);
maskSwitch[1] |= 0x02;
bitSwitch[1] |= 0x02;
}else{
}
else
{
maskSwitch[1] |= 0x02;
bitSwitch[1] &= ~0x02;
KeyBoard('X', 1);
}
if(maskData[1] & 0x04 && lastStateData[1] & 0x04) { // sprężarka
if (maskData[1] & 0x04 && lastStateData[1] & 0x04)
{ // sprężarka
KeyBoard(0x10, 1); // bistabilny
KeyBoard('C', 1);
maskSwitch[1] |= 0x04;
bitSwitch[1] |= 0x04;
}else{
}
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
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{
}
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
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
}
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
if (maskData[1] & 0x80 && lastStateData[1] & 0x80)
{ // rozruch wysoki/niski
KeyBoard(0x10, 1); // bistabilny
KeyBoard('F', 1);
maskSwitch[1] |= 0x80;
bitSwitch[1] |= 0x80;
}else{
}
else
{
maskSwitch[1] |= 0x80;
bitSwitch[1] &= ~0x80;
KeyBoard('F', 1);
}
/*PORT2*/
if(maskSwitch[2]&0x01){
if(bitSwitch[2] &0x01){
if (maskSwitch[2] & 0x01)
{
if (bitSwitch[2] & 0x01)
{
KeyBoard('P', 0);
KeyBoard(0x10, 0);
}else KeyBoard('P',0);
}
else
KeyBoard('P', 0);
maskSwitch[2] &= ~0x01;
}
if(maskSwitch[2]&0x02){
if(bitSwitch[2] &0x02){
if (maskSwitch[2] & 0x02)
{
if (bitSwitch[2] & 0x02)
{
KeyBoard('O', 0);
KeyBoard(0x10, 0);
}else KeyBoard('O',0);
}
else
KeyBoard('O', 0);
maskSwitch[2] &= ~0x02;
}
if(maskData[2] & 0x01 && lastStateData[2] & 0x01) { // pantograf przedni
if (maskData[2] & 0x01 && lastStateData[2] & 0x01)
{ // pantograf przedni
KeyBoard(0x10, 1); // bistabilny
KeyBoard('P', 1);
maskSwitch[2] |= 0x01;
bitSwitch[2] |= 0x01;
}else{
}
else
{
maskSwitch[2] |= 0x01;
bitSwitch[2] &= ~0x01;
KeyBoard('P', 1);
}
if(maskData[2] & 0x02 && lastStateData[2] & 0x02) { // pantograf tylni
if (maskData[2] & 0x02 && lastStateData[2] & 0x02)
{ // pantograf tylni
KeyBoard(0x10, 1); // bistabilny
KeyBoard('O', 1);
maskSwitch[2] |= 0x02;
bitSwitch[2] |= 0x02;
}else{
}
else
{
maskSwitch[2] |= 0x02;
bitSwitch[2] &= ~0x02;
KeyBoard('O', 1);
}
if(maskData[2] & 0x04 && lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu
if (maskData[2] & 0x04 && lastStateData[2] & 0x04)
{ // przyhamowanie przy poślizgu
KeyBoard(0x10, 1); // monostabilny
KeyBoard(0x0D, 1);
}else{
}
else
{
KeyBoard(0x0D, 0);
KeyBoard(0x10, 0);
@@ -420,35 +503,48 @@ bool MWDComm::CheckData() // sprawdzanie wej
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
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{
}
else
{
KeyBoard('A', 0);
KeyBoard(0x10, 0);
}
if(maskData[2] & 0x80 && lastStateData[2] & 0x80) KeyBoard('A',1); // syrena niska
else KeyBoard('A',0); // monostabilny
if (maskData[2] & 0x80 && lastStateData[2] & 0x80)
KeyBoard('A', 1); // syrena niska
else
KeyBoard('A', 0); // monostabilny
/*PORT3*/
if(maskSwitch[3]&0x01){
if(bitSwitch[3] &0x01){
if (maskSwitch[3] & 0x01)
{
if (bitSwitch[3] & 0x01)
{
KeyBoard('J', 0);
KeyBoard(0x10, 0);
}else KeyBoard('J',0);
}
else
KeyBoard('J', 0);
maskSwitch[3] &= ~0x01;
}
if(maskData[3] & 0x01 && lastStateData[3] & 0x01) { // bateria
if (maskData[3] & 0x01 && lastStateData[3] & 0x01)
{ // bateria
KeyBoard(0x10, 1); // bistabilny
KeyBoard('J', 1);
maskSwitch[3] |= 0x01;
bitSwitch[3] |= 0x01;
}else{
}
else
{
maskSwitch[3] |= 0x01;
bitSwitch[3] &= ~0x01;
KeyBoard('J', 1);
@@ -543,7 +639,8 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard('X',1); //
KeyBoard('X',0);
KeyBoard(0x10,0);
}else{ KeyBoard('X',1); //
}else{
KeyBoard('X',1); //
KeyBoard('X',0);
}
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
@@ -551,53 +648,63 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard('C',1); //
KeyBoard('C',0);
KeyBoard(0x10,0);
}else{ KeyBoard('C',1); //
}else{
KeyBoard('C',1); //
KeyBoard('C',0);
}
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
else KeyBoard('S',0);
else
KeyBoard('S',0);
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
KeyBoard(0x11,1);
KeyBoard('H',1);
}else{ KeyBoard('H',0);
}else{
KeyBoard('H',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
KeyBoard(0x11,1);
KeyBoard(' ',1);
}else{ KeyBoard(' ',0);
}else{
KeyBoard(' ',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
KeyBoard(0x10,1);
KeyBoard(' ',1);
}else{ KeyBoard(' ',0);
}else{
KeyBoard(' ',0);
KeyBoard(0x10,0);
}
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
KeyBoard(0x10,1);
KeyBoard('F',1);
}else{ KeyBoard('F',0);
}else{
KeyBoard('F',0);
KeyBoard(0x10,0);
}//*/
/* NASTAWNIK, BOCZNIK i KIERUNEK */
if(bnkMask & 1){ //puszczanie klawiszy
if (bnkMask & 1)
{ // puszczanie klawiszy
KeyBoard(0x6B, 0);
bnkMask &= ~1;
}
if(bnkMask & 2){
if (bnkMask & 2)
{
KeyBoard(0x6D, 0);
bnkMask &= ~2;
}
if(bnkMask & 4){
if (bnkMask & 4)
{
KeyBoard(0x6F, 0);
bnkMask &= ~4;
}
if(bnkMask & 8){
if (bnkMask & 8)
{
KeyBoard(0x6A, 0);
bnkMask &= ~8;
}
@@ -628,38 +735,59 @@ bool MWDComm::CheckData() // sprawdzanie wej
}
/* Obsługa HASLERA */
if(ReadDataBuff[0] & 0x80) bCzuwak = true;
if (ReadDataBuff[0] & 0x80)
bCzuwak = true;
if(bKabina1){ // logika rysika 1
if (bKabina1)
{ // logika rysika 1
bRysik1H = true;
bRysik1L = false;
if(bPrzejazdSHP) bRysik1H = false;
}else if(bKabina2){
if (bPrzejazdSHP)
bRysik1H = false;
}
else if (bKabina2)
{
bRysik1L = true;
bRysik1H = false;
if(bPrzejazdSHP) bRysik1L = false;
}else{
if (bPrzejazdSHP)
bRysik1L = false;
}
else
{
bRysik1H = false;
bRysik1L = false;
}
if(bHamowanie){ // logika rysika 2
if (bHamowanie)
{ // logika rysika 2
bRysik2H = false;
bRysik2L = true;
}else{
if(bCzuwak) bRysik2H = true;
else bRysik2H = false;
}
else
{
if (bCzuwak)
bRysik2H = true;
else
bRysik2H = false;
bRysik2L = false;
}
bCzuwak = false;
if(bRysik1H)WriteDataBuff[6] |= 1<<0;
else WriteDataBuff[6] &= ~(1<<0);
if(bRysik1L)WriteDataBuff[6] |= 1<<1;
else WriteDataBuff[6] &= ~(1<<1);
if(bRysik2H)WriteDataBuff[6] |= 1<<2;
else WriteDataBuff[6] &= ~(1<<2);
if(bRysik2L)WriteDataBuff[6] |= 1<<3;
else WriteDataBuff[6] &= ~(1<<3);
if (bRysik1H)
WriteDataBuff[6] |= 1 << 0;
else
WriteDataBuff[6] &= ~(1 << 0);
if (bRysik1L)
WriteDataBuff[6] |= 1 << 1;
else
WriteDataBuff[6] &= ~(1 << 1);
if (bRysik2H)
WriteDataBuff[6] |= 1 << 2;
else
WriteDataBuff[6] &= ~(1 << 2);
if (bRysik2L)
WriteDataBuff[6] |= 1 << 3;
else
WriteDataBuff[6] &= ~(1 << 3);
}
void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
@@ -673,15 +801,16 @@ void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
ip.ki.wVk = key; // virtual-key code for the "a" key
if(s){// Press the "A" key
if (s)
{ // Press the "A" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}else{
}
else
{
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
}
// return 1;
}

View File

@@ -15,7 +15,6 @@ http://mozilla.org/MPL/2.0/.
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
*/
#ifndef MWDH
#define MWDH
//---------------------------------------------------------------------------
@@ -33,7 +32,7 @@ private:
bool ReadData(); // BYTE *pReadDataBuff);
bool SendData(); // BYTE *pWriteDataBuff);
bool CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA
void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA
void KeyBoard(int key, bool s);
bool bRysik1H;
@@ -55,8 +54,6 @@ public:
bool bHamowanie;
bool bCzuwak;
float fAnalog[4]; // trzymanie danych z wejść analogowych
BYTE ReadDataBuff[17]; // bufory danych
@@ -67,7 +64,6 @@ public:
};
#endif
/*
INFO - zmiany dokonane w innych plikach niezbędne do prawidłowego działania:

View File

@@ -11,21 +11,21 @@ http://mozilla.org/MPL/2.0/.
Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
*/
#include "stdafx.h"
#include "Driver.h"
#include <direct.h>
#include "Globals.h"
#include "Logs.h"
#include "mtable.h"
#include "DynObj.h"
#include "Event.h"
#include "Globals.h"
#include "Ground.h"
#include "Logs.h"
#include "McZapkie/MOVER.h"
#include "McZapkie/mctools.h"
#include "MemCell.h"
#include "World.h"
#include "McZapkie/mctools.h"
#include "McZapkie/MOVER.h"
#include "mtable.h"
#include <direct.h>
#define LOGVELOCITY 0
#define LOGORDERS 0
@@ -162,7 +162,8 @@ void TSpeedPos::CommandCheck()
// przystanek, najwy<77>ej AI zignoruje przy analizie tabelki
if ((iFlags & spPassengerStopPoint) == 0)
fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak
iFlags |= spPassengerStopPoint; // niestety nie da si<73> w tym miejscu wsp<73><70>pracowa<77> z rozk<7A>adem
iFlags |=
spPassengerStopPoint; // niestety nie da si<73> w tym miejscu wsp<73><70>pracowa<77> z rozk<7A>adem
break;
case cm_SetProximityVelocity:
// musi zosta<74> gdy<64> inaczej nie dzia<69>aj<61> manewry
@@ -204,7 +205,8 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
}
else
{
iFlags ^= spElapsed; // 32-mini<6E>ty - b<>dziemy liczy<7A> odleg<65>o<EFBFBD><6F> wzgl<67>dem przeciwnego ko<6B>ca
iFlags ^=
spElapsed; // 32-mini<6E>ty - b<>dziemy liczy<7A> odleg<65>o<EFBFBD><6F> wzgl<67>dem przeciwnego ko<6B>ca
// toru (nadal mo<6D>e by<62> z przodu i ogranicza<7A>)
if ((iFlags & 0x43) == 3) // tylko je<6A>li (istotny) tor, bo eventy s<> punktowe
if (trTrack) // mo<6D>e by<62> NULL, je<6A>li koniec toru (????)
@@ -245,7 +247,8 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
{
if (Global::iWriteLogEnabled & 8)
WriteLog("Tor " + trTrack->NameGet() + " zajety przed pojazdem. Num=" +
std::to_string(trTrack->iNumDynamics) + "Dist= " + std::to_string(fDist));
std::to_string(trTrack->iNumDynamics) +
"Dist= " + std::to_string(fDist));
fVelNext =
0.0; // to zabroni<6E> wjazdu (chyba <20>e ten z przodu te<74> jedzie prosto)
}
@@ -263,13 +266,15 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
// na Mydelniczce potrafi skanowa<77> na wprost mimo pojechania na bok
}
// poni<6E>sze nie dotyczy trybu <20><>czenia?
if ((iFlags & spElapsed) ? false :
if ((iFlags & spElapsed) ?
false :
trTrack->iNumDynamics >
0) // je<6A>li jeszcze nie wjechano na tor, a co<63> na nim jest
{
if (Global::iWriteLogEnabled & 8)
WriteLog("Rozjazd " + trTrack->NameGet() + " zajety przed pojazdem. Num=" +
std::to_string(trTrack->iNumDynamics) + "Dist= "+ std::to_string(fDist));
std::to_string(trTrack->iNumDynamics) +
"Dist= " + std::to_string(fDist));
// fDist -= 30.0;
fVelNext = 0.0; // to niech stanie w zwi<77>kszonej odleg<65>o<EFBFBD>ci
// else if (fVelNext==0.0) //je<6A>li zosta<74>a wyzerowana
@@ -301,10 +306,12 @@ std::string TSpeedPos::TableText()
return "Flags=#" + to_hex_str(iFlags, 8) + ", Dist=" + to_string(fDist, 1, 7) +
", Vel=" + std::to_string(fVelNext) + ", Name=" + GetName();
// if (iFlags & spTrack) // je<6A>li tor
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) +
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1)
// +
// ", Vel=" + AnsiString(fVelNext) + ", Track=" + trTrack->NameGet();
// else if (iFlags & spEvent) // je<6A>li event
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) +
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1)
// +
// ", Vel=" + AnsiString(fVelNext) + ", Event=" + evEvent->asName;
}
return "Empty";
@@ -312,7 +319,8 @@ std::string TSpeedPos::TableText()
bool TSpeedPos::IsProperSemaphor(TOrders order)
{ // sprawdzenie czy semafor jest zgodny z trybem jazdy
if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
if (order <
0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
{
if (iFlags & (spSemaphor | spShuntSemaphor))
return true;
@@ -336,8 +344,10 @@ bool TSpeedPos::Set(TEvent *event, double dist, TOrders order)
CommandCheck(); // sprawdzenie typu komendy w evencie i okre<72>lenie pr<70>dko<6B>ci
// zale<6C>nie od trybu sprawdzenie czy jest tutaj gdzie<69> semafor lub tarcza manewrowa
// je<6A>li wskazuje stop wtedy wystawiamy true jako koniec sprawdzania
// WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + " order="+AnsiString(order));
if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
// WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + "
// order="+AnsiString(order));
if (order <
0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
{
if (iFlags & (spSemaphor | spShuntSemaphor) && fVelNext == 0.0)
return true;
@@ -358,7 +368,8 @@ void TSpeedPos::Set(TTrack *track, double dist, int flag)
trTrack = track; // TODO: (t) mo<6D>e by<62> NULL i nie odczytamy ko<6B>ca poprzedniego :/
if (trTrack)
{
iFlags = flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapami<6D>tanie kierunku wraz z typem
iFlags =
flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapami<6D>tanie kierunku wraz z typem
if (iFlags & spSwitch)
if (trTrack->GetSwitchState() & 1)
iFlags |= spSwitchStatus;
@@ -416,12 +427,13 @@ bool TController::TableNotFound(TEvent *e)
{ // sprawdzenie, czy nie zosta<74> ju<6A> dodany do tabelki (np. podw<64>jne W4 robi problemy)
int j = (iLast + 1) % iSpeedTableSize; // j, aby sprawdzi<7A> te<74> ostatni<6E> pozycj<63>
for (int i = iFirst; i != j; i = (i + 1) % iSpeedTableSize)
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == (spEnabled |
spEvent)) // o ile u<>ywana pozycja
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) ==
(spEnabled | spEvent)) // o ile u<>ywana pozycja
if (sSpeedTable[i].evEvent == e)
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableNotFound: Event already in SpeedTable: " + sSpeedTable[i].evEvent->asName);
WriteLog("TableNotFound: Event already in SpeedTable: " +
sSpeedTable[i].evEvent->asName);
return false; // ju<6A> jest, drugi raz dodawa<77> nie ma po co
}
return true; // nie ma, czyli mo<6D>na doda<64>
@@ -499,8 +511,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
-1.0 :
1.0; // flaga ustawiona, gdy Point2 toru jest bli<6C>ej
fCurrentDistance = sSpeedTable[iLast].fDist; // aktualna odleg<65>o<EFBFBD><6F> do jego Point1
fTrackLength =
sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ? 0.0 : pTrack->Length(); // nie dolicza<7A> d<>ugo<67>ci gdy:
fTrackLength = sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ?
0.0 :
pTrack->Length(); // nie dolicza<7A> d<>ugo<67>ci gdy:
// 32-mini<6E>ty pocz<63>tek,
// 64-jazda do ko<6B>ca toru
}
@@ -523,8 +536,11 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
if (TableAddNew())
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableTraceRoute: new event found " + pEvent->asName + " by " + OwnerName());
if (sSpeedTable[iLast].Set( pEvent, fCurrentDistance, OrderCurrentGet())) // dodanie odczytu sygna<6E>u
WriteLog("TableTraceRoute: new event found " + pEvent->asName +
" by " + OwnerName());
if (sSpeedTable[iLast].Set(
pEvent, fCurrentDistance,
OrderCurrentGet())) // dodanie odczytu sygna<6E>u
{
fDistance = fCurrentDistance; // je<6A>li sygna<6E> stop, to nie ma
// potrzeby dalej skanowa<77>
@@ -589,8 +605,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
sSpeedTable[iLast].iFlags &=
~spReverse; // usuni<6E>cie flagi kierunku, bo mo<6D>e by<62> b<><62>dna
if (sSpeedTable[iLast].iFlags < 0)
sSpeedTable[iLast].iFlags |=
spReverse; // ustawienie flagi kierunku na podstawie wybranego segmentu
sSpeedTable[iLast].iFlags |= spReverse; // ustawienie flagi kierunku
// na podstawie wybranego
// segmentu
if (int(fLastDir) * sSpeedTable[iLast].iFlags < 0)
fLastDir = -fLastDir;
if (AIControllFlag) // dla AI na razie losujemy kierunek na kolejnym
@@ -711,7 +728,8 @@ void TController::TableCheck(double fDistance)
if (sSpeedTable[i].Update(&pos, &dir, len))
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableCheck: Switch change. Delete next entries. (" + sSpeedTable[i].trTrack->NameGet() + ")");
WriteLog("TableCheck: Switch change. Delete next entries. (" +
sSpeedTable[i].trTrack->NameGet() + ")");
int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatni<6E> pozycj<63>
for (int j = (i + 1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize)
{ // kasowanie wszystkich rekord<72>w za zmienion<6F> zwrotnic<69>
@@ -735,16 +753,20 @@ void TController::TableCheck(double fDistance)
{
if (sSpeedTable[i].fDist < -fLength) // a sk<73>ad wyjecha<68> ca<63><61> d<>ugo<67>ci<63> poza
{ // degradacja pozycji
// WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
// WriteLog( "TableCheck: Track is behind. Delete from table: " +
// sSpeedTable[i].trTrack->NameGet());
sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy si<73>
}
else if ((sSpeedTable[i].iFlags & 0xF0000028) ==
spElapsed) // jest z ty<74>u (najechany) i nie jest zwrotnic<69> ani skrzy<7A>owaniem
else if ((sSpeedTable[i].iFlags & 0xF0000028) == spElapsed) // jest z ty<74>u
// (najechany) i nie
// jest zwrotnic<69>
// ani skrzy<7A>owaniem
if (sSpeedTable[i].fVelNext < 0) // a nie ma ograniczenia pr<70>dko<6B>ci
{
sSpeedTable[i].iFlags =
0; // to nie ma go po co trzyma<6D> (odtykacz usunie ze <20>rodka)
// WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
// WriteLog("TableCheck: Track without speed. Delete from table: " +
// sSpeedTable[i].trTrack->NameGet());
}
}
else if (sSpeedTable[i].iFlags & spEvent) // je<6A>li event
@@ -756,7 +778,8 @@ void TController::TableCheck(double fDistance)
sSpeedTable[i].fDist < -fLength)
{ // poci<63>g staje zawsze, a samoch<63>d tylko je<6A>li nie przejedzie ca<63><61>
// d<>ugo<67>ci<63> (mo<6D>e by<62> zaskoczony zmian<61>)
// WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName);
// WriteLog("TableCheck: Event is behind. Delete from table: " +
// sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu;
// semafory usuwane tylko przy sprawdzaniu,
// bo wysy<73>aj<61> komendy
@@ -831,15 +854,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
// ju<6A> semafora)
#if LOGSTOPS
WriteLog(pVehicle->asName + " as " + TrainParams->TrainName + ": at " +
std::to_string(GlobalTime->hh) + ":" + std::to_string(GlobalTime->mm) +
" skipped " + asNextStop); // informacja
std::to_string(GlobalTime->hh) + ":" +
std::to_string(GlobalTime->mm) + " skipped " +
asNextStop); // informacja
#endif
fLastStopExpDist = mvOccupied->DistCounter + 0.250 +
0.001 * fLength; // przy jakim dystansie (stanie
// licznika) ma przesun<75><6E> na
// nast<73>pny post<73>j
TrainParams->UpdateMTable(
GlobalTime->hh, GlobalTime->mm,
TrainParams->UpdateMTable(GlobalTime->hh, GlobalTime->mm,
asNextStop.substr(19, asNextStop.length()));
TrainParams->StationIndexInc(); // przej<65>cie do nast<73>pnej
asNextStop =
@@ -1000,7 +1023,9 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
// ma przesun<75><6E> na nast<73>pny post<73>j
// Controlled-> //zapisa<73> odleg<65>o<EFBFBD><6F> do przejechania
TrainParams->StationIndexInc(); // przej<65>cie do nast<73>pnej
asNextStop = TrainParams->NextStop(); // pobranie kolejnego miejsca zatrzymania
asNextStop =
TrainParams
->NextStop(); // pobranie kolejnego miejsca zatrzymania
// TableClear(); //aby od nowa sprawdzi<7A>o W4 z inn<6E> nazw<7A> ju<6A> - to nie jest dobry pomys<79>
#if LOGSTOPS
WriteLog(pVehicle->asName + " as " + TrainParams->TrainName +
@@ -1075,15 +1100,18 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if (sSpeedTable[i].fDist < 0.0 && sSemNext == &sSpeedTable[i])
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed by " + OwnerName());
WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed by " +
OwnerName());
sSemNext = NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
// zmiennej sprawdzaj<61>cej dla skanowania w prz<72>d
}
if (sSpeedTable[i].fDist < 0.0 && sSemNextStop == &sSpeedTable[i])
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: semaphor " + sSemNextStop->GetName() + " passed by " + OwnerName());
sSemNextStop = NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
WriteLog("TableUpdate: semaphor " + sSemNextStop->GetName() +
" passed by " + OwnerName());
sSemNextStop =
NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
// zmiennej sprawdzaj<61>cej dla skanowania w prz<72>d
}
if (sSpeedTable[i].fDist > 0.0 &&
@@ -1096,7 +1124,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
// byl nowy to go dorzucamy do zmiennej, <20>eby ca<63>y
// czas widzia<69> najbli<6C>szy
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName() + " by " + OwnerName());
WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName() + " by " +
OwnerName());
}
if (!sSemNextStop || (sSemNextStop && sSemNextStop->fVelNext != 0 &&
sSpeedTable[i].fVelNext == 0))
@@ -1149,10 +1178,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
else if (sSpeedTable[i].IsProperSemaphor(OrderCurrentGet()))
{ // to semaphor
if (sSpeedTable[i].fDist < 0)
VelSignalLast = sSpeedTable[i].fVelNext; //mini<6E>ty daje pr<70>dko<6B><6F> obowi<77>zuj<75>c<EFBFBD>
VelSignalLast =
sSpeedTable[i].fVelNext; // mini<6E>ty daje pr<70>dko<6B><6F> obowi<77>zuj<75>c<EFBFBD>
else
{
iDrivigFlags |= moveSemaphorFound; //je<6A>li z przodu to dajemy falg<6C>, <20>e jest
iDrivigFlags |= moveSemaphorFound; // je<EFBFBD>li z przodu to dajemy falg<6C>, <20>e
// jest
d_to_next_sem = Min0R(sSpeedTable[i].fDist, d_to_next_sem);
}
if (sSpeedTable[i].fDist <= d_to_next_sem)
@@ -1172,12 +1203,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if (sSpeedTable[i].fSectionVelocityDist == 0.0)
{
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: Event is behind. SVD = 0: " + sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags = 0; // je<6A>li punktowy to kasujemy i nie dajemy ograniczenia na sta<74>e
WriteLog("TableUpdate: Event is behind. SVD = 0: " +
sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags =
0; // je<6A>li punktowy to kasujemy i nie dajemy ograniczenia na sta<74>e
}
else if (sSpeedTable[i].fSectionVelocityDist < 0.0)
{ // ograniczenie obowi<77>zuj<75>ce do nast<73>pnego
if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
if (sSpeedTable[i].fVelNext ==
Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
sSpeedTable[i].fVelNext != VelLimitLast)
{ // je<6A>li ograniczenie jest mniejsze ni<6E> obecne to obowi<77>zuje od zaraz
VelLimitLast = sSpeedTable[i].fVelNext;
@@ -1186,27 +1220,34 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
{ // je<6A>li wi<77>ksze to musi wyjecha<68> za poprzednie
VelLimitLast = sSpeedTable[i].fVelNext;
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: Event is behind. SVD < 0: " + sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags = 0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
WriteLog("TableUpdate: Event is behind. SVD < 0: " +
sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags =
0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
}
}
else
{ // je<6A>li wi<77>ksze to ograniczenie ma swoj<6F> d<>ugo<67><6F>
if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
if (sSpeedTable[i].fVelNext ==
Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
sSpeedTable[i].fVelNext != VelLimitLast)
{ // je<6A>li ograniczenie jest mniejsze ni<6E> obecne to obowi<77>zuje od zaraz
VelLimitLast = sSpeedTable[i].fVelNext;
}
else if (sSpeedTable[i].fDist < -fLength && sSpeedTable[i].fVelNext != VelLimitLast)
else if (sSpeedTable[i].fDist < -fLength &&
sSpeedTable[i].fVelNext != VelLimitLast)
{ // je<6A>li wi<77>ksze to musi wyjecha<68> za poprzednie
VelLimitLast = sSpeedTable[i].fVelNext;
}
else if (sSpeedTable[i].fDist < -fLength - sSpeedTable[i].fSectionVelocityDist)
else if (sSpeedTable[i].fDist <
-fLength - sSpeedTable[i].fSectionVelocityDist)
{ //
VelLimitLast = -1.0;
if (Global::iWriteLogEnabled & 8)
WriteLog("TableUpdate: Event is behind. SVD > 0: " + sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags = 0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
WriteLog("TableUpdate: Event is behind. SVD > 0: " +
sSpeedTable[i].evEvent->asName);
sSpeedTable[i].iFlags =
0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
}
}
}
@@ -1219,7 +1260,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
v = 0.0; // to mo<6D>e by<62> podany dla tamtego: jecha<68> tak, jakby tam stop by<62>
else
{ // zawalidrogi nie ma (albo pojazd jest samochodem), sprawdzi<7A> sygna<6E>
if (sSpeedTable[i].iFlags & spShuntSemaphor) // je<6A>li Tm - w zasadzie to sprawdzi<7A>
if (sSpeedTable[i].iFlags &
spShuntSemaphor) // je<6A>li Tm - w zasadzie to sprawdzi<7A>
// komend<6E>!
{ // je<6A>li podana pr<70>dko<6B><6F> manewrowa
if ((OrderCurrentGet() & Obey_train) ? v == 0.0 : false)
@@ -1250,13 +1292,17 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
}
}
}
else if (!(sSpeedTable[i].iFlags & spSectionVel)) //je<6A>li jaki<6B> event pasywny ale nie ograniczenie
if (go == cm_Unknown) // je<6A>li nie by<62>o komendy wcze<7A>niej - pierwsza si<73> liczy
else if (!(sSpeedTable[i].iFlags &
spSectionVel)) // je<6A>li jaki<6B> event pasywny ale nie ograniczenie
if (go ==
cm_Unknown) // je<6A>li nie by<62>o komendy wcze<7A>niej - pierwsza si<73> liczy
// - ustawianie VelSignal
if (v < 0.0 ? true : v >= 1.0) // bo warto<74><6F> 0.1 s<>u<EFBFBD>y do hamowania tylko
if (v < 0.0 ? true :
v >= 1.0) // bo warto<74><6F> 0.1 s<>u<EFBFBD>y do hamowania tylko
{
go = cm_SetVelocity; // mo<6D>e odjecha<68>
// Ra 2014-06: (VelSignal) nie mo<6D>e by<62> tu ustawiane, bo semafor mo<6D>e
// Ra 2014-06: (VelSignal) nie mo<6D>e by<62> tu ustawiane, bo semafor
// mo<6D>e
// by<62> daleko
// VelSignal=v; //nie do ko<6B>ca tak, to jest druga pr<70>dko<6B><6F>; -1 nie
// wpisywa<77>...
@@ -1270,11 +1316,13 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if (sSpeedTable[i].iFlags & spEvent) // je<6A>li event
if ((sSpeedTable[i].evEvent != eSignSkip) ?
true :
(sSpeedTable[i].fVelNext != 0.0)) // ale inny ni<6E> ten,
(sSpeedTable[i].fVelNext !=
0.0)) // ale inny ni<6E> ten,
// na kt<6B>rym mini<6E>to
// S1, chyba <20>e si<73>
// ju<6A> zmieni<6E>o
iDrivigFlags &= ~moveVisibility; // sygna<6E> zezwalaj<61>cy na
iDrivigFlags &=
~moveVisibility; // sygna<6E> zezwalaj<61>cy na
// jazd<7A> wy<77><79>cza jazd<7A> na
// widoczno<6E><6F> (S1 na SBL)
@@ -1288,12 +1336,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
eSignNext = sSpeedTable[i].evEvent; // dla informacji
if (iDrivigFlags &
moveStopHere) // je<6A>li ma sta<74>, dostaje komend<6E> od razu
go = cm_Command; // komenda z kom<6F>rki, do wykonania po zatrzymaniu
else if (sSpeedTable[i].fDist <= 20.0) // je<6A>li ma doci<63>gn<67><6E>, to niech
go = cm_Command; // komenda z kom<6F>rki, do wykonania po
// zatrzymaniu
else if (sSpeedTable[i].fDist <=
20.0) // je<6A>li ma doci<63>gn<67><6E>, to niech
// doci<63>ga (moveStopCloser
// dotyczy doci<63>gania do W4, nie
// semafora)
go = cm_Command; // komenda z kom<6F>rki, do wykonania po zatrzymaniu
go = cm_Command; // komenda z kom<6F>rki, do wykonania po
// zatrzymaniu
}
} // je<6A>li nie ma zawalidrogi
} // je<6A>li event
@@ -1501,7 +1552,8 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche,
"Coupler.Force[N] TractionForce [kN] FrictionForce [kN] "
"BrakeForce [kN] BrakePress [MPa] PipePress [MPa] "
"MotorCurrent [A] MCP SCP BCP LBP DmgFlag Command CVal1 CVal2")
.c_str() << "\r\n";
.c_str()
<< "\r\n";
#endif
#if LOGPRESS == 1
LogFile << string("t\tVel\tAcc\tPP\tVVP\tBP\tBVP\tCVP").c_str() << "\n";
@@ -1909,7 +1961,8 @@ bool TController::CheckVehicles(TOrders user)
}
else if (OrderCurrentGet() & (Shunt | Connect))
{
Lights(16, (pVehicles[1]->MoverParameters->CabNo) ?
Lights(16,
(pVehicles[1]->MoverParameters->CabNo) ?
1 :
0); //<2F>wiat<61>a manewrowe (Tb1) na poje<6A>dzie z nap<61>dem
if (OrderCurrentGet() & Connect) // je<6A>li <20><>czenie, skanowa<77> dalej
@@ -2173,9 +2226,7 @@ void TController::SetDriverPsyche()
bool TController::PrepareEngine()
{ // odpalanie silnika
bool OK = false,
voltfront = false,
voltrear = false;
bool OK = false, voltfront = false, voltrear = false;
LastReactionTime = 0.0;
ReactionTime = PrepareTime;
iDrivigFlags |= moveActive; // mo<6D>e skanowa<77> sygna<6E>y i reagowa<77> na komendy
@@ -2596,7 +2647,8 @@ bool TController::IncSpeed()
break;
case ElectricInductionMotor:
if (!mvControlling->FuseFlag)
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
if (Ready || (iDrivigFlags & movePress) ||
(mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
{
OK = mvControlling->IncMainCtrl(1);
}
@@ -2953,7 +3005,8 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne
if (ConversionError == -8)
ErrorLog("Missed timetable: " + NewCommand);
WriteLog("Cannot load timetable file " + NewCommand + "\r\nError " +
std::to_string(ConversionError) + " in position " + std::to_string(TrainParams->StationCount));
std::to_string(ConversionError) + " in position " +
std::to_string(TrainParams->StationCount));
NewCommand = ""; // puste, dla wymiennej tekstury
}
else
@@ -2967,20 +3020,21 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne
NewCommand = Global::asCurrentSceneryPath + NewCommand + ".wav"; // na razie jeden
if (FileExists(NewCommand))
{ // wczytanie d<>wi<77>ku odjazdu podawanego bezpo<70>renido
tsGuardSignal = new TTextSound(NewCommand.c_str(), 30, pVehicle->GetPosition().x,
pVehicle->GetPosition().y, pVehicle->GetPosition().z,
false);
tsGuardSignal =
new TTextSound(NewCommand.c_str(), 30, pVehicle->GetPosition().x,
pVehicle->GetPosition().y, pVehicle->GetPosition().z, false);
// rsGuardSignal->Stop();
iGuardRadio = 0; // nie przez radio
}
else
{
NewCommand = NewCommand.insert(NewCommand.find_last_of("."),"radio"); // wstawienie przed kropk<70>
NewCommand = NewCommand.insert(NewCommand.find_last_of("."),
"radio"); // wstawienie przed kropk<70>
if (FileExists(NewCommand))
{ // wczytanie d<>wi<77>ku odjazdu w wersji radiowej (s<>ycha<68> tylko w kabinie)
tsGuardSignal = new TTextSound(NewCommand.c_str(), -1, pVehicle->GetPosition().x,
pVehicle->GetPosition().y, pVehicle->GetPosition().z,
false);
tsGuardSignal = new TTextSound(
NewCommand.c_str(), -1, pVehicle->GetPosition().x,
pVehicle->GetPosition().y, pVehicle->GetPosition().z, false);
iGuardRadio = iRadioChannel;
}
}
@@ -3884,7 +3938,8 @@ bool TController::UpdateSituation(double dt)
case Change_direction | Connect: // zmiana kierunku podczas pod<6F><64>czania
if (OrderList[OrderPos] != Obey_train) // spokojne manewry
{
VelSignal = Global::Min0RSpeed(VelSignal, 40); // je<6A>li manewry, to ograniczamy pr<70>dko<6B><6F>
VelSignal =
Global::Min0RSpeed(VelSignal, 40); // je<6A>li manewry, to ograniczamy pr<70>dko<6B><6F>
if (AIControllFlag)
{ // to poni<6E>ej tylko dla AI
if (iVehicleCount >= 0) // je<6A>li jest co odczepi<70>
@@ -4018,7 +4073,8 @@ bool TController::UpdateSituation(double dt)
// nast<73>pnie ograniczana
if (TrainParams) // je<6A>li ma rozk<7A>ad
if (TrainParams->TTVmax > 0.0) // i ograniczenie w rozk<7A>adzie
VelDesired = Global::Min0RSpeed(VelDesired,
VelDesired = Global::Min0RSpeed(
VelDesired,
TrainParams->TTVmax); // to nie przekracza<7A> rozkladowej
SetDriverPsyche(); // ustawia AccPreferred (potrzebne tu?)
// Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki pr<70>dkosci
@@ -4086,7 +4142,9 @@ bool TController::UpdateSituation(double dt)
// ma taboru do pod<6F><64>czenia
// Ra 2F1H: z tym (fTrackBlock) to nie jest najlepszy pomys<79>, bo lepiej by
// by<62>o por<6F>wna<6E> z odleg<65>o<EFBFBD>ci<63> od sygnalizatora z przodu
if ((OrderList[OrderPos] & Connect) ? (pVehicles[0]->fTrackBlock > 2000 || pVehicles[0]->fTrackBlock > FirstSemaphorDist) :
if ((OrderList[OrderPos] & Connect) ?
(pVehicles[0]->fTrackBlock > 2000 ||
pVehicles[0]->fTrackBlock > FirstSemaphorDist) :
true)
if ((comm = BackwardScan()) != cm_Unknown) // je<6A>li w drug<75> mo<6D>na jecha<68>
{ // nale<6C>y sprawdza<7A> odleg<65>o<EFBFBD><6F> od znalezionego sygnalizatora,
@@ -4226,16 +4284,18 @@ bool TController::UpdateSituation(double dt)
VelDesired = 0.0; // jak ma czeka<6B>, to nie ma jazdy
// else if (VelSignal<0)
// VelDesired=fVelMax; //ile fabryka dala (Ra: uwzgl<67>dione wagony)
else if (VelSignal >= 0) // je<6A>li sk<73>ad by<62> zatrzymany na pocz<63>tku i teraz ju<6A> mo<6D>e jecha<68>
else if (VelSignal >=
0) // je<6A>li sk<73>ad by<62> zatrzymany na pocz<63>tku i teraz ju<6A> mo<6D>e jecha<68>
VelDesired = Global::Min0RSpeed(VelDesired, VelSignal);
if (mvOccupied->RunningTrack.Velmax >=
0) // ograniczenie pr<70>dko<6B>ci z trajektorii ruchu
VelDesired =
Global::Min0RSpeed(VelDesired,
VelDesired = Global::Min0RSpeed(
VelDesired,
mvOccupied->RunningTrack.Velmax); // uwaga na ograniczenia szlakowej!
if (VelforDriver >= 0) // tu jest zero przy zmianie kierunku jazdy
VelDesired = Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu mo<6D>e by<62> 40, je<6A>li
VelDesired =
Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu mo<6D>e by<62> 40, je<6A>li
// mechanik nie ma znajomo<6D>ci
// szlaaku, albo kierowca je<6A>dzi
// 70
@@ -4247,7 +4307,8 @@ bool TController::UpdateSituation(double dt)
TrainParams
->TTVmax); // jesli nie spozniony to nie przekracza<7A> rozkladowej
if (VelDesired > 0.0)
if ((sSemNext && sSemNext->fVelNext != 0.0) || (iDrivigFlags & moveStopHere)==0)
if ((sSemNext && sSemNext->fVelNext != 0.0) ||
(iDrivigFlags & moveStopHere) == 0)
{ // je<6A>li mo<6D>na jecha<68>, to odpali<6C> d<>wi<77>k kierownika oraz zamkn<6B><6E> drzwi w
// sk<73>adzie, je<6A>li nie mamy czeka<6B> na sygna<6E> te<74> trzeba odpali<6C>
@@ -4536,8 +4597,8 @@ bool TController::UpdateSituation(double dt)
WriteLog("Dist=" + FloatToStrF(ActualProximityDist, ffFixed, 7, 1) +
", VelDesired=" + FloatToStrF(VelDesired, ffFixed, 7, 1) +
", AccDesired=" + FloatToStrF(AccDesired, ffFixed, 7, 3) +
", VelSignal=" + AnsiString(VelSignal) + ", VelNext=" +
AnsiString(VelNext));
", VelSignal=" + AnsiString(VelSignal) +
", VelNext=" + AnsiString(VelNext));
#endif
if (AccDesired > 0.1)
if (vel < 10.0) // Ra 2F1H: je<6A>li pr<70>dko<6B><6F> jest ma<6D>a, a mo<6D>na przyspiesza<7A>,
@@ -4648,7 +4709,8 @@ bool TController::UpdateSituation(double dt)
(AbsAccS >
AccDesired + 0.05))) // u g<>ry ustawia si<73> hamowanie na fAccThreshold
// if not MinVelFlag)
if (fBrakeTime < 0 ? true : (AccDesired < fAccGravity - 0.3) ||
if (fBrakeTime < 0 ? true :
(AccDesired < fAccGravity - 0.3) ||
(mvOccupied->BrakeCtrlPos <= 0))
if (!IncBrake()) // je<6A>li up<75>yn<79><6E> czas reakcji hamulca, chyba <20>e
// nag<61>e albo luzowa<77>
@@ -4683,8 +4745,8 @@ bool TController::UpdateSituation(double dt)
// Mietek-end1
SpeedSet(); // ci<63>gla regulacja pr<70>dko<6B>ci
#if LOGVELOCITY
WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) + ", MainCtrl=" +
AnsiString(mvControlling->MainCtrlPos));
WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) +
", MainCtrl=" + AnsiString(mvControlling->MainCtrlPos));
#endif
/* //Ra: mamy teraz wska<6B>nik na cz<63>on silnikowy, gorzej jak s<> dwa w
@@ -5036,8 +5098,8 @@ TEvent * TController::CheckTrackEventBackward(double fDirection, TTrack *Track)
return NULL;
};
TTrack * TController::BackwardTraceRoute(double &fDistance, double &fDirection,
TTrack *Track, TEvent *&Event)
TTrack *TController::BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
TEvent *&Event)
{ // szukanie sygnalizatora w kierunku przeciwnym jazdy (eventu odczytu kom<6F>rki pami<6D>ci)
TTrack *pTrackChVel = Track; // tor ze zmian<61> pr<70>dko<6B>ci
TTrack *pTrackFrom; // odcinek poprzedni, do znajdywania ko<6B>ca dr<64>g

View File

@@ -10,10 +10,10 @@ http://mozilla.org/MPL/2.0/.
#pragma once
//#include <fstream>
#include <string>
#include "Classes.h"
#include "dumb3d.h"
#include "mczapkie/mover.h"
#include <string>
using namespace Math3D;
using namespace Mtable;
@@ -52,10 +52,12 @@ enum TMovementStatus
moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju)
moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL
moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie
movePushPull = 0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku
movePushPull =
0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku
moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor
moveSemaphorWasElapsed = 0x100000, // minięty został semafor
moveTrainInsideStation = 0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem
moveTrainInsideStation =
0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem
moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością
};
@@ -219,8 +221,8 @@ class TController
// migacz lub czeka na stan zwrotnicy
private:
TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący
TDynamicObject *
pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
TDynamicObject
*pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT)
TMoverParameters *mvOccupied; // jakim pojazdem hamuje
TTrainParameters *TrainParams; // rozkład jazdy zawsze jest, nawet jeśli pusty

View File

@@ -11,17 +11,17 @@ http://mozilla.org/MPL/2.0/.
Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
*/
#include "stdafx.h"
#include "Globals.h"
#include "usefull.h"
//#include "Mover.h"
#include "Driver.h"
#include "Console.h"
#include "World.h"
#include "parser.h"
#include "Driver.h"
#include "Logs.h"
#include "PyInt.h"
#include "World.h"
#include "parser.h"
// namespace Global {
@@ -160,18 +160,10 @@ bool Global::bDecompressDDS = false; // czy programowa dekompresja DDS
// parametry do kalibracji
// kolejno wsp<73><70>czynniki dla pot<6F>g 0, 1, 2, 3 warto<74>ci odczytanej z urz<72>dzenia
double Global::fCalibrateIn[6][6] = {{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0}};
double Global::fCalibrateOut[7][6] = {{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0},
double Global::fCalibrateIn[6][6] = {{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}};
double Global::fCalibrateOut[7][6] = {{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0}};
double Global::fCalibrateOutMax[7] = {0, 0, 0, 0, 0, 0, 0};
int Global::iCalibrateOutDebugInfo = -1;
@@ -186,10 +178,18 @@ bool Global::bHideConsole = false; // hunter-271211: ukrywanie konsoli
int Global::iBpp = 32; // chyba ju<6A> nie u<>ywa si<73> kart, na kt<6B>rych 16bpp co<63> poprawi
// maciek001: konfiguracja wst<73>pna portu COM
bool Global::bMWDdebugEnable = false;
unsigned long int Global::iMWDBaudrate = 500000;
AnsiString Global::sMWDPortId = "COM1"; // nazwa portu z kt<6B>rego korzystamy - na razie nie dzia<69>a
bool Global::bMWDBreakEnable = false; // zmieni<EFBFBD> na FALSE!!! jak ju<6A> b<>dzie dzia<69>a<EFBFBD> wczytywanie z *.ini
double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // warto<74><6F> max potencjometru, warto<74><6F> min potencjometru, rozdzielczo<7A><6F> (max. warto<74><6F> jaka mo<6D>e by<62> -1)
bool Global::bMWDInputDataEnable = false;
unsigned int Global::iMWDBaudrate = 500000;
std::string Global::sMWDPortId = "COM1"; // nazwa portu z kt<6B>rego korzystamy - na razie nie dzia<69>a
bool Global::bMWDBreakEnable =
false; // zmieni<6E> na FALSE!!! jak ju<6A> b<>dzie dzia<69>a<EFBFBD> wczytywanie z *.ini
double Global::fMWDAnalogCalib[4][3] = {
{1023, 0, 1023}, {1023, 0, 1023}, {1023, 0, 1023}, {1023, 0, 1023}}; // warto<74><6F> max
// potencjometru, warto<74><6F>
// min potencjometru,
// rozdzielczo<7A><6F> (max.
// warto<74><6F> jaka mo<6D>e by<62>
// -1)
double Global::fMWDzg[2] = {0.9, 1023};
double Global::fMWDpg[2] = {0.8, 1023};
double Global::fMWDph[2] = {0.6, 1023};
@@ -204,7 +204,8 @@ std::string Global::GetNextSymbol()
{ // pobranie tokenu z aktualnego parsera
std::string token;
if( pParser != nullptr ) {
if (pParser != nullptr)
{
pParser->getTokens();
*pParser >> token;
@@ -223,214 +224,313 @@ void Global::LoadIniFile(std::string asFileName)
ConfigParse(parser);
};
void Global::ConfigParse(cParser &Parser) {
void Global::ConfigParse(cParser &Parser)
{
std::string token;
do {
do
{
token = "";
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
if( token == "sceneryfile" ) {
if (token == "sceneryfile")
{
Parser.getTokens(); Parser >> Global::SceneryFile;
Parser.getTokens();
Parser >> Global::SceneryFile;
}
else if( token == "humanctrlvehicle" ) {
else if (token == "humanctrlvehicle")
{
Parser.getTokens(); Parser >> Global::asHumanCtrlVehicle;
Parser.getTokens();
Parser >> Global::asHumanCtrlVehicle;
}
else if( token == "width" ) {
else if (token == "width")
{
Parser.getTokens( 1, false ); Parser >> Global::iWindowWidth;
Parser.getTokens(1, false);
Parser >> Global::iWindowWidth;
}
else if( token == "height" ) {
else if (token == "height")
{
Parser.getTokens( 1, false ); Parser >> Global::iWindowHeight;
Parser.getTokens(1, false);
Parser >> Global::iWindowHeight;
}
else if( token == "heightbase" ) {
else if (token == "heightbase")
{
Parser.getTokens( 1, false ); Parser >> Global::fDistanceFactor;
Parser.getTokens(1, false);
Parser >> Global::fDistanceFactor;
}
else if( token == "bpp" ) {
else if (token == "bpp")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::iBpp = (token == "32" ? 32 : 16);
}
else if( token == "fullscreen" ) {
else if (token == "fullscreen")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bFullScreen = (token == "yes");
}
else if( token == "freefly" ) { // Mczapkie-130302
else if (token == "freefly")
{ // Mczapkie-130302
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bFreeFly = (token == "yes");
Parser.getTokens(3, false);
Parser >>
Global::pFreeCameraInit[ 0 ].x,
Global::pFreeCameraInit[ 0 ].y,
Parser >> Global::pFreeCameraInit[0].x, Global::pFreeCameraInit[0].y,
Global::pFreeCameraInit[0].z;
}
else if( token == "wireframe" ) {
else if (token == "wireframe")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bWireFrame = (token == "yes");
}
else if( token == "debugmode" ) { // McZapkie! - DebugModeFlag uzywana w mover.pas,
else if (token == "debugmode")
{ // McZapkie! - DebugModeFlag uzywana w mover.pas,
// warto tez blokowac cheaty gdy false
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
DebugModeFlag = (token == "yes");
}
else if( token == "soundenabled" ) { // McZapkie-040302 - blokada dzwieku - przyda
else if (token == "soundenabled")
{ // McZapkie-040302 - blokada dzwieku - przyda
// sie do debugowania oraz na komp. bez karty
// dzw.
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bSoundEnabled = (token == "yes");
}
// else if (str==AnsiString("renderalpha")) //McZapkie-1312302 - dwuprzebiegowe renderowanie
// bRenderAlpha=(GetNextSymbol().LowerCase()==AnsiString("yes"));
else if( token == "physicslog" ) { // McZapkie-030402 - logowanie parametrow
else if (token == "physicslog")
{ // McZapkie-030402 - logowanie parametrow
// fizycznych dla kazdego pojazdu z maszynista
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
WriteLogFlag = (token == "yes");
}
else if( token == "physicsdeactivation" ) { // McZapkie-291103 - usypianie fizyki
else if (token == "physicsdeactivation")
{ // McZapkie-291103 - usypianie fizyki
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
PhysicActivationFlag = (token == "yes");
}
else if( token == "debuglog" ) {
else if (token == "debuglog")
{
// McZapkie-300402 - wylaczanie log.txt
Parser.getTokens(); Parser >> token;
if( token == "yes" ) { Global::iWriteLogEnabled = 3; }
else if( token == "no" ) { Global::iWriteLogEnabled = 0; }
else { Global::iWriteLogEnabled = std::atoi( token.c_str() ); }
Parser.getTokens();
Parser >> token;
if (token == "yes")
{
Global::iWriteLogEnabled = 3;
}
else if( token == "adjustscreenfreq" ) {
else if (token == "no")
{
Global::iWriteLogEnabled = 0;
}
else
{
Global::iWriteLogEnabled = std::atoi(token.c_str());
}
}
else if (token == "adjustscreenfreq")
{
// McZapkie-240403 - czestotliwosc odswiezania ekranu
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bAdjustScreenFreq = (token == "yes");
}
else if( token == "mousescale" ) {
else if (token == "mousescale")
{
// McZapkie-060503 - czulosc ruchu myszy (krecenia glowa)
Parser.getTokens(2, false);
Parser
>> Global::fMouseXScale
>> Global::fMouseYScale;
Parser >> Global::fMouseXScale >> Global::fMouseYScale;
}
else if( token == "enabletraction" ) {
else if (token == "enabletraction")
{
// Winger 040204 - 'zywe' patyki dostosowujace sie do trakcji; Ra 2014-03: teraz <20>amanie
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bEnableTraction = (token == "yes");
}
else if( token == "loadtraction" ) {
else if (token == "loadtraction")
{
// Winger 140404 - ladowanie sie trakcji
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bLoadTraction = (token == "yes");
}
else if( token == "friction" ) { // mno<6E>nik tarcia - KURS90
else if (token == "friction")
{ // mno<6E>nik tarcia - KURS90
Parser.getTokens(1, false);
Parser >> Global::fFriction;
}
else if( token == "livetraction" ) {
else if (token == "livetraction")
{
// Winger 160404 - zaleznosc napiecia loka od trakcji;
// Ra 2014-03: teraz pr<70>d przy braku sieci
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bLiveTraction = (token == "yes");
}
else if( token == "skyenabled" ) {
else if (token == "skyenabled")
{
// youBy - niebo
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::asSky = (token == "yes" ? "1" : "0");
}
else if( token == "managenodes" ) {
else if (token == "managenodes")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bManageNodes = (token == "yes");
}
else if( token == "decompressdds" ) {
else if (token == "decompressdds")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bDecompressDDS = (token == "yes");
}
else if( token == "defaultext" ) {
else if (token == "defaultext")
{
// ShaXbee - domyslne rozszerzenie tekstur
Parser.getTokens(); Parser >> token;
if( token == "tga" ) {
Parser.getTokens();
Parser >> token;
if (token == "tga")
{
// domy<6D>lnie od TGA
Global::szDefaultExt = Global::szTexturesTGA;
}
}
else if( token == "newaircouplers" ) {
else if (token == "newaircouplers")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bnewAirCouplers = (token == "yes");
}
else if( token == "defaultfiltering" ) {
else if (token == "defaultfiltering")
{
Parser.getTokens(1, false);
Parser >> Global::iDefaultFiltering;
}
else if( token == "ballastfiltering" ) {
else if (token == "ballastfiltering")
{
Parser.getTokens(1, false);
Parser >> Global::iBallastFiltering;
}
else if( token == "railprofiltering" ) {
else if (token == "railprofiltering")
{
Parser.getTokens(1, false);
Parser >> Global::iRailProFiltering;
}
else if( token == "dynamicfiltering" ) {
else if (token == "dynamicfiltering")
{
Parser.getTokens(1, false);
Parser >> Global::iDynamicFiltering;
}
else if( token == "usevbo" ) {
else if (token == "usevbo")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bUseVBO = (token == "yes");
}
else if( token == "feedbackmode" ) {
else if (token == "feedbackmode")
{
Parser.getTokens(1, false);
Parser >> Global::iFeedbackMode;
}
else if( token == "feedbackport" ) {
else if (token == "feedbackport")
{
Parser.getTokens(1, false);
Parser >> Global::iFeedbackPort;
}
else if( token == "multiplayer" ) {
else if (token == "multiplayer")
{
Parser.getTokens(1, false);
Parser >> Global::iMultiplayer;
}
else if( token == "maxtexturesize" ) {
else if (token == "maxtexturesize")
{
// wymuszenie przeskalowania tekstur
Parser.getTokens(1, false);
int size; Parser >> size;
if( size <= 64 ) { Global::iMaxTextureSize = 64; }
else if( size <= 128 ) { Global::iMaxTextureSize = 128; }
else if( size <= 256 ) { Global::iMaxTextureSize = 256; }
else if( size <= 512 ) { Global::iMaxTextureSize = 512; }
else if( size <= 1024 ) { Global::iMaxTextureSize = 1024; }
else if( size <= 2048 ) { Global::iMaxTextureSize = 2048; }
else if( size <= 4096 ) { Global::iMaxTextureSize = 4096; }
else if( size <= 8192 ) { Global::iMaxTextureSize = 8192; }
else { Global::iMaxTextureSize = 16384; }
int size;
Parser >> size;
if (size <= 64)
{
Global::iMaxTextureSize = 64;
}
else if( token == "doubleambient" ) {
else if (size <= 128)
{
Global::iMaxTextureSize = 128;
}
else if (size <= 256)
{
Global::iMaxTextureSize = 256;
}
else if (size <= 512)
{
Global::iMaxTextureSize = 512;
}
else if (size <= 1024)
{
Global::iMaxTextureSize = 1024;
}
else if (size <= 2048)
{
Global::iMaxTextureSize = 2048;
}
else if (size <= 4096)
{
Global::iMaxTextureSize = 4096;
}
else if (size <= 8192)
{
Global::iMaxTextureSize = 8192;
}
else
{
Global::iMaxTextureSize = 16384;
}
}
else if (token == "doubleambient")
{
// podw<64>jna jasno<6E><6F> ambient
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bDoubleAmbient = (token == "yes");
}
else if( token == "movelight" ) {
else if (token == "movelight")
{
// numer dnia w roku albo -1
Parser.getTokens(1, false);
Parser >> Global::fMoveLight;
if( Global::fMoveLight == 0.f ) { // pobranie daty z systemu
if (Global::fMoveLight == 0.f)
{ // pobranie daty z systemu
std::time_t timenow = std::time(0);
std::tm *localtime = std::localtime(&timenow);
Global::fMoveLight = localtime->tm_yday + 1; // numer bie<69><65>cego dnia w roku
@@ -440,273 +540,347 @@ void Global::ConfigParse(cParser &Parser) {
// http://naturalfrequency.com/Tregenza_Sharples/Daylight_Algorithms/algorithm_1_11.htm
// Spencer J W Fourier series representation of the position of the sun Search 2 (5)
// 172 (1971)
Global::fMoveLight = M_PI / 182.5 * ( Global::fMoveLight - 1.0 ); // numer dnia w postaci k<>ta
fSunDeclination = 0.006918 - 0.3999120 * std::cos( fMoveLight ) +
0.0702570 * std::sin( fMoveLight ) - 0.0067580 * std::cos( 2 * fMoveLight ) +
0.0009070 * std::sin( 2 * fMoveLight ) -
Global::fMoveLight =
M_PI / 182.5 * (Global::fMoveLight - 1.0); // numer dnia w postaci k<>ta
fSunDeclination =
0.006918 - 0.3999120 * std::cos(fMoveLight) + 0.0702570 * std::sin(fMoveLight) -
0.0067580 * std::cos(2 * fMoveLight) + 0.0009070 * std::sin(2 * fMoveLight) -
0.0026970 * std::cos(3 * fMoveLight) + 0.0014800 * std::sin(3 * fMoveLight);
}
}
else if( token == "smoothtraction" ) {
else if (token == "smoothtraction")
{
// podw<64>jna jasno<6E><6F> ambient
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bSmoothTraction = (token == "yes");
}
else if( token == "timespeed" ) {
else if (token == "timespeed")
{
// przyspieszenie czasu, zmienna do test<73>w
Parser.getTokens(1, false);
Parser >> Global::fTimeSpeed;
}
else if( token == "multisampling" ) {
else if (token == "multisampling")
{
// tryb antyaliasingu: 0=brak,1=2px,2=4px
Parser.getTokens(1, false);
Parser >> Global::iMultisampling;
}
else if( token == "glutfont" ) {
else if (token == "glutfont")
{
// tekst generowany przez GLUT
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bGlutFont = (token == "yes");
}
else if( token == "latitude" ) {
else if (token == "latitude")
{
// szeroko<6B><6F> geograficzna
Parser.getTokens(1, false);
Parser >> Global::fLatitudeDeg;
}
else if( token == "convertmodels" ) {
else if (token == "convertmodels")
{
// tworzenie plik<69>w binarnych
Parser.getTokens(1, false);
Parser >> Global::iConvertModels;
}
else if( token == "inactivepause" ) {
else if (token == "inactivepause")
{
// automatyczna pauza, gdy okno nieaktywne
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bInactivePause = (token == "yes");
}
else if( token == "slowmotion" ) {
else if (token == "slowmotion")
{
// tworzenie plik<69>w binarnych
Parser.getTokens(1, false);
Parser >> Global::iSlowMotionMask;
}
else if( token == "modifytga" ) {
else if (token == "modifytga")
{
// czy korygowa<77> pliki TGA dla szybszego wczytywania
Parser.getTokens(1, false);
Parser >> Global::iModifyTGA;
}
else if( token == "hideconsole" ) {
else if (token == "hideconsole")
{
// hunter-271211: ukrywanie konsoli
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bHideConsole = (token == "yes");
}
else if( token == "oldsmudge" ) {
else if (token == "oldsmudge")
{
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bOldSmudge = (token == "yes");
}
else if( token == "rollfix" ) {
else if (token == "rollfix")
{
// Ra: poprawianie przechy<68>ki, aby wewn<77>trzna szyna by<62>a "pozioma"
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bRollFix = (token == "yes");
}
else if( token == "fpsaverage" ) {
else if (token == "fpsaverage")
{
// oczekiwana wartos<6F> FPS
Parser.getTokens(1, false);
Parser >> Global::fFpsAverage;
}
else if( token == "fpsdeviation" ) {
else if (token == "fpsdeviation")
{
// odchylenie standardowe FPS
Parser.getTokens(1, false);
Parser >> Global::fFpsDeviation;
}
else if( token == "fpsradiusmax" ) {
else if (token == "fpsradiusmax")
{
// maksymalny promie<69> renderowania
Parser.getTokens(1, false);
Parser >> Global::fFpsRadiusMax;
}
else if(token == "calibratein"){
else if (token == "calibratein")
{
// parametry kalibracji wej<65><6A>
Parser.getTokens(1, false);
int in; Parser >> in;
if( ( in < 0 ) || ( in > 5 ) ) {
int in;
Parser >> in;
if ((in < 0) || (in > 5))
{
in = 5; // na ostatni, bo i tak trzeba pomin<69><6E> warto<74>ci
}
Parser.getTokens(4, false);
Parser
>> Global::fCalibrateIn[ in ][ 0 ] // wyraz wolny
Parser >> Global::fCalibrateIn[in][0] // wyraz wolny
>> Global::fCalibrateIn[in][1] // mno<6E>nik
>> Global::fCalibrateIn[in][2] // mno<6E>nik dla kwadratu
>> Global::fCalibrateIn[in][3]; // mno<6E>nik dla sze<7A>cianu
Global::fCalibrateIn[in][4] = 0.0; // mno<6E>nik 4 pot<6F>gi
Global::fCalibrateIn[in][5] = 0.0; // mno<6E>nik 5 pot<6F>gi
}
else if(token == "calibrate5din"){
else if (token == "calibrate5din")
{
// parametry kalibracji wej<65><6A>
Parser.getTokens(1, false);
int in; Parser >> in;
if( ( in < 0 ) || ( in > 5 ) ) {
int in;
Parser >> in;
if ((in < 0) || (in > 5))
{
in = 5; // na ostatni, bo i tak trzeba pomin<69><6E> warto<74>ci
}
Parser.getTokens(6, false);
Parser
>> Global::fCalibrateIn[ in ][ 0 ] // wyraz wolny
Parser >> Global::fCalibrateIn[in][0] // wyraz wolny
>> Global::fCalibrateIn[in][1] // mno<6E>nik
>> Global::fCalibrateIn[in][2] // mno<6E>nik dla kwadratu
>> Global::fCalibrateIn[in][3] // mno<6E>nik dla sze<7A>cianu
>> Global::fCalibrateIn[in][4] // mno<6E>nik 4 pot<6F>gi
>> Global::fCalibrateIn[in][5]; // mno<6E>nik 5 pot<6F>gi
}
else if(token == "calibrateout"){
else if (token == "calibrateout")
{
// parametry kalibracji wyj<79><6A>
Parser.getTokens(1, false);
int out; Parser >> out;
if( ( out < 0 ) || ( out > 6 ) ) {
int out;
Parser >> out;
if ((out < 0) || (out > 6))
{
out = 6; // na ostatni, bo i tak trzeba pomin<69><6E> warto<74>ci
}
Parser.getTokens(4, false);
Parser
>> Global::fCalibrateOut[ out ][ 0 ] // wyraz wolny
Parser >> Global::fCalibrateOut[out][0] // wyraz wolny
>> Global::fCalibrateOut[out][1] // mno<6E>nik liniowy
>> Global::fCalibrateOut[out][2] // mno<6E>nik dla kwadratu
>> Global::fCalibrateOut[out][3]; // mno<6E>nik dla sze<7A>cianu
Global::fCalibrateOut[out][4] = 0.0; // mno<6E>nik dla 4 pot<6F>gi
Global::fCalibrateOut[out][5] = 0.0; // mno<6E>nik dla 5 pot<6F>gi
}
else if(token == "calibrate5dout"){
else if (token == "calibrate5dout")
{
// parametry kalibracji wyj<79><6A>
Parser.getTokens(1, false);
int out; Parser >> out;
if( ( out < 0 ) || ( out > 6 ) ) {
int out;
Parser >> out;
if ((out < 0) || (out > 6))
{
out = 6; // na ostatni, bo i tak trzeba pomin<69><6E> warto<74>ci
}
Parser.getTokens(6, false);
Parser
>> Global::fCalibrateOut[ out ][ 0 ] // wyraz wolny
Parser >> Global::fCalibrateOut[out][0] // wyraz wolny
>> Global::fCalibrateOut[out][1] // mno<6E>nik liniowy
>> Global::fCalibrateOut[out][2] // mno<6E>nik dla kwadratu
>> Global::fCalibrateOut[out][3] // mno<6E>nik dla sze<7A>cianu
>> Global::fCalibrateOut[out][4] // mno<6E>nik dla 4 pot<6F>gi
>> Global::fCalibrateOut[out][5]; // mno<6E>nik dla 5 pot<6F>gi
}
else if(token == "calibrateoutmaxvalues"){
else if (token == "calibrateoutmaxvalues")
{
// maksymalne warto<74>ci jakie mo<6D>na wy<77>wietli<6C> na mierniku
Parser.getTokens(7, false);
Parser
>> Global::fCalibrateOutMax[ 0 ]
>> Global::fCalibrateOutMax[ 1 ]
>> Global::fCalibrateOutMax[ 2 ]
>> Global::fCalibrateOutMax[ 3 ]
>> Global::fCalibrateOutMax[ 4 ]
>> Global::fCalibrateOutMax[ 5 ]
>> Global::fCalibrateOutMax[ 6 ];
Parser >> Global::fCalibrateOutMax[0] >> Global::fCalibrateOutMax[1] >>
Global::fCalibrateOutMax[2] >> Global::fCalibrateOutMax[3] >>
Global::fCalibrateOutMax[4] >> Global::fCalibrateOutMax[5] >>
Global::fCalibrateOutMax[6];
}
else if( token == "calibrateoutdebuginfo" ) {
else if (token == "calibrateoutdebuginfo")
{
// wyj<79>cie z info o przebiegu kalibracji
Parser.getTokens(1, false);
Parser >> Global::iCalibrateOutDebugInfo;
}
else if( token == "pwm" ) {
else if (token == "pwm")
{
// zmiana numer<65>w wyj<79><6A> PWM
Parser.getTokens(2, false);
int pwm_out, pwm_no;
Parser
>> pwm_out
>> pwm_no;
Parser >> pwm_out >> pwm_no;
Global::iPoKeysPWM[pwm_out] = pwm_no;
}
else if( token == "brakestep" ) {
else if (token == "brakestep")
{
// krok zmiany hamulca dla klawiszy [Num3] i [Num9]
Parser.getTokens(1, false);
Parser >> Global::fBrakeStep;
}
else if( token == "joinduplicatedevents" ) {
else if (token == "joinduplicatedevents")
{
// czy grupowa<77> eventy o tych samych nazwach
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
Global::bJoinEvents = (token == "yes");
}
else if( token == "hiddenevents" ) {
else if (token == "hiddenevents")
{
// czy <20><>czy<7A> eventy z torami poprzez nazw<7A> toru
Parser.getTokens(1, false);
Parser >> Global::iHiddenEvents;
}
else if( token == "pause" ) {
else if (token == "pause")
{
// czy po wczytaniu ma by<62> pauza?
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
iPause |= (token == "yes" ? 1 : 0);
}
else if( token == "lang" ) {
else if (token == "lang")
{
// domy<6D>lny j<>zyk - http://tools.ietf.org/html/bcp47
Parser.getTokens(1, false);
Parser >> Global::asLang;
}
else if( token == "opengl" ) {
else if (token == "opengl")
{
// deklarowana wersja OpenGL, <20>eby powstrzyma<6D> b<><62>dy
Parser.getTokens(1, false);
Parser >> Global::fOpenGL;
}
else if( token == "pyscreenrendererpriority" ) {
else if (token == "pyscreenrendererpriority")
{
// priority of python screen renderer
Parser.getTokens(); Parser >> token;
Parser.getTokens();
Parser >> token;
TPythonInterpreter::getInstance()->setScreenRendererPriority(token.c_str());
}
else if( token == "background" ) {
else if (token == "background")
{
Parser.getTokens(3, false);
Parser
>> Global::Background[ 0 ] // r
Parser >> Global::Background[0] // r
>> Global::Background[1] // g
>> Global::Background[2]; // b
}
// maciek001: ustawienia MWD
else if (str == AnsiString("mwddebug")){ // czy w<><77>czy<7A> obs<62>ug<75> hamulc<6C>w
bMWDdebugEnable = (GetNextSymbol().LowerCase() == AnsiString("yes"));
}else if (str == AnsiString("comportname"))
else if (token == "mwddebug")
{ // czy w<><77>czy<7A> obs<62>ug<75> hamulc<6C>w
Parser.getTokens();
Parser >> token;
bMWDdebugEnable = (token == "yes");
}
else if (token == "comportname")
{
sMWDPortId = GetNextSymbol().LowerCase();
if (bMWDdebugEnable) WriteLog("PortName " + AnsiString(sMWDPortId));
}else if (str == AnsiString("mwdbaudrate")){ // pobierz pr<70>dko<6B><6F> transmisji danych
iMWDBaudrate = GetNextSymbol().ToInt();
if (bMWDdebugEnable) WriteLog("PortName " + AnsiString(iMWDBaudrate));
}else if (str == AnsiString("mwdbreakenable")){ // czy w<><77>czy<7A> obs<62>ug<75> hamulc<6C>w
bMWDBreakEnable = (GetNextSymbol().LowerCase() == AnsiString("yes"));
}else if (str == AnsiString("mwdinputenable")){
bMWDInputDataEnable = (GetNextSymbol().LowerCase() == AnsiString("yes"));
}else if(str == AnsiString("mwdbreak")) // warto<74><6F> max dla potencjometru hamulca zasadniczego
Parser.getTokens();
Parser >> sMWDPortId;
if (bMWDdebugEnable)
WriteLog("PortName " + sMWDPortId);
}
else if (token == "mwdbaudrate")
{ // pobierz pr<70>dko<6B><6F> transmisji danych
Parser.getTokens(1, false);
Parser >> iMWDBaudrate;
if (bMWDdebugEnable)
WriteLog("PortName " + to_string(iMWDBaudrate));
}
else if (token == "mwdbreakenable")
{ // czy w<><77>czy<7A> obs<62>ug<75> hamulc<6C>w
Parser.getTokens();
Parser >> token;
bMWDBreakEnable = (token == "yes");
}
else if (token == "mwdinputenable")
{
i = GetNextSymbol().ToIntDef(-1); // numer wej<65>cia
if ((i >= 0) || (i <= 1)){
fMWDAnalogCalib[i][0] = GetNextSymbol().ToDouble(); // max -> 2^16 -1
fMWDAnalogCalib[i][1] = GetNextSymbol().ToDouble(); // min -> 0
fMWDAnalogCalib[i][2] = GetNextSymbol().ToDouble(); // rozdzielczo<7A><6F> -> 255 maksymalna mo<6D>liwa warto<74><6F> z ADC
if (bMWDdebugEnable) WriteLog("Break settings " + AnsiString(i) + AnsiString(": ") + AnsiString(fMWDAnalogCalib[i][0]) + AnsiString(" ") + AnsiString(fMWDAnalogCalib[i][1]) + AnsiString(" ") + AnsiString(fMWDAnalogCalib[i][2]));
Parser.getTokens();
Parser >> token;
bMWDInputDataEnable = (token == "yes");
}
else if (token == "mwdbreak") // warto<74><6F> max dla potencjometru hamulca zasadniczego
{
Parser.getTokens();
Parser >> token;
int i = stol_def(token, -1); // numer wej<65>cia
if ((i >= 0) || (i <= 1))
{
Parser.getTokens(3, false);
Parser >> fMWDAnalogCalib[i][0] // max -> 2^16 -1
>> fMWDAnalogCalib[i][1] // min -> 0
>>
fMWDAnalogCalib[i][2]; // rozdzielczo<7A><6F> -> 255 maksymalna mo<6D>liwa warto<74><6F> 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(str == AnsiString("mwdzbiornikglowny")){
fMWDzg[0] = GetNextSymbol().ToDouble();
fMWDzg[1] = GetNextSymbol().ToDouble();
if (bMWDdebugEnable) WriteLog("AirTank settings: " + AnsiString(fMWDzg[0]) + AnsiString(" ") + AnsiString(fMWDzg[1]));
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(str == AnsiString("mwdprzewodglowny")){
fMWDpg[0] = GetNextSymbol().ToDouble();
fMWDpg[1] = GetNextSymbol().ToDouble();
if (bMWDdebugEnable) WriteLog("MainAirPipe settings: " + AnsiString(fMWDpg[0]) + AnsiString(" ") + AnsiString(fMWDpg[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(str == AnsiString("mwdcylinderhamulcowy")){
fMWDph[0] = GetNextSymbol().ToDouble();
fMWDph[1] = GetNextSymbol().ToDouble();
if (bMWDdebugEnable) WriteLog("AirPipe settings: " + AnsiString(fMWDph[0]) + AnsiString(" ") + AnsiString(fMWDph[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(str == AnsiString("mwdwoltomierzwn")){
fMWDvolt[0] = GetNextSymbol().ToDouble();
fMWDvolt[1] = GetNextSymbol().ToDouble();
if (bMWDdebugEnable) WriteLog("Volt settings: " + AnsiString(fMWDvolt[0]) + AnsiString(" ") + AnsiString(fMWDvolt[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(str == AnsiString("mwdamperomierzwn")){
fMWDamp[0] = GetNextSymbol().ToDouble();
fMWDamp[1] = GetNextSymbol().ToDouble();
if (bMWDdebugEnable) WriteLog("Amp settings: " + AnsiString(fMWDamp[0]) + AnsiString(" ") + AnsiString(fMWDamp[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]));
}
}
while( ( token != "" )
&& ( token != "endconfig" ) ); //(!Parser->EndOfFile)
} while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile)
// na koniec troch<63> zale<6C>no<6E>ci
if (!bLoadTraction) // wczytywanie drut<75>w i s<>up<75>w
{ // tutaj wy<77><79>czenie, bo mog<6F> nie by<62> zdefiniowane w INI
@@ -1085,8 +1259,14 @@ std::string Global::Bezogonkow(std::string str, bool _)
double Global::Min0RSpeed(double vel1, double vel2)
{ // rozszerzenie funkcji Min0R o warto<74>ci -1.0
if( vel1 == -1.0 ) { vel1 = std::numeric_limits<double>::max(); }
if( vel2 == -1.0 ) { vel2 = std::numeric_limits<double>::max(); }
if (vel1 == -1.0)
{
vel1 = std::numeric_limits<double>::max();
}
if (vel2 == -1.0)
{
vel2 = std::numeric_limits<double>::max();
}
return Min0R(vel1, vel2);
};

View File

@@ -317,8 +317,8 @@ class Global
// maciek001: zmienne dla MWD
static bool bMWDdebugEnable;
static unsigned long int iMWDBaudrate;
static AnsiString sMWDPortId;
static unsigned int iMWDBaudrate;
static std::string sMWDPortId;
static bool bMWDBreakEnable;
static bool bMWDInputDataEnable;
static double fMWDAnalogCalib[4][3];

1006
Train.cpp

File diff suppressed because it is too large Load Diff

28
Train.h
View File

@@ -12,18 +12,18 @@ http://mozilla.org/MPL/2.0/.
//#include "Track.h"
//#include "TrkFoll.h"
#include "Model3d.h"
#include "Spring.h"
#include "Gauge.h"
#include "Button.h"
#include "DynObj.h"
#include "Gauge.h"
#include "Model3d.h"
#include "Spring.h"
#include "mtable.h"
#include "Sound.h"
#include "AdvSound.h"
#include "RealSound.h"
#include "FadeSound.h"
#include "PyInt.h"
#include "RealSound.h"
#include "Sound.h"
#include <string>
// typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State;
@@ -104,14 +104,13 @@ class TTrain
private:
// clears state of all cabin controls
void
clear_cab_controls();
// initializes a gauge matching provided label. returns: true if the label was found, false otherwise
bool
initialize_gauge( cParser &Parser, std::string const &Label, int const Cabindex );
// initializes a button matching provided label. returns: true if the label was found, false otherwise
bool
initialize_button( cParser &Parser, std::string const &Label, int const Cabindex );
void clear_cab_controls();
// initializes a gauge matching provided label. returns: true if the label was found, false
// otherwise
bool initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex);
// initializes a button matching provided label. returns: true if the label was found, false
// otherwise
bool initialize_button(cParser &Parser, std::string const &Label, int const Cabindex);
private: //瞠by go nic z zewn靖rz nie przestawia這
TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5]
@@ -396,7 +395,8 @@ private:
float fHVoltage; // napi?cie dla dynamicznych ga?ek
float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3
float fEngine[4]; // obroty te? trzeba pobra?
int iCarNo, iPowerNo, iUnitNo; //liczba pojazdow, czlonow napednych i jednostek spi皻ych ze sob<6F>
int iCarNo, iPowerNo, iUnitNo; // liczba pojazdow, czlonow napednych i jednostek spi皻ych ze
// sob<6F>
bool bDoors[20][3]; // drzwi dla wszystkich czlonow
int iUnits[20]; // numer jednostki
int iDoorNo[20]; // liczba drzwi