leocad/common/lc_objectproperty.h
2024-01-15 16:48:09 -08:00

99 lines
1.7 KiB
C++

#pragma once
#include "lc_array.h"
enum class lcObjectPropertyId
{
PieceId,
PieceColor,
PieceStepShow,
PieceStepHide,
CameraName,
CameraType,
CameraFOV,
CameraNear,
CameraFar,
CameraPositionX,
CameraPositionY,
CameraPositionZ,
CameraTargetX,
CameraTargetY,
CameraTargetZ,
CameraUpX,
CameraUpY,
CameraUpZ,
LightName,
LightType,
LightColor,
LightPower,
LightCastShadow,
LightAttenuationDistance,
LightAttenuationPower,
LightPointSize,
LightSpotSize,
LightDirectionalSize,
LightAreaSize,
LightAreaSizeX,
LightAreaSizeY,
LightSpotConeAngle,
LightSpotPenumbraAngle,
LightSpotTightness,
LightAreaShape,
LightAreaGridX,
LightAreaGridY,
ObjectPositionX,
ObjectPositionY,
ObjectPositionZ,
ObjectRotationX,
ObjectRotationY,
ObjectRotationZ,
Count
};
template<typename T>
struct lcObjectPropertyKey
{
lcStep Step;
T Value;
};
template<typename T>
class lcObjectProperty
{
public:
explicit lcObjectProperty(const T& DefaultValue)
: mValue(DefaultValue)
{
}
operator const T& () const
{
return mValue;
}
void Reset()
{
mKeys.clear();
}
void Reset(const T& Value)
{
mValue = Value;
mKeys.clear();
}
void Update(lcStep Step);
void ChangeKey(const T& Value, lcStep Step, bool AddKey);
void InsertTime(lcStep Start, lcStep Time);
void RemoveTime(lcStep Start, lcStep Time);
bool HasKeyFrame(lcStep Time) const;
void Save(QTextStream& Stream, const char* ObjectName, const char* VariableName) const;
bool Load(QTextStream& Stream, const QString& Token, const char* VariableName);
void SaveKeysLDraw(QTextStream& Stream, const char* ObjectName, const char* VariableName) const;
void LoadKeysLDraw(QTextStream& Stream);
protected:
T mValue;
std::vector<lcObjectPropertyKey<T>> mKeys;
};