|
|
@@ -313,6 +313,18 @@ int Connection::getVx() const
|
|
|
return vx;
|
|
|
}
|
|
|
|
|
|
+bool Connection::hasTarget(AndNode* zAndNode, int index) const
|
|
|
+{
|
|
|
+ for (auto target : targets)
|
|
|
+ {
|
|
|
+ if (target.zTarget == zAndNode && target.targetIndex == index)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
AndNode::AndNode()
|
|
|
: ZeichnungHintergrund()
|
|
|
{
|
|
|
@@ -515,14 +527,19 @@ bool OrConnection::isActive() const
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-bool OrConnection::isHorizontalLineConflict(int y) const
|
|
|
+bool OrConnection::isHorizontalLineConflict(
|
|
|
+ int y, Connection* zIgnoredIncommingConnection) const
|
|
|
{
|
|
|
for (AndNode* node : andNodes)
|
|
|
{
|
|
|
for (int i = 0; i < node->getConnectionCount(); i++)
|
|
|
{
|
|
|
- Punkt connection = node->getTargetPosition(i);
|
|
|
- if (abs(y - connection.y) < 5) return 1;
|
|
|
+ if (!zIgnoredIncommingConnection || !zIgnoredIncommingConnection
|
|
|
+ ->hasTarget(node, i))
|
|
|
+ {
|
|
|
+ Punkt connection = node->getTargetPosition(i);
|
|
|
+ if (abs(y - connection.y) < 5) return 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
@@ -990,25 +1007,32 @@ const Framework::RCArray<QuestGraphItem>& QuestGraphItemLayer::getItems() const
|
|
|
return items;
|
|
|
}
|
|
|
|
|
|
-int QuestGraphItemLayer::getLeyerHeight() const
|
|
|
+int QuestGraphItemLayer::getLeyerHeight(int& minY) const
|
|
|
{
|
|
|
- int start = 0;
|
|
|
+ minY = 0;
|
|
|
int end = 0;
|
|
|
bool first = 1;
|
|
|
for (QuestGraphItem* item : items)
|
|
|
{
|
|
|
- if (first || item->getY() < start) start = item->getY();
|
|
|
+ if (first || item->getY() < minY) minY = item->getY();
|
|
|
if (first || item->getY() + item->getHeight() > end)
|
|
|
end = item->getY() + item->getHeight();
|
|
|
first = 0;
|
|
|
}
|
|
|
- return end - start;
|
|
|
+ return end - minY;
|
|
|
+}
|
|
|
+
|
|
|
+int QuestGraphItemLayer::getLeyerHeight() const
|
|
|
+{
|
|
|
+ int y;
|
|
|
+ return getLeyerHeight(y);
|
|
|
}
|
|
|
|
|
|
void QuestGraphItemLayer::centerVertically(int pos)
|
|
|
{
|
|
|
- int height = getLeyerHeight();
|
|
|
- int yOffset = pos - height / 2;
|
|
|
+ int minY = 0;
|
|
|
+ int height = getLeyerHeight(minY);
|
|
|
+ int yOffset = pos - height / 2 - minY;
|
|
|
for (QuestGraphItem* item : items)
|
|
|
{
|
|
|
item->setPosition(item->getX(), item->getY() + yOffset);
|
|
|
@@ -1023,17 +1047,19 @@ void QuestGraphItemLayer::resolveHorizontalConflicts(
|
|
|
for (QuestGraphItem* item : items)
|
|
|
{
|
|
|
int outgoingY = item->getY() + item->getHeight() / 2;
|
|
|
- if (zNextLayer->isHorizontalLineConflict(outgoingY))
|
|
|
+ if (zNextLayer->isHorizontalLineConflict(outgoingY, item->zOutgoingConnection()))
|
|
|
{
|
|
|
int offset = 0;
|
|
|
for (int i = 1; i <= 10; i++)
|
|
|
{
|
|
|
- if (!zNextLayer->isHorizontalLineConflict(outgoingY - i))
|
|
|
+ if (!zNextLayer->isHorizontalLineConflict(
|
|
|
+ outgoingY - i, item->zOutgoingConnection()))
|
|
|
{
|
|
|
offset = -i;
|
|
|
break;
|
|
|
}
|
|
|
- if (!zNextLayer->isHorizontalLineConflict(outgoingY + i))
|
|
|
+ if (!zNextLayer->isHorizontalLineConflict(
|
|
|
+ outgoingY + i, item->zOutgoingConnection()))
|
|
|
{
|
|
|
offset = i;
|
|
|
break;
|
|
|
@@ -1046,11 +1072,14 @@ void QuestGraphItemLayer::resolveHorizontalConflicts(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool QuestGraphItemLayer::isHorizontalLineConflict(int y) const
|
|
|
+bool QuestGraphItemLayer::isHorizontalLineConflict(
|
|
|
+ int y, Connection* zIgnoredIncommingConnection) const
|
|
|
{
|
|
|
for (QuestGraphItem* item : items)
|
|
|
{
|
|
|
- if (item->zIncommingConnection()->isHorizontalLineConflict(y)) return 1;
|
|
|
+ if (item->zIncommingConnection()->isHorizontalLineConflict(
|
|
|
+ y, zIgnoredIncommingConnection))
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|