#pragma once #include "lc_math.h" class lcPiece; class lcPiecesLibrary; struct lcTrainTrackConnection { lcMatrix44 Transform; }; enum class lcTrainTrackType { Straight, Left, Right, BranchLeft, BranchRight, Count }; class lcTrainTrackInfo { public: lcTrainTrackInfo() = default; static std::optional GetPieceInsertTransform(lcPiece* CurrentPiece, PieceInfo* Info, quint32 Section); static std::optional GetConnectionTransform(lcPiece* CurrentPiece, quint32 CurrentConnectionIndex, PieceInfo* Info, quint32 NewConnectionIndex); static std::optional CalculateTransformToConnection(const lcMatrix44& ConnectionTransform, PieceInfo* Info, quint32 ConnectionIndex); static int GetPieceConnectionIndex(const lcPiece* Piece1, int ConnectionIndex1, const lcPiece* Piece2); void AddConnection(const lcTrainTrackConnection& TrainTrackConnection) { mConnections.emplace_back(TrainTrackConnection); } const std::vector& GetConnections() const { return mConnections; } protected: std::vector mConnections; }; void lcTrainTrackInit(lcPiecesLibrary* Library);