server: TurnoutRailTile update from Output state

Also adapt all subclasses
Dieser Commit ist enthalten in:
Filippo Gentile 2024-04-16 23:37:45 +02:00
Ursprung 37b485c7c4
Commit eb18c16b86
8 geänderte Dateien mit 28 neuen und 3 gelöschten Zeilen

Datei anzeigen

@ -49,6 +49,8 @@ Turnout3WayRailTile::Turnout3WayRailTile(World& world, std::string_view _id)
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}
void Turnout3WayRailTile::getConnectors(std::vector<Connector>& connectors) const

Datei anzeigen

@ -57,6 +57,8 @@ TurnoutDoubleSlipRailTile::TurnoutDoubleSlipRailTile(World& world, std::string_v
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}
void TurnoutDoubleSlipRailTile::getConnectors(std::vector<Connector>& connectors) const

Datei anzeigen

@ -76,4 +76,6 @@ TurnoutLeftRailTile::TurnoutLeftRailTile(World& world, std::string_view _id, Til
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}

Datei anzeigen

@ -99,14 +99,25 @@ bool TurnoutRailTile::isValidPosition(TurnoutPosition value)
return values->contains(static_cast<int64_t>(value));
}
bool TurnoutRailTile::doSetPosition(TurnoutPosition value)
bool TurnoutRailTile::doSetPosition(TurnoutPosition value, bool skipAction)
{
if(!isValidPosition(value))
{
return false;
}
(*outputMap)[value]->execute();
if(!skipAction)
(*outputMap)[value]->execute();
position.setValueInternal(value);
positionChanged(*this, value);
return true;
}
void TurnoutRailTile::connectOutputMap()
{
outputMap->onOutputStateMatchFound.connect([this](TurnoutPosition pos)
{
doSetPosition(pos, true);
});
//TODO: disconnect somewhere?
}

Datei anzeigen

@ -43,7 +43,9 @@ class TurnoutRailTile : public RailTile
void worldEvent(WorldState state, WorldEvent event) override;
bool isValidPosition(TurnoutPosition value);
virtual bool doSetPosition(TurnoutPosition value);
virtual bool doSetPosition(TurnoutPosition value, bool skipAction = false);
void connectOutputMap();
public:
boost::signals2::signal<void (const TurnoutRailTile&, TurnoutPosition)> positionChanged;

Datei anzeigen

@ -76,4 +76,6 @@ TurnoutRightRailTile::TurnoutRightRailTile(World& world, std::string_view _id, T
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}

Datei anzeigen

@ -55,6 +55,8 @@ TurnoutSingleSlipRailTile::TurnoutSingleSlipRailTile(World& world, std::string_v
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}
void TurnoutSingleSlipRailTile::getConnectors(std::vector<Connector>& connectors) const

Datei anzeigen

@ -49,6 +49,8 @@ TurnoutWyeRailTile::TurnoutWyeRailTile(World& world, std::string_view _id)
Attributes::addValues(setPosition, setPositionValues);
m_interfaceItems.add(setPosition);
connectOutputMap();
}
void TurnoutWyeRailTile::getConnectors(std::vector<Connector>& connectors) const