mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 19:49:19 +02:00
merge fixes (but still buggy)
This commit is contained in:
123
Train.cpp
123
Train.cpp
@@ -3313,6 +3313,7 @@ if
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cab movement update, fixed step part
|
||||||
void TTrain::UpdateMechPosition(double dt)
|
void TTrain::UpdateMechPosition(double dt)
|
||||||
{ // Ra: mechanik powinien być
|
{ // Ra: mechanik powinien być
|
||||||
// telepany niezależnie od pozycji
|
// telepany niezależnie od pozycji
|
||||||
@@ -3326,19 +3327,18 @@ void TTrain::UpdateMechPosition(double dt)
|
|||||||
// - na postoju horyzont prosto, kabina skosem
|
// - na postoju horyzont prosto, kabina skosem
|
||||||
// - przy szybkiej jeździe kabina prosto, horyzont pochylony
|
// - przy szybkiej jeździe kabina prosto, horyzont pochylony
|
||||||
|
|
||||||
vector3 pNewMechPosition;
|
|
||||||
Math3D::vector3 shake;
|
Math3D::vector3 shake;
|
||||||
// McZapkie: najpierw policzę pozycję w/m kabiny
|
// McZapkie: najpierw policzę pozycję w/m kabiny
|
||||||
|
|
||||||
// ABu: rzucamy kabina tylko przy duzym FPS!
|
// ABu: rzucamy kabina tylko przy duzym FPS!
|
||||||
// Mala histereza, zeby bez przerwy nie przelaczalo przy FPS~17
|
// Mala histereza, zeby bez przerwy nie przelaczalo przy FPS~17
|
||||||
// Granice mozna ustalic doswiadczalnie. Ja proponuje 14:20
|
// Granice mozna ustalic doswiadczalnie. Ja proponuje 14:20
|
||||||
double const iVel = std::min(DynamicObject->GetVelocity(), 150.0);
|
double const iVel = std::min( DynamicObject->GetVelocity(), 150.0 );
|
||||||
|
|
||||||
if (!Global::iSlowMotion // musi być pełna prędkość
|
if( !Global::iSlowMotion // musi być pełna prędkość
|
||||||
&& (pMechOffset.y < 4.0)) // Ra 15-01: przy oglądaniu pantografu bujanie przeszkadza
|
&& ( pMechOffset.y < 4.0 ) ) // Ra 15-01: przy oglądaniu pantografu bujanie przeszkadza
|
||||||
{
|
{
|
||||||
if( iVel > 0.0 ) {
|
if( iVel > 0.5 ) {
|
||||||
// acceleration-driven base shake
|
// acceleration-driven base shake
|
||||||
shake += 1.25 * MechSpring.ComputateForces(
|
shake += 1.25 * MechSpring.ComputateForces(
|
||||||
vector3(
|
vector3(
|
||||||
@@ -3353,96 +3353,85 @@ void TTrain::UpdateMechPosition(double dt)
|
|||||||
vector3(
|
vector3(
|
||||||
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringX,
|
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringX,
|
||||||
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringY,
|
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringY,
|
||||||
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringZ ),
|
( Random( iVel * 2 ) - iVel ) / ( ( iVel * 2 ) * 4 ) * fMechSpringZ )
|
||||||
|
* 1.25,
|
||||||
pMechShake );
|
pMechShake );
|
||||||
// * (( 200 - DynamicObject->MyTrack->iQualityFlag ) * 0.0075 ); // scale to 75-150% based on track quality
|
// * (( 200 - DynamicObject->MyTrack->iQualityFlag ) * 0.0075 ); // scale to 75-150% based on track quality
|
||||||
}
|
}
|
||||||
// shake *= 1.25;
|
// shake *= 0.85;
|
||||||
}
|
}
|
||||||
vMechVelocity -= (shake + vMechVelocity * 100) * (fMechSpringX + fMechSpringY + fMechSpringZ) / (200);
|
vMechVelocity -= ( shake + vMechVelocity * 100 ) * ( fMechSpringX + fMechSpringY + fMechSpringZ ) / ( 200 );
|
||||||
// vMechVelocity -= vMechVelocity * iVel * dt;
|
// shake *= 0.95 * dt; // shake damping
|
||||||
// shake *= 0.95 * dt; // shake damping
|
|
||||||
|
|
||||||
// McZapkie:
|
// McZapkie:
|
||||||
pMechShake += vMechVelocity * dt;
|
pMechShake += vMechVelocity * dt;
|
||||||
// Ra 2015-01: dotychczasowe rzucanie
|
// Ra 2015-01: dotychczasowe rzucanie
|
||||||
pMechOffset += vMechMovement * dt;
|
pMechOffset += vMechMovement * dt;
|
||||||
if ((pMechShake.y > fMechMaxSpring) || (pMechShake.y < -fMechMaxSpring))
|
if( ( pMechShake.y > fMechMaxSpring ) || ( pMechShake.y < -fMechMaxSpring ) )
|
||||||
vMechVelocity.y = -vMechVelocity.y;
|
vMechVelocity.y = -vMechVelocity.y;
|
||||||
// ABu011104: 5*pMechShake.y, zeby ladnie pudlem rzucalo :)
|
// ABu011104: 5*pMechShake.y, zeby ladnie pudlem rzucalo :)
|
||||||
pMechPosition = pMechOffset + vector3( 1.5 * pMechShake.x, 2.0 * pMechShake.y, 1.5 * pMechShake.z );
|
pMechPosition = pMechOffset + vector3( 1.5 * pMechShake.x, 2.0 * pMechShake.y, 1.5 * pMechShake.z );
|
||||||
// vMechMovement = 0.5 * vMechMovement;
|
// vMechMovement = 0.5 * vMechMovement;
|
||||||
}
|
}
|
||||||
else
|
else { // hamowanie rzucania przy spadku FPS
|
||||||
{ // hamowanie rzucania przy spadku FPS
|
pMechShake -= pMechShake * std::min( dt, 1.0 ); // po tym chyba potrafią zostać jakieś ułamki, które powodują zjazd
|
||||||
pMechShake -= pMechShake * std::min(dt, 1.0); // po tym chyba potrafią zostać jakieś ułamki, które powodują zjazd
|
|
||||||
pMechOffset += vMechMovement * dt;
|
pMechOffset += vMechMovement * dt;
|
||||||
vMechVelocity.y = 0.5 * vMechVelocity.y;
|
vMechVelocity.y = 0.5 * vMechVelocity.y;
|
||||||
pMechPosition = pMechOffset + vector3( pMechShake.x, 5 * pMechShake.y, pMechShake.z );
|
pMechPosition = pMechOffset + vector3( pMechShake.x, 5 * pMechShake.y, pMechShake.z );
|
||||||
// vMechMovement = 0.5 * vMechMovement;
|
// vMechMovement = 0.5 * vMechMovement;
|
||||||
}
|
}
|
||||||
// numer kabiny (-1: kabina B)
|
// numer kabiny (-1: kabina B)
|
||||||
if (DynamicObject->Mechanik) // może nie być?
|
if( DynamicObject->Mechanik ) // może nie być?
|
||||||
if (DynamicObject->Mechanik->AIControllFlag) // jeśli prowadzi AI
|
if( DynamicObject->Mechanik->AIControllFlag ) // jeśli prowadzi AI
|
||||||
{ // Ra: przesiadka, jeśli AI zmieniło kabinę (a człon?)...
|
{ // Ra: przesiadka, jeśli AI zmieniło kabinę (a człon?)...
|
||||||
if (iCabn != (DynamicObject->MoverParameters->ActiveCab == -1 ?
|
if( iCabn != ( DynamicObject->MoverParameters->ActiveCab == -1 ?
|
||||||
2 :
|
2 :
|
||||||
DynamicObject->MoverParameters->ActiveCab))
|
DynamicObject->MoverParameters->ActiveCab ) )
|
||||||
InitializeCab(DynamicObject->MoverParameters->ActiveCab,
|
InitializeCab( DynamicObject->MoverParameters->ActiveCab,
|
||||||
DynamicObject->asBaseDir + DynamicObject->MoverParameters->TypeName +
|
DynamicObject->asBaseDir + DynamicObject->MoverParameters->TypeName +
|
||||||
".mmd");
|
".mmd" );
|
||||||
}
|
}
|
||||||
iCabn = (DynamicObject->MoverParameters->ActiveCab == -1 ?
|
iCabn = ( DynamicObject->MoverParameters->ActiveCab == -1 ?
|
||||||
2 :
|
2 :
|
||||||
DynamicObject->MoverParameters->ActiveCab);
|
DynamicObject->MoverParameters->ActiveCab );
|
||||||
if (!DebugModeFlag)
|
if( !DebugModeFlag ) { // sprawdzaj więzy //Ra: nie tu!
|
||||||
{ // sprawdzaj więzy //Ra: nie tu!
|
if( pMechPosition.x < Cabine[ iCabn ].CabPos1.x )
|
||||||
if (pNewMechPosition.x < Cabine[iCabn].CabPos1.x)
|
pMechPosition.x = Cabine[ iCabn ].CabPos1.x;
|
||||||
pNewMechPosition.x = Cabine[iCabn].CabPos1.x;
|
if( pMechPosition.x > Cabine[ iCabn ].CabPos2.x )
|
||||||
if (pNewMechPosition.x > Cabine[iCabn].CabPos2.x)
|
pMechPosition.x = Cabine[ iCabn ].CabPos2.x;
|
||||||
pNewMechPosition.x = Cabine[iCabn].CabPos2.x;
|
if( pMechPosition.z < Cabine[ iCabn ].CabPos1.z )
|
||||||
if (pNewMechPosition.z < Cabine[iCabn].CabPos1.z)
|
pMechPosition.z = Cabine[ iCabn ].CabPos1.z;
|
||||||
pNewMechPosition.z = Cabine[iCabn].CabPos1.z;
|
if( pMechPosition.z > Cabine[ iCabn ].CabPos2.z )
|
||||||
if (pNewMechPosition.z > Cabine[iCabn].CabPos2.z)
|
pMechPosition.z = Cabine[ iCabn ].CabPos2.z;
|
||||||
pNewMechPosition.z = Cabine[iCabn].CabPos2.z;
|
if( pMechPosition.y > Cabine[ iCabn ].CabPos1.y + 1.8 )
|
||||||
if (pNewMechPosition.y > Cabine[iCabn].CabPos1.y + 1.8)
|
pMechPosition.y = Cabine[ iCabn ].CabPos1.y + 1.8;
|
||||||
pNewMechPosition.y = Cabine[iCabn].CabPos1.y + 1.8;
|
if( pMechPosition.y < Cabine[ iCabn ].CabPos1.y + 0.5 )
|
||||||
if (pNewMechPosition.y < Cabine[iCabn].CabPos1.y + 0.5)
|
pMechPosition.y = Cabine[ iCabn ].CabPos2.y + 0.5;
|
||||||
pNewMechPosition.y = Cabine[iCabn].CabPos2.y + 0.5;
|
|
||||||
|
|
||||||
if (pMechOffset.x < Cabine[iCabn].CabPos1.x)
|
if( pMechOffset.x < Cabine[ iCabn ].CabPos1.x )
|
||||||
pMechOffset.x = Cabine[iCabn].CabPos1.x;
|
pMechOffset.x = Cabine[ iCabn ].CabPos1.x;
|
||||||
if (pMechOffset.x > Cabine[iCabn].CabPos2.x)
|
if( pMechOffset.x > Cabine[ iCabn ].CabPos2.x )
|
||||||
pMechOffset.x = Cabine[iCabn].CabPos2.x;
|
pMechOffset.x = Cabine[ iCabn ].CabPos2.x;
|
||||||
if (pMechOffset.z < Cabine[iCabn].CabPos1.z)
|
if( pMechOffset.z < Cabine[ iCabn ].CabPos1.z )
|
||||||
pMechOffset.z = Cabine[iCabn].CabPos1.z;
|
pMechOffset.z = Cabine[ iCabn ].CabPos1.z;
|
||||||
if (pMechOffset.z > Cabine[iCabn].CabPos2.z)
|
if( pMechOffset.z > Cabine[ iCabn ].CabPos2.z )
|
||||||
pMechOffset.z = Cabine[iCabn].CabPos2.z;
|
pMechOffset.z = Cabine[ iCabn ].CabPos2.z;
|
||||||
if (pMechOffset.y > Cabine[iCabn].CabPos1.y + 1.8)
|
if( pMechOffset.y > Cabine[ iCabn ].CabPos1.y + 1.8 )
|
||||||
pMechOffset.y = Cabine[iCabn].CabPos1.y + 1.8;
|
pMechOffset.y = Cabine[ iCabn ].CabPos1.y + 1.8;
|
||||||
if (pMechOffset.y < Cabine[iCabn].CabPos1.y + 0.5)
|
if( pMechOffset.y < Cabine[ iCabn ].CabPos1.y + 0.5 )
|
||||||
pMechOffset.y = Cabine[iCabn].CabPos2.y + 0.5;
|
pMechOffset.y = Cabine[ iCabn ].CabPos2.y + 0.5;
|
||||||
}
|
}
|
||||||
pMechPosition = DynamicObject->mMatrix *
|
|
||||||
pNewMechPosition; // położenie względem środka pojazdu w układzie scenerii
|
|
||||||
pMechPosition += DynamicObject->GetPosition();
|
|
||||||
|
|
||||||
// framerate-independent speed reduction that doesn't break at high framerates...
|
|
||||||
Math3D::vector3 movementslowdown = vMechMovement * 35 * dt;
|
|
||||||
if( movementslowdown.LengthSquared() >= vMechMovement.LengthSquared() ) {
|
|
||||||
// if the reduction vector exceeds speed movement we're running at low fps,
|
|
||||||
// fallback on the old behaviour
|
|
||||||
vMechMovement *= 0.5;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vMechMovement -= movementslowdown;
|
|
||||||
if( vMechMovement.LengthSquared() < 0.01 ) {
|
|
||||||
vMechMovement = Math3D::vector3();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// returns position of the mechanic in the scene coordinates
|
||||||
|
vector3
|
||||||
|
TTrain::GetWorldMechPosition() {
|
||||||
|
|
||||||
|
vector3 position = DynamicObject->mMatrix *pMechPosition; // położenie względem środka pojazdu w układzie scenerii
|
||||||
|
position += DynamicObject->GetPosition();
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
bool TTrain::Update( double const Deltatime )
|
bool TTrain::Update( double const Deltatime )
|
||||||
{
|
{
|
||||||
// check for sent user commands
|
// check for sent user commands
|
||||||
|
|||||||
170
World.cpp
170
World.cpp
@@ -13,12 +13,8 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
|
||||||
#include "GL/glew.h"
|
|
||||||
#include "GL/glut.h"
|
|
||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Logs.h"
|
#include "Logs.h"
|
||||||
#include "MdlMngr.h"
|
#include "MdlMngr.h"
|
||||||
@@ -51,7 +47,7 @@ simulation_time Time;
|
|||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); //m7todo: potrzebne do directsound
|
GLFWAPI HWND glfwGetWin32Window( GLFWwindow* window ); //m7todo: potrzebne do directsound
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -356,7 +352,7 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
|||||||
Error("Player train doesn't exist!");
|
Error("Player train doesn't exist!");
|
||||||
}
|
}
|
||||||
FreeFlyModeFlag = true; // Ra: automatycznie włączone latanie
|
FreeFlyModeFlag = true; // Ra: automatycznie włączone latanie
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers( window );
|
||||||
Controlled = NULL;
|
Controlled = NULL;
|
||||||
mvControlled = NULL;
|
mvControlled = NULL;
|
||||||
Camera.Type = tp_Free;
|
Camera.Type = tp_Free;
|
||||||
@@ -454,7 +450,7 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
// TODO: redo the input system
|
// TODO: redo the input system
|
||||||
if( ( cKey >= GLFW_KEY_0 ) && ( cKey <= GLFW_KEY_9 ) ) // klawisze cyfrowe
|
if( ( cKey >= GLFW_KEY_0 ) && ( cKey <= GLFW_KEY_9 ) ) // klawisze cyfrowe
|
||||||
{
|
{
|
||||||
int i = cKey - '0'; // numer klawisza
|
int i = cKey - GLFW_KEY_0; // numer klawisza
|
||||||
if (Global::shiftState)
|
if (Global::shiftState)
|
||||||
{ // z [Shift] uruchomienie eventu
|
{ // z [Shift] uruchomienie eventu
|
||||||
if (!Global::iPause) // podczas pauzy klawisze nie działają
|
if (!Global::iPause) // podczas pauzy klawisze nie działają
|
||||||
@@ -463,11 +459,12 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
}
|
}
|
||||||
else // zapamiętywanie kamery może działać podczas pauzy
|
else // zapamiętywanie kamery może działać podczas pauzy
|
||||||
if (FreeFlyModeFlag) // w trybie latania można przeskakiwać do ustawionych kamer
|
if (FreeFlyModeFlag) // w trybie latania można przeskakiwać do ustawionych kamer
|
||||||
if ((Global::iTextMode != GLFW_KEY_F12) &&
|
if( ( Global::iTextMode != GLFW_KEY_F12 ) &&
|
||||||
(Global::iTextMode != GLFW_KEY_F3)) // ograniczamy użycie kamer
|
( Global::iTextMode != GLFW_KEY_F3 ) ) // ograniczamy użycie kamer
|
||||||
{
|
{
|
||||||
if ((!Global::FreeCameraInit[i].x && !Global::FreeCameraInit[i].y &&
|
if ((!Global::FreeCameraInit[i].x)
|
||||||
!Global::FreeCameraInit[i].z))
|
&& (!Global::FreeCameraInit[i].y)
|
||||||
|
&& (!Global::FreeCameraInit[i].z))
|
||||||
{ // jeśli kamera jest w punkcie zerowym, zapamiętanie współrzędnych i kątów
|
{ // jeśli kamera jest w punkcie zerowym, zapamiętanie współrzędnych i kątów
|
||||||
Global::FreeCameraInit[i] = Camera.Pos;
|
Global::FreeCameraInit[i] = Camera.Pos;
|
||||||
Global::FreeCameraInitAngle[i].x = Camera.Pitch;
|
Global::FreeCameraInitAngle[i].x = Camera.Pitch;
|
||||||
@@ -475,15 +472,13 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
Global::FreeCameraInitAngle[i].z = Camera.Roll;
|
Global::FreeCameraInitAngle[i].z = Camera.Roll;
|
||||||
// logowanie, żeby można było do scenerii przepisać
|
// logowanie, żeby można było do scenerii przepisać
|
||||||
WriteLog(
|
WriteLog(
|
||||||
"camera " + std::to_string( Global::FreeCameraInit[i].x ) + " " +
|
"camera " + std::to_string( Global::FreeCameraInit[i].x ) + " "
|
||||||
std::to_string(Global::FreeCameraInit[i].y ) + " " +
|
+ std::to_string(Global::FreeCameraInit[i].y ) + " "
|
||||||
std::to_string(Global::FreeCameraInit[i].z ) + " " +
|
+ std::to_string(Global::FreeCameraInit[i].z ) + " "
|
||||||
std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].x)) +
|
+ std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].x)) + " "
|
||||||
" " +
|
+ std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].y)) + " "
|
||||||
std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].y)) +
|
+ std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].z)) + " "
|
||||||
" " +
|
+ std::to_string(i) + " endcamera");
|
||||||
std::to_string(RadToDeg(Global::FreeCameraInitAngle[i].z)) +
|
|
||||||
" " + std::to_string(i) + " endcamera");
|
|
||||||
}
|
}
|
||||||
else // również przeskakiwanie
|
else // również przeskakiwanie
|
||||||
{ // Ra: to z tą kamerą (Camera.Pos i Global::pCameraPosition) jest trochę bez sensu
|
{ // Ra: to z tą kamerą (Camera.Pos i Global::pCameraPosition) jest trochę bez sensu
|
||||||
@@ -496,24 +491,24 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
}
|
}
|
||||||
// będzie jeszcze załączanie sprzęgów z [Ctrl]
|
// będzie jeszcze załączanie sprzęgów z [Ctrl]
|
||||||
}
|
}
|
||||||
else if (cKey >= GLFW_KEY_F1 && cKey <= GLFW_KEY_F12)
|
else if( ( cKey >= GLFW_KEY_F1 ) && ( cKey <= GLFW_KEY_F12 ) )
|
||||||
{
|
{
|
||||||
switch (cKey) {
|
switch (cKey) {
|
||||||
|
|
||||||
case GLFW_KEY_F1: {
|
case GLFW_KEY_F1: {
|
||||||
if( DebugModeFlag ) {
|
if( DebugModeFlag ) {
|
||||||
// additional time speedup keys in debug mode
|
// additional time speedup keys in debug mode
|
||||||
if (Global::ctrlState) {
|
if( Global::ctrlState ) {
|
||||||
// ctrl-f3
|
// ctrl-f3
|
||||||
simulation::Time.update( 20.0 * 60.0 );
|
simulation::Time.update( 20.0 * 60.0 );
|
||||||
}
|
}
|
||||||
else if (Global::shiftState) {
|
else if( Global::shiftState ) {
|
||||||
// shift-f3
|
// shift-f3
|
||||||
simulation::Time.update( 5.0 * 60.0 );
|
simulation::Time.update( 5.0 * 60.0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( (!Global::ctrlState)
|
if( ( false == Global::ctrlState )
|
||||||
&& (!Global::shiftState) ) {
|
&& ( false == Global::shiftState ) ) {
|
||||||
// czas i relacja
|
// czas i relacja
|
||||||
if( Global::iTextMode == cKey ) { ++Global::iScreenMode[ cKey - GLFW_KEY_F1 ]; }
|
if( Global::iTextMode == cKey ) { ++Global::iScreenMode[ cKey - GLFW_KEY_F1 ]; }
|
||||||
if( Global::iScreenMode[ cKey - GLFW_KEY_F1 ] > 1 ) {
|
if( Global::iScreenMode[ cKey - GLFW_KEY_F1 ] > 1 ) {
|
||||||
@@ -665,12 +660,12 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (cKey!=GLFW_KEY_F4)
|
// if (cKey!=VK_F4)
|
||||||
return; // nie są przekazywane do pojazdu wcale
|
return; // nie są przekazywane do pojazdu wcale
|
||||||
}
|
}
|
||||||
if (Global::iTextMode == GLFW_KEY_F10) // wyświetlone napisy klawiszem F10
|
if( Global::iTextMode == GLFW_KEY_F10 ) // wyświetlone napisy klawiszem F10
|
||||||
{ // i potwierdzenie
|
{ // i potwierdzenie
|
||||||
if( cKey == 'Y' ) {
|
if( cKey == GLFW_KEY_Y ) {
|
||||||
// flaga wyjścia z programu
|
// flaga wyjścia z programu
|
||||||
::PostQuitMessage( 0 );
|
::PostQuitMessage( 0 );
|
||||||
// Global::iTextMode = -1;
|
// Global::iTextMode = -1;
|
||||||
@@ -681,9 +676,9 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
{ // tryb konfiguracji debugmode (przestawianie kamery już wyłączone
|
{ // tryb konfiguracji debugmode (przestawianie kamery już wyłączone
|
||||||
if (!Global::shiftState) // bez [Shift]
|
if (!Global::shiftState) // bez [Shift]
|
||||||
{
|
{
|
||||||
if (cKey == '1')
|
if (cKey == GLFW_KEY_1)
|
||||||
Global::iWriteLogEnabled ^= 1; // włącz/wyłącz logowanie do pliku
|
Global::iWriteLogEnabled ^= 1; // włącz/wyłącz logowanie do pliku
|
||||||
else if (cKey == '2')
|
else if (cKey == GLFW_KEY_2)
|
||||||
{ // włącz/wyłącz okno konsoli
|
{ // włącz/wyłącz okno konsoli
|
||||||
Global::iWriteLogEnabled ^= 2;
|
Global::iWriteLogEnabled ^= 2;
|
||||||
if ((Global::iWriteLogEnabled & 2) == 0) // nie było okienka
|
if ((Global::iWriteLogEnabled & 2) == 0) // nie było okienka
|
||||||
@@ -711,10 +706,10 @@ void TWorld::OnKeyDown(int cKey)
|
|||||||
if (Controlled->MoverParameters->Radio)
|
if (Controlled->MoverParameters->Radio)
|
||||||
Ground.RadioStop(Camera.Pos);
|
Ground.RadioStop(Camera.Pos);
|
||||||
}
|
}
|
||||||
else if (!Global::iPause) //||(cKey==GLFW_KEY_F4)) //podczas pauzy sterownaie nie działa, F4 tak
|
else if (!Global::iPause) //||(cKey==VK_F4)) //podczas pauzy sterownaie nie działa, F4 tak
|
||||||
if (Train)
|
if (Train)
|
||||||
if (Controlled)
|
if (Controlled)
|
||||||
if ((Controlled->Controller == Humandriver) ? true : DebugModeFlag || (cKey == 'Q'))
|
if ((Controlled->Controller == Humandriver) ? true : DebugModeFlag || (cKey == GLFW_KEY_Q))
|
||||||
Train->OnKeyDown(cKey); // przekazanie klawisza do kabiny
|
Train->OnKeyDown(cKey); // przekazanie klawisza do kabiny
|
||||||
if (FreeFlyModeFlag) // aby nie odluźniało wagonu za lokomotywą
|
if (FreeFlyModeFlag) // aby nie odluźniało wagonu za lokomotywą
|
||||||
{ // operacje wykonywane na dowolnym pojeździe, przeniesione tu z kabiny
|
{ // operacje wykonywane na dowolnym pojeździe, przeniesione tu z kabiny
|
||||||
@@ -931,25 +926,19 @@ void TWorld::FollowView(bool wycisz)
|
|||||||
}
|
}
|
||||||
else if (Train)
|
else if (Train)
|
||||||
{ // korekcja ustawienia w kabinie - OK
|
{ // korekcja ustawienia w kabinie - OK
|
||||||
vector3 camStara =
|
vector3 camStara = Camera.Pos; // przestawianie kamery jest bez sensu: do przerobienia na potem
|
||||||
Camera.Pos; // przestawianie kamery jest bez sensu: do przerobienia na potem
|
|
||||||
// Ra: czy to tu jest potrzebne, bo przelicza się kawałek dalej?
|
// Ra: czy to tu jest potrzebne, bo przelicza się kawałek dalej?
|
||||||
Camera.Pos = Train->pMechPosition; // Train.GetPosition1();
|
Camera.Pos = Train->pMechPosition; // Train.GetPosition1();
|
||||||
Camera.Roll = atan(Train->pMechShake.x * Train->fMechRoll); // hustanie kamery na boki
|
Camera.Roll = std::atan(Train->pMechShake.x * Train->fMechRoll); // hustanie kamery na boki
|
||||||
Camera.Pitch -=
|
Camera.Pitch -= 0.5 * std::atan(Train->vMechVelocity.z * Train->fMechPitch); // hustanie kamery przod tyl
|
||||||
atan(Train->vMechVelocity.z * Train->fMechPitch); // hustanie kamery przod tyl
|
|
||||||
if (Train->Dynamic()->MoverParameters->ActiveCab == 0)
|
if (Train->Dynamic()->MoverParameters->ActiveCab == 0)
|
||||||
Camera.LookAt = Train->pMechPosition + Train->GetDirection();
|
Camera.LookAt = Train->pMechPosition + Train->GetDirection() * 5.0;
|
||||||
else // patrz w strone wlasciwej kabiny
|
else // patrz w strone wlasciwej kabiny
|
||||||
Camera.LookAt =
|
Camera.LookAt = Train->pMechPosition + Train->GetDirection() * 5.0 * Train->Dynamic()->MoverParameters->ActiveCab;
|
||||||
Train->pMechPosition +
|
|
||||||
Train->GetDirection() * Train->Dynamic()->MoverParameters->ActiveCab;
|
|
||||||
Train->pMechOffset.x = Train->pMechSittingPosition.x;
|
Train->pMechOffset.x = Train->pMechSittingPosition.x;
|
||||||
Train->pMechOffset.y = Train->pMechSittingPosition.y;
|
Train->pMechOffset.y = Train->pMechSittingPosition.y;
|
||||||
Train->pMechOffset.z = Train->pMechSittingPosition.z;
|
Train->pMechOffset.z = Train->pMechSittingPosition.z;
|
||||||
Global::SetCameraPosition(
|
Global::SetCameraPosition( Train->Dynamic() ->GetPosition()); // tu ustawić nową, bo od niej liczą się odległości
|
||||||
Train->Dynamic()
|
|
||||||
->GetPosition()); // tu ustawić nową, bo od niej liczą się odległości
|
|
||||||
if (wycisz) // trzymanie prawego w kabinie daje marny efekt
|
if (wycisz) // trzymanie prawego w kabinie daje marny efekt
|
||||||
Ground.Silence(camStara); // wyciszenie dźwięków z poprzedniej pozycji
|
Ground.Silence(camStara); // wyciszenie dźwięków z poprzedniej pozycji
|
||||||
}
|
}
|
||||||
@@ -1016,8 +1005,8 @@ bool TWorld::Update()
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
// NOTE: until we have no physics state interpolation during render, we need to rely on the old code
|
// NOTE: until we have no physics state interpolation during render, we need to rely on the old code,
|
||||||
// doing fixed step calculations but flexible step render results in ugly mini jitter
|
// as doing fixed step calculations but flexible step render results in ugly mini jitter
|
||||||
// core routines (physics)
|
// core routines (physics)
|
||||||
int updatecount = 0;
|
int updatecount = 0;
|
||||||
while( ( m_primaryupdateaccumulator >= m_primaryupdaterate )
|
while( ( m_primaryupdateaccumulator >= m_primaryupdaterate )
|
||||||
@@ -1107,7 +1096,7 @@ bool TWorld::Update()
|
|||||||
// fixed step render time routines
|
// fixed step render time routines
|
||||||
|
|
||||||
fTime50Hz += dt; // w pauzie też trzeba zliczać czas, bo przy dużym FPS będzie problem z odczytem ramek
|
fTime50Hz += dt; // w pauzie też trzeba zliczać czas, bo przy dużym FPS będzie problem z odczytem ramek
|
||||||
if( fTime50Hz >= 0.2 ) {
|
while( fTime50Hz >= 1.0 / 50.0 ) {
|
||||||
Console::Update(); // to i tak trzeba wywoływać
|
Console::Update(); // to i tak trzeba wywoływać
|
||||||
Update_UI();
|
Update_UI();
|
||||||
|
|
||||||
@@ -1132,8 +1121,7 @@ bool TWorld::Update()
|
|||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
TWorld::Update_Camera( double const Deltatime )
|
TWorld::Update_Camera( double const Deltatime ) {
|
||||||
{
|
|
||||||
// Console::Update(); //tu jest zależne od FPS, co nie jest korzystne
|
// Console::Update(); //tu jest zależne od FPS, co nie jest korzystne
|
||||||
|
|
||||||
if( glfwGetMouseButton( window, GLFW_MOUSE_BUTTON_LEFT ) == GLFW_PRESS ) {
|
if( glfwGetMouseButton( window, GLFW_MOUSE_BUTTON_LEFT ) == GLFW_PRESS ) {
|
||||||
@@ -1176,56 +1164,52 @@ TWorld::Update_Camera( double const Deltatime )
|
|||||||
}
|
}
|
||||||
|
|
||||||
Camera.Update(); // uwzględnienie ruchu wywołanego klawiszami
|
Camera.Update(); // uwzględnienie ruchu wywołanego klawiszami
|
||||||
|
/*
|
||||||
if( Camera.Type == tp_Follow ) {
|
if( Camera.Type == tp_Follow ) {
|
||||||
if( Train ) { // jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
if( Train ) { // jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
||||||
Train->UpdateMechPosition( Deltatime /
|
Train->UpdateMechPosition( Deltatime /
|
||||||
Global::fTimeSpeed ); // ograniczyć telepanie po przyspieszeniu
|
Global::fTimeSpeed ); // ograniczyć telepanie po przyspieszeniu
|
||||||
vector3 tempangle;
|
*/
|
||||||
double modelrotate;
|
if( (Train != nullptr)
|
||||||
tempangle =
|
&& (Camera.Type == tp_Follow )) {
|
||||||
Controlled->VectorFront() * ( Controlled->MoverParameters->ActiveCab == -1 ? -1 : 1 );
|
// jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
||||||
modelrotate = atan2( -tempangle.x, tempangle.z );
|
vector3 tempangle = Controlled->VectorFront() * ( Controlled->MoverParameters->ActiveCab == -1 ? -1 : 1 );
|
||||||
if( Global::ctrlState ? ( Console::Pressed( Global::Keys[ k_MechLeft ] ) ||
|
double modelrotate = atan2( -tempangle.x, tempangle.z );
|
||||||
Console::Pressed( Global::Keys[ k_MechRight ] ) ) :
|
|
||||||
false ) { // jeśli lusterko lewe albo prawe (bez rzucania na razie)
|
if( (Global::ctrlState)
|
||||||
|
&& ( (Console::Pressed( Global::Keys[ k_MechLeft ])
|
||||||
|
|| (Console::Pressed( Global::Keys[ k_MechRight ]))))) {
|
||||||
|
// jeśli lusterko lewe albo prawe (bez rzucania na razie)
|
||||||
bool lr = Console::Pressed( Global::Keys[ k_MechLeft ] );
|
bool lr = Console::Pressed( Global::Keys[ k_MechLeft ] );
|
||||||
// Camera.Yaw powinno być wyzerowane, aby po powrocie patrzeć do przodu
|
// Camera.Yaw powinno być wyzerowane, aby po powrocie patrzeć do przodu
|
||||||
Camera.Pos =
|
Camera.Pos = Controlled->GetPosition() + Train->MirrorPosition( lr ); // pozycja lusterka
|
||||||
Controlled->GetPosition() + Train->MirrorPosition( lr ); // pozycja lusterka
|
|
||||||
Camera.Yaw = 0; // odchylenie na bok od Camera.LookAt
|
Camera.Yaw = 0; // odchylenie na bok od Camera.LookAt
|
||||||
if( Train->Dynamic()->MoverParameters->ActiveCab == 0 )
|
if( Train->Dynamic()->MoverParameters->ActiveCab == 0 )
|
||||||
Camera.LookAt = Camera.Pos - Train->GetDirection(); // gdy w korytarzu
|
Camera.LookAt = Camera.Pos - Train->GetDirection(); // gdy w korytarzu
|
||||||
else if( Global::shiftState ) { // patrzenie w bok przez szybę
|
else if( Global::shiftState ) {
|
||||||
Camera.LookAt = Camera.Pos -
|
// patrzenie w bok przez szybę
|
||||||
( lr ? -1 : 1 ) * Train->Dynamic()->VectorLeft() *
|
Camera.LookAt = Camera.Pos - ( lr ? -1 : 1 ) * Train->Dynamic()->VectorLeft() * Train->Dynamic()->MoverParameters->ActiveCab;
|
||||||
Train->Dynamic()->MoverParameters->ActiveCab;
|
|
||||||
Global::SetCameraRotation( -modelrotate );
|
Global::SetCameraRotation( -modelrotate );
|
||||||
}
|
}
|
||||||
else { // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny - jakby z lusterka,
|
else { // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny - jakby z lusterka,
|
||||||
// ale bez odbicia
|
// ale bez odbicia
|
||||||
Camera.LookAt = Camera.Pos -
|
Camera.LookAt = Camera.Pos - Train->GetDirection() * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
||||||
Train->GetDirection() *
|
Global::SetCameraRotation( M_PI - modelrotate ); // tu już trzeba uwzględnić lusterka
|
||||||
Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
|
||||||
Global::SetCameraRotation( M_PI -
|
|
||||||
modelrotate ); // tu już trzeba uwzględnić lusterka
|
|
||||||
}
|
}
|
||||||
Camera.Roll =
|
Camera.Roll = std::atan( Train->pMechShake.x * Train->fMechRoll ); // hustanie kamery na boki
|
||||||
atan( Train->pMechShake.x * Train->fMechRoll ); // hustanie kamery na boki
|
Camera.Pitch = 0.5 * std::atan( Train->vMechVelocity.z * Train->fMechPitch ); // hustanie kamery przod tyl
|
||||||
Camera.Pitch =
|
|
||||||
atan( Train->vMechVelocity.z * Train->fMechPitch ); // hustanie kamery przod tyl
|
|
||||||
Camera.vUp = Controlled->VectorUp();
|
Camera.vUp = Controlled->VectorUp();
|
||||||
}
|
}
|
||||||
else { // patrzenie standardowe
|
else {
|
||||||
Camera.Pos = Train->pMechPosition; // Train.GetPosition1();
|
// patrzenie standardowe
|
||||||
|
Camera.Pos = Train->GetWorldMechPosition(); // Train.GetPosition1();
|
||||||
if( !Global::iPause ) { // podczas pauzy nie przeliczać kątów przypadkowymi wartościami
|
if( !Global::iPause ) { // podczas pauzy nie przeliczać kątów przypadkowymi wartościami
|
||||||
Camera.Roll =
|
Camera.Roll = atan( Train->pMechShake.x * Train->fMechRoll ); // hustanie kamery na boki
|
||||||
atan( Train->pMechShake.x * Train->fMechRoll ); // hustanie kamery na boki
|
Camera.Pitch -= 0.5 * atan( Train->vMechVelocity.z * Train->fMechPitch ); // hustanie kamery przod tyl //Ra: tu
|
||||||
Camera.Pitch -= atan( Train->vMechVelocity.z *
|
|
||||||
Train->fMechPitch ); // hustanie kamery przod tyl //Ra: tu
|
|
||||||
// jest uciekanie kamery w górę!!!
|
// jest uciekanie kamery w górę!!!
|
||||||
}
|
}
|
||||||
// ABu011104: rzucanie pudlem
|
// ABu011104: rzucanie pudlem
|
||||||
|
/*
|
||||||
vector3 temp;
|
vector3 temp;
|
||||||
if( abs( Train->pMechShake.y ) < 0.25 )
|
if( abs( Train->pMechShake.y ) < 0.25 )
|
||||||
temp = vector3( 0, 0, 6 * Train->pMechShake.y );
|
temp = vector3( 0, 0, 6 * Train->pMechShake.y );
|
||||||
@@ -1236,17 +1220,14 @@ TWorld::Update_Camera( double const Deltatime )
|
|||||||
if( Controlled )
|
if( Controlled )
|
||||||
Controlled->ABuSetModelShake( temp );
|
Controlled->ABuSetModelShake( temp );
|
||||||
// ABu: koniec rzucania
|
// ABu: koniec rzucania
|
||||||
|
*/
|
||||||
|
|
||||||
if( Train->Dynamic()->MoverParameters->ActiveCab == 0 )
|
if( Train->Dynamic()->MoverParameters->ActiveCab == 0 )
|
||||||
Camera.LookAt = Train->pMechPosition + Train->GetDirection(); // gdy w korytarzu
|
Camera.LookAt = Train->GetWorldMechPosition() + Train->GetDirection() * 5.0; // gdy w korytarzu
|
||||||
else // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny
|
else // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny
|
||||||
Camera.LookAt = Train->pMechPosition +
|
Camera.LookAt = Train->GetWorldMechPosition() + Train->GetDirection() * 5.0 * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
||||||
Train->GetDirection() *
|
|
||||||
Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
|
||||||
Camera.vUp = Train->GetUp();
|
Camera.vUp = Train->GetUp();
|
||||||
Global::SetCameraRotation( Camera.Yaw -
|
Global::SetCameraRotation( Camera.Yaw - modelrotate ); // tu już trzeba uwzględnić lusterka
|
||||||
modelrotate ); // tu już trzeba uwzględnić lusterka
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // kamera nieruchoma
|
else { // kamera nieruchoma
|
||||||
@@ -1462,7 +1443,7 @@ TWorld::Render_Cab() {
|
|||||||
|
|
||||||
glBlendFunc( GL_DST_COLOR, GL_ONE );
|
glBlendFunc( GL_DST_COLOR, GL_ONE );
|
||||||
glDepthFunc( GL_GEQUAL );
|
glDepthFunc( GL_GEQUAL );
|
||||||
glAlphaFunc( GL_GREATER, 0.004f );
|
glAlphaFunc( GL_GREATER, 0.004 );
|
||||||
// glDisable(GL_DEPTH_TEST);
|
// glDisable(GL_DEPTH_TEST);
|
||||||
glDisable( GL_LIGHTING );
|
glDisable( GL_LIGHTING );
|
||||||
glDisable( GL_FOG );
|
glDisable( GL_FOG );
|
||||||
@@ -1500,7 +1481,7 @@ TWorld::Render_Cab() {
|
|||||||
|
|
||||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||||
// glEnable(GL_DEPTH_TEST);
|
// glEnable(GL_DEPTH_TEST);
|
||||||
glAlphaFunc( GL_GREATER, 0.04f );
|
glAlphaFunc( GL_GREATER, 0.04 );
|
||||||
glDepthFunc( GL_LEQUAL );
|
glDepthFunc( GL_LEQUAL );
|
||||||
glEnable( GL_LIGHTING ); //i tak się włączy potem
|
glEnable( GL_LIGHTING ); //i tak się włączy potem
|
||||||
glEnable( GL_FOG );
|
glEnable( GL_FOG );
|
||||||
@@ -1534,17 +1515,17 @@ TWorld::Render_Cab() {
|
|||||||
case e_canyon:
|
case e_canyon:
|
||||||
{
|
{
|
||||||
for( int li = 0; li < 3; li++ ) {
|
for( int li = 0; li < 3; li++ ) {
|
||||||
diffuseCabLight[ li ] *= 0.6f;
|
diffuseCabLight[ li ] *= 0.6;
|
||||||
specularCabLight[ li ] *= 0.7f;
|
specularCabLight[ li ] *= 0.7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case e_tunnel:
|
case e_tunnel:
|
||||||
{
|
{
|
||||||
for( int li = 0; li < 3; li++ ) {
|
for( int li = 0; li < 3; li++ ) {
|
||||||
ambientCabLight[ li ] *= 0.3f;
|
ambientCabLight[ li ] *= 0.3;
|
||||||
diffuseCabLight[ li ] *= 0.1f;
|
diffuseCabLight[ li ] *= 0.1;
|
||||||
specularCabLight[ li ] *= 0.2f;
|
specularCabLight[ li ] *= 0.2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2531,7 +2512,6 @@ TWorld::ToggleDaylight() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
world_environment::init() {
|
world_environment::init() {
|
||||||
|
|
||||||
m_skydome.init();
|
m_skydome.init();
|
||||||
m_sun.init();
|
m_sun.init();
|
||||||
m_moon.init();
|
m_moon.init();
|
||||||
@@ -2539,8 +2519,6 @@ world_environment::init() {
|
|||||||
m_clouds.Init();
|
m_clouds.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern TWorld World;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
world_environment::update() {
|
world_environment::update() {
|
||||||
// move celestial bodies...
|
// move celestial bodies...
|
||||||
|
|||||||
Reference in New Issue
Block a user