16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-19 05:29:17 +02:00

merge, with tmj renderer

This commit is contained in:
milek7
2017-08-18 00:56:05 +02:00
85 changed files with 6815 additions and 3770 deletions

View File

@@ -9,25 +9,16 @@ http://mozilla.org/MPL/2.0/.
#include "stdafx.h"
#include "Button.h"
#include "parser.h"
#include "Model3d.h"
#include "Console.h"
#include "Logs.h"
//---------------------------------------------------------------------------
TButton::TButton()
{
iFeedbackBit = 0;
bData = NULL;
Clear();
};
TButton::~TButton(){};
void TButton::Clear(int i)
{
pModelOn = NULL;
pModelOff = NULL;
bOn = false;
pModelOn = nullptr;
pModelOff = nullptr;
m_state = false;
if (i >= 0)
FeedbackBitSet(i);
Update(); // kasowanie bitu Feedback, o ile jakiś ustawiony
@@ -35,46 +26,108 @@ void TButton::Clear(int i)
void TButton::Init(std::string const &asName, TModel3d *pModel, bool bNewOn)
{
if (!pModel)
return; // nie ma w czym szukać
if( pModel == nullptr ) { return; }
pModelOn = pModel->GetFromName( (asName + "_on").c_str() );
pModelOff = pModel->GetFromName( (asName + "_off").c_str() );
bOn = bNewOn;
m_state = bNewOn;
Update();
};
void TButton::Load(cParser &Parser, TModel3d *pModel1, TModel3d *pModel2)
{
std::string const token = Parser.getToken<std::string>();
if (pModel1)
{ // poszukiwanie submodeli w modelu
Init(token, pModel1, false);
if (pModel2)
if (!pModelOn && !pModelOff)
Init(token, pModel2, false); // może w drugim będzie (jak nie w kabinie,
// to w zewnętrznym)
}
else
{
pModelOn = NULL;
pModelOff = NULL;
void TButton::Load(cParser &Parser, TModel3d *pModel1, TModel3d *pModel2) {
ErrorLog( "Failed to locate sub-model \"" + token + "\" in 3d model \"" + pModel1->NameGet() + "\"" );
std::string submodelname;
Parser.getTokens();
if( Parser.peek() != "{" ) {
// old fixed size config
Parser >> submodelname;
}
else {
// new, block type config
// TODO: rework the base part into yaml-compatible flow style mapping
cParser mappingparser( Parser.getToken<std::string>( false, "}" ) );
submodelname = mappingparser.getToken<std::string>( false );
// new, variable length section
while( true == Load_mapping( mappingparser ) ) {
; // all work done by while()
}
}
if( pModel1 ) {
// poszukiwanie submodeli w modelu
Init( submodelname, pModel1, false );
if( ( pModelOn != nullptr ) || ( pModelOff != nullptr ) ) {
// we got our models, bail out
return;
}
}
if( pModel2 ) {
// poszukiwanie submodeli w modelu
Init( submodelname, pModel2, false );
if( ( pModelOn != nullptr ) || ( pModelOff != nullptr ) ) {
// we got our models, bail out
return;
}
}
// if we failed to locate even one state submodel, cry
ErrorLog( "Failed to locate sub-model \"" + submodelname + "\" in 3d model \"" + pModel1->NameGet() + "\"" );
};
void TButton::Update()
{
if (bData != NULL)
bOn = (*bData);
if (pModelOn)
pModelOn->iVisible = bOn;
if (pModelOff)
pModelOff->iVisible = !bOn;
bool
TButton::Load_mapping( cParser &Input ) {
if( false == Input.getTokens( 2, true, ", " ) ) {
return false;
}
std::string key, value;
Input
>> key
>> value;
if( key == "soundinc:" ) {
m_soundfxincrease = (
value != "none" ?
sound_man->create_sound(value) :
nullptr );
}
else if( key == "sounddec:" ) {
m_soundfxdecrease = (
value != "none" ?
sound_man->create_sound(value) :
nullptr );
}
return true; // return value marks a key: value pair was extracted, nothing about whether it's recognized
}
void
TButton::Turn( bool const State ) {
if( State != m_state ) {
m_state = State;
play();
Update();
}
}
void TButton::Update() {
if( ( bData != nullptr )
&& ( *bData != m_state ) ) {
m_state = ( *bData );
play();
}
if( pModelOn != nullptr ) { pModelOn->iVisible = m_state; }
if( pModelOff != nullptr ) { pModelOff->iVisible = (!m_state); }
#ifdef _WIN32
if (iFeedbackBit) // jeżeli generuje informację zwrotną
{
if (bOn) // zapalenie
if (iFeedbackBit) {
// jeżeli generuje informację zwrotną
if (m_state) // zapalenie
Console::BitsSet(iFeedbackBit);
else
Console::BitsClear(iFeedbackBit);
@@ -82,7 +135,25 @@ void TButton::Update()
#endif
};
void TButton::AssignBool(bool *bValue)
{
void TButton::AssignBool(bool const *bValue) {
bData = bValue;
}
void
TButton::play() {
play(
m_state == true ?
m_soundfxincrease :
m_soundfxdecrease );
}
void
TButton::play( sound* Sound ) {
if( Sound == nullptr ) { return; }
Sound->play();
return;
}