mirror of https://github.com/OpenTTD/OpenTTD
(svn r26393) -Fix: Update distances between link graph nodes when station sign is moved
parent
aee9444c1b
commit
5d3fcce725
|
@ -144,6 +144,21 @@ void LinkGraph::RemoveNode(NodeID id)
|
||||||
* been copied around in the loop above. */
|
* been copied around in the loop above. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update distances between the given node and all others.
|
||||||
|
* @param id Node that changed position.
|
||||||
|
* @param xy New position of the node.
|
||||||
|
*/
|
||||||
|
void LinkGraph::UpdateDistances(NodeID id, TileIndex xy)
|
||||||
|
{
|
||||||
|
assert(id < this->Size());
|
||||||
|
for (NodeID other = 0; other < this->Size(); ++other) {
|
||||||
|
if (other == id) continue;
|
||||||
|
this->edges[id][other].distance = this->edges[other][id].distance =
|
||||||
|
DistanceManhattan(xy, Station::Get(this->nodes[other].station)->xy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a node to the component and create empty edges associated with it. Set
|
* Add a node to the component and create empty edges associated with it. Set
|
||||||
* the station's last_component to this component. Calculate the distances to all
|
* the station's last_component to this component. Calculate the distances to all
|
||||||
|
|
|
@ -529,6 +529,7 @@ public:
|
||||||
|
|
||||||
NodeID AddNode(const Station *st);
|
NodeID AddNode(const Station *st);
|
||||||
void RemoveNode(NodeID id);
|
void RemoveNode(NodeID id);
|
||||||
|
void UpdateDistances(NodeID id, TileIndex xy);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class LinkGraph::ConstNode;
|
friend class LinkGraph::ConstNode;
|
||||||
|
|
|
@ -641,6 +641,14 @@ static void UpdateStationSignCoord(BaseStation *st)
|
||||||
/* clamp sign coord to be inside the station rect */
|
/* clamp sign coord to be inside the station rect */
|
||||||
st->xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom));
|
st->xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom));
|
||||||
st->UpdateVirtCoord();
|
st->UpdateVirtCoord();
|
||||||
|
|
||||||
|
if (!Station::IsExpected(st)) return;
|
||||||
|
Station *full_station = Station::From(st);
|
||||||
|
for (CargoID c = 0; c < NUM_CARGO; ++c) {
|
||||||
|
LinkGraphID lg = full_station->goods[c].link_graph;
|
||||||
|
if (!LinkGraph::IsValidID(lg)) continue;
|
||||||
|
LinkGraph::Get(lg)->UpdateDistances(full_station->goods[c].node, st->xy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue