mirror of https://github.com/OpenTTD/OpenTTD
(svn r25320) -Fix [FS#5577]: link graph start time was not accounted for when cheating dates
parent
254c3834d0
commit
0fbc7140c5
|
@ -24,6 +24,7 @@
|
||||||
#include "rail_gui.h"
|
#include "rail_gui.h"
|
||||||
#include "settings_gui.h"
|
#include "settings_gui.h"
|
||||||
#include "company_gui.h"
|
#include "company_gui.h"
|
||||||
|
#include "linkgraph/linkgraph.h"
|
||||||
|
|
||||||
#include "widgets/cheat_widget.h"
|
#include "widgets/cheat_widget.h"
|
||||||
|
|
||||||
|
@ -100,7 +101,10 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
|
||||||
p1 = Clamp(p1, MIN_YEAR, MAX_YEAR);
|
p1 = Clamp(p1, MIN_YEAR, MAX_YEAR);
|
||||||
if (p1 == _cur_year) return _cur_year;
|
if (p1 == _cur_year) return _cur_year;
|
||||||
|
|
||||||
SetDate(ConvertYMDToDate(p1, ymd.month, ymd.day), _date_fract);
|
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
|
||||||
|
LinkGraph *lg;
|
||||||
|
FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(new_date - _date);
|
||||||
|
SetDate(new_date, _date_fract);
|
||||||
EnginesMonthlyLoop();
|
EnginesMonthlyLoop();
|
||||||
SetWindowDirty(WC_STATUS_BAR, 0);
|
SetWindowDirty(WC_STATUS_BAR, 0);
|
||||||
InvalidateWindowClassesData(WC_BUILD_STATION, 0);
|
InvalidateWindowClassesData(WC_BUILD_STATION, 0);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "date_func.h"
|
#include "date_func.h"
|
||||||
#include "vehicle_base.h"
|
#include "vehicle_base.h"
|
||||||
#include "rail_gui.h"
|
#include "rail_gui.h"
|
||||||
|
#include "linkgraph/linkgraph.h"
|
||||||
#include "saveload/saveload.h"
|
#include "saveload/saveload.h"
|
||||||
|
|
||||||
Year _cur_year; ///< Current year, starting at 0
|
Year _cur_year; ///< Current year, starting at 0
|
||||||
|
@ -211,6 +212,9 @@ static void OnNewYear()
|
||||||
_date -= days_this_year;
|
_date -= days_this_year;
|
||||||
FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year;
|
FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year;
|
||||||
|
|
||||||
|
LinkGraph *lg;
|
||||||
|
FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(-days_this_year);
|
||||||
|
|
||||||
#ifdef ENABLE_NETWORK
|
#ifdef ENABLE_NETWORK
|
||||||
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
|
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
|
||||||
* all of them if the date is set back, else those messages will hang for ever */
|
* all of them if the date is set back, else those messages will hang for ever */
|
||||||
|
|
|
@ -43,6 +43,24 @@ inline void LinkGraph::BaseEdge::Init(uint distance)
|
||||||
this->next_edge = INVALID_NODE;
|
this->next_edge = INVALID_NODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shift all dates by given interval.
|
||||||
|
* This is useful if the date has been modified with the cheat menu.
|
||||||
|
* @param interval Number of days to be added or subtracted.
|
||||||
|
*/
|
||||||
|
void LinkGraph::ShiftDates(int interval)
|
||||||
|
{
|
||||||
|
this->last_compression += interval;
|
||||||
|
for (NodeID node1 = 0; node1 < this->Size(); ++node1) {
|
||||||
|
BaseNode &source = this->nodes[node1];
|
||||||
|
if (source.last_update != INVALID_DATE) source.last_update += interval;
|
||||||
|
for (NodeID node2 = 0; node2 < this->Size(); ++node2) {
|
||||||
|
BaseEdge &edge = this->edges[node1][node2];
|
||||||
|
if (edge.last_update != INVALID_DATE) edge.last_update += interval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LinkGraph::Compress()
|
void LinkGraph::Compress()
|
||||||
{
|
{
|
||||||
this->last_compression = (_date + this->last_compression) / 2;
|
this->last_compression = (_date + this->last_compression) / 2;
|
||||||
|
|
|
@ -442,6 +442,7 @@ public:
|
||||||
LinkGraph(CargoID cargo) : cargo(cargo), last_compression(_date) {}
|
LinkGraph(CargoID cargo) : cargo(cargo), last_compression(_date) {}
|
||||||
|
|
||||||
void Init(uint size);
|
void Init(uint size);
|
||||||
|
void ShiftDates(int interval);
|
||||||
void Compress();
|
void Compress();
|
||||||
void Merge(LinkGraph *other);
|
void Merge(LinkGraph *other);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue