nodes: implemented core of manual table value selection

This commit is contained in:
itsmattkc
2021-09-07 15:27:07 -07:00
parent a3ac761b55
commit a0706a78d8
71 changed files with 517 additions and 434 deletions
+16 -18
View File
@@ -88,18 +88,16 @@ void MatrixGenerator::Retranslate()
SetInputName(kAnchorInput, tr("Anchor Point"));
}
NodeValueTable MatrixGenerator::Value(const QString &output, NodeValueDatabase &value) const
void MatrixGenerator::Value(const QString &output, const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const
{
Q_UNUSED(output)
// Push matrix output
QMatrix4x4 mat = GenerateMatrix(value, true, false, false, false);
NodeValueTable out = value.Merge();
out.Push(NodeValue::kMatrix, mat, this);
return out;
table->Push(NodeValue::kMatrix, mat, this);
}
QMatrix4x4 MatrixGenerator::GenerateMatrix(NodeValueDatabase &value, bool take, bool ignore_anchor, bool ignore_position, bool ignore_scale) const
QMatrix4x4 MatrixGenerator::GenerateMatrix(const NodeValueRow &value, bool take, bool ignore_anchor, bool ignore_position, bool ignore_scale) const
{
QVector2D anchor;
QVector2D position;
@@ -108,47 +106,47 @@ QMatrix4x4 MatrixGenerator::GenerateMatrix(NodeValueDatabase &value, bool take,
if (!ignore_anchor) {
if (take) {
// Take and store
anchor = value[kAnchorInput].Take(NodeValue::kVec2).value<QVector2D>();
anchor = value[kAnchorInput].data().value<QVector2D>();
} else {
// Get and store
anchor = value[kAnchorInput].Get(NodeValue::kVec2).value<QVector2D>();
anchor = value[kAnchorInput].data().value<QVector2D>();
}
} else if (take) {
// Just take
value[kAnchorInput].Take(NodeValue::kVec2).value<QVector2D>();
value[kAnchorInput].data().value<QVector2D>();
}
if (!ignore_scale) {
if (take) {
scale = value[kScaleInput].Take(NodeValue::kVec2).value<QVector2D>();
scale = value[kScaleInput].data().value<QVector2D>();
} else {
scale = value[kScaleInput].Get(NodeValue::kVec2).value<QVector2D>();
scale = value[kScaleInput].data().value<QVector2D>();
}
} else if (take) {
value[kScaleInput].Take(NodeValue::kVec2).value<QVector2D>();
value[kScaleInput].data().value<QVector2D>();
}
if (!ignore_position) {
if (take) {
position = value[kPositionInput].Take(NodeValue::kVec2).value<QVector2D>();
position = value[kPositionInput].data().value<QVector2D>();
} else {
position = value[kPositionInput].Get(NodeValue::kVec2).value<QVector2D>();
position = value[kPositionInput].data().value<QVector2D>();
}
} else if (take) {
value[kPositionInput].Take(NodeValue::kVec2).value<QVector2D>();
value[kPositionInput].data().value<QVector2D>();
}
if (take) {
return GenerateMatrix(position,
value[kRotationInput].Take(NodeValue::kFloat).toFloat(),
value[kRotationInput].data().toFloat(),
scale,
value[kUniformScaleInput].Take(NodeValue::kBoolean).toBool(),
value[kUniformScaleInput].data().toBool(),
anchor);
} else {
return GenerateMatrix(position,
value[kRotationInput].Get(NodeValue::kFloat).toFloat(),
value[kRotationInput].data().toFloat(),
scale,
value[kUniformScaleInput].Get(NodeValue::kBoolean).toBool(),
value[kUniformScaleInput].data().toBool(),
anchor);
}