Changing day length or date no longer changes time in minutes
Add offset variables for scaled date ticks. Adjust offset when changing day length or date, such that scaled date ticks remain the same. Store _scaled_tick_counter and scaled date ticks offset in the savagame.
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
#define DATE_FUNC_H
|
||||
|
||||
#include "date_type.h"
|
||||
#include "settings_type.h"
|
||||
#include <utility>
|
||||
|
||||
extern YearMonthDay _cur_date_ymd;
|
||||
extern Date _date;
|
||||
@@ -19,13 +21,14 @@ extern uint64 _tick_counter;
|
||||
extern uint8 _tick_skip_counter;
|
||||
extern uint64 _scaled_tick_counter;
|
||||
extern DateTicksScaled _scaled_date_ticks;
|
||||
extern DateTicksScaled _scaled_date_ticks_offset;
|
||||
extern uint32 _quit_after_days;
|
||||
|
||||
extern YearMonthDay _game_load_cur_date_ymd;
|
||||
extern DateFract _game_load_date_fract;
|
||||
extern uint8 _game_load_tick_skip_counter;
|
||||
|
||||
void SetDate(Date date, DateFract fract);
|
||||
void SetDate(Date date, DateFract fract, bool preserve_scaled_ticks = true);
|
||||
void ConvertDateToYMD(Date date, YearMonthDay *ymd);
|
||||
Date ConvertYMDToDate(Year year, Month month, Day day);
|
||||
void SetScaledTickVariables();
|
||||
@@ -47,4 +50,37 @@ static inline bool IsLeapYear(Year yr)
|
||||
return yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0);
|
||||
}
|
||||
|
||||
static inline Date ScaledDateTicksToDate(DateTicksScaled ticks)
|
||||
{
|
||||
return (ticks - _scaled_date_ticks_offset) / (DAY_TICKS * _settings_game.economy.day_length_factor);
|
||||
}
|
||||
|
||||
static inline DateTicksScaled DateToScaledDateTicks(Date date)
|
||||
{
|
||||
return ((int64)date * DAY_TICKS * _settings_game.economy.day_length_factor) + _scaled_date_ticks_offset;
|
||||
}
|
||||
|
||||
static inline DateTicks ScaledDateTicksToDateTicks(DateTicksScaled ticks)
|
||||
{
|
||||
return (ticks - _scaled_date_ticks_offset) / _settings_game.economy.day_length_factor;
|
||||
}
|
||||
|
||||
static inline DateTicksScaled DateTicksToScaledDateTicks(DateTicks date_ticks)
|
||||
{
|
||||
return ((int64)date_ticks * _settings_game.economy.day_length_factor) + _scaled_date_ticks_offset;
|
||||
}
|
||||
|
||||
static inline std::pair<DateTicks, uint16> ScaledDateTicksToDateTicksAndSubTicks(DateTicksScaled ticks)
|
||||
{
|
||||
ticks -= _scaled_date_ticks_offset;
|
||||
return std::make_pair<DateTicks, uint16>(ticks / _settings_game.economy.day_length_factor, ticks % _settings_game.economy.day_length_factor);
|
||||
}
|
||||
|
||||
static inline std::pair<Date, uint16> ScaledDateTicksToDateAndFullSubTicks(DateTicksScaled ticks)
|
||||
{
|
||||
ticks -= _scaled_date_ticks_offset;
|
||||
const int full_date = _settings_game.economy.day_length_factor * DAY_TICKS;
|
||||
return std::make_pair<Date, uint16>(ticks / full_date, ticks % full_date);
|
||||
}
|
||||
|
||||
#endif /* DATE_FUNC_H */
|
||||
|
Reference in New Issue
Block a user