mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-11-04 04:26:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "timestamp.hpp"
 | 
						|
 | 
						|
#include <cmath>
 | 
						|
#include <stdexcept>
 | 
						|
 | 
						|
#include <components/esm/defs.hpp>
 | 
						|
 | 
						|
namespace MWWorld
 | 
						|
{
 | 
						|
    TimeStamp::TimeStamp (float hour, int day)
 | 
						|
    : mHour (hour), mDay (day)
 | 
						|
    {
 | 
						|
        if (hour<0 || hour>=24 || day<0)
 | 
						|
            throw std::runtime_error ("invalid time stamp");
 | 
						|
    }
 | 
						|
 | 
						|
    float TimeStamp::getHour() const
 | 
						|
    {
 | 
						|
        return mHour;
 | 
						|
    }
 | 
						|
 | 
						|
    int TimeStamp::getDay() const
 | 
						|
    {
 | 
						|
        return mDay;
 | 
						|
    }
 | 
						|
 | 
						|
    TimeStamp& TimeStamp::operator+= (double hours)
 | 
						|
    {
 | 
						|
        if (hours<0)
 | 
						|
            throw std::runtime_error ("can't move time stamp backwards in time");
 | 
						|
 | 
						|
        hours += mHour;
 | 
						|
 | 
						|
        mHour = static_cast<float> (std::fmod (hours, 24));
 | 
						|
 | 
						|
        mDay += static_cast<int>(hours / 24);
 | 
						|
 | 
						|
        return *this;
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator== (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        return left.getHour()==right.getHour() && left.getDay()==right.getDay();
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator!= (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        return !(left==right);
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator< (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        if (left.getDay()<right.getDay())
 | 
						|
            return true;
 | 
						|
 | 
						|
        if (left.getDay()>right.getDay())
 | 
						|
            return false;
 | 
						|
 | 
						|
        return left.getHour()<right.getHour();
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator<= (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        return left<right || left==right;
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator> (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        return !(left<=right);
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator>= (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        return !(left<right);
 | 
						|
    }
 | 
						|
 | 
						|
    TimeStamp operator+ (const TimeStamp& stamp, double hours)
 | 
						|
    {
 | 
						|
        return TimeStamp (stamp) += hours;
 | 
						|
    }
 | 
						|
 | 
						|
    TimeStamp operator+ (double hours, const TimeStamp& stamp)
 | 
						|
    {
 | 
						|
        return TimeStamp (stamp) += hours;
 | 
						|
    }
 | 
						|
 | 
						|
    double operator- (const TimeStamp& left, const TimeStamp& right)
 | 
						|
    {
 | 
						|
        if (left<right)
 | 
						|
            return -(right-left);
 | 
						|
 | 
						|
        int days = left.getDay() - right.getDay();
 | 
						|
 | 
						|
        double hours = 0;
 | 
						|
 | 
						|
        if (left.getHour()<right.getHour())
 | 
						|
        {
 | 
						|
            hours = 24-right.getHour()+left.getHour();
 | 
						|
            --days;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            hours = left.getHour()-right.getHour();
 | 
						|
        }
 | 
						|
 | 
						|
        return hours + 24*days;
 | 
						|
    }
 | 
						|
 | 
						|
    ESM::TimeStamp TimeStamp::toEsm() const
 | 
						|
    {
 | 
						|
        ESM::TimeStamp ret;
 | 
						|
        ret.mDay = mDay;
 | 
						|
        ret.mHour = mHour;
 | 
						|
        return ret;
 | 
						|
    }
 | 
						|
 | 
						|
    TimeStamp::TimeStamp(const ESM::TimeStamp &esm)
 | 
						|
    {
 | 
						|
        mDay = esm.mDay;
 | 
						|
        mHour = esm.mHour;
 | 
						|
    }
 | 
						|
}
 |