update: class Duration

This commit is contained in:
Nomango 2018-10-18 15:33:14 +08:00
parent 05849422a4
commit e7cc0773e6
6 changed files with 116 additions and 27 deletions

View File

@ -90,7 +90,7 @@ void easy2d::Animate::Update()
target->Load(frames[frame_index_]);
}
started_ += Duration(animation_->GetInterval());
started_ += Duration::Second * animation_->GetInterval();
++frame_index_;
if (frame_index_ == frames.size())

View File

@ -62,5 +62,5 @@ void easy2d::Delay::Update()
void easy2d::Delay::ResetTime()
{
Action::ResetTime();
started_ = Time::Now() - Duration(delta_);
started_ = Time::Now() - Duration::Second * delta_;
}

View File

@ -60,5 +60,5 @@ void easy2d::FiniteTimeAction::Update()
void easy2d::FiniteTimeAction::ResetTime()
{
Action::ResetTime();
started_ = Time::Now() - Duration(delta_ * duration_);
started_ = Time::Now() - Duration::Second * (delta_ * duration_);
}

View File

@ -513,19 +513,31 @@ namespace easy2d
// 时间段
class Duration
{
public:
static const Duration Millisecond; // 毫秒
static const Duration Second; // 秒
static const Duration Minute; // 分钟
static const Duration Hour; // 小时
public:
Duration();
explicit Duration(
float seconds
int64_t milliseconds
);
// 获取毫秒数
int Milliseconds() const;
int64_t Milliseconds() const;
// 获取秒数
float Seconds() const;
// 获取分钟数
float Minutes() const;
// 获取小时数
float Hours() const;
bool operator== (const Duration &) const;
bool operator!= (const Duration &) const;
bool operator> (const Duration &) const;
@ -535,12 +547,20 @@ namespace easy2d
Duration operator + (Duration const &) const;
Duration operator - (Duration const &) const;
Duration operator * (int) const;
Duration operator * (float) const;
Duration operator / (int) const;
Duration operator / (float) const;
Duration& operator += (Duration const &);
Duration& operator -= (Duration const &);
Duration& operator *= (int);
Duration& operator *= (float);
Duration& operator /= (int);
Duration& operator /= (float);
private:
std::chrono::milliseconds duration_ms_;
int64_t milliseconds_;
};
@ -553,7 +573,7 @@ namespace easy2d
// 获取时间戳
time_t GetTimeStamp() const;
// 是否是
// 是否是零时
bool IsZero() const;
Time operator + (Duration const &) const;

View File

@ -20,80 +20,148 @@
#include "..\e2dutil.h"
using namespace std::chrono;
const easy2d::Duration easy2d::Duration::Millisecond = easy2d::Duration(1);
const easy2d::Duration easy2d::Duration::Second = 1000 * easy2d::Duration::Millisecond;
const easy2d::Duration easy2d::Duration::Minute = 60 * easy2d::Duration::Second;
const easy2d::Duration easy2d::Duration::Hour = 60 * easy2d::Duration::Minute;
easy2d::Duration::Duration()
: duration_ms_()
: milliseconds_(0)
{
}
easy2d::Duration::Duration(float seconds)
: duration_ms_(static_cast<long long>(seconds * 1000.f))
easy2d::Duration::Duration(int64_t milliseconds)
: milliseconds_(milliseconds)
{
}
int easy2d::Duration::Milliseconds() const
int64_t easy2d::Duration::Milliseconds() const
{
return static_cast<int>(duration_ms_.count());
return milliseconds_;
}
float easy2d::Duration::Seconds() const
{
return duration_ms_.count() / 1000.f;
int64_t sec = milliseconds_ / Second.milliseconds_;
int64_t ms = milliseconds_ % Second.milliseconds_;
return static_cast<float>(sec) + static_cast<float>(ms) / 1000.f;
}
float easy2d::Duration::Minutes() const
{
int64_t min = milliseconds_ / Minute.milliseconds_;
int64_t ms = milliseconds_ % Minute.milliseconds_;
return static_cast<float>(min) + static_cast<float>(ms) / (60 * 1000.f);
}
float easy2d::Duration::Hours() const
{
int64_t hour = milliseconds_ / Hour.milliseconds_;
int64_t ms = milliseconds_ % Hour.milliseconds_;
return static_cast<float>(hour) + static_cast<float>(ms) / (60 * 60 * 1000.f);
}
bool easy2d::Duration::operator==(const Duration & other) const
{
return duration_ms_ == other.duration_ms_;
return milliseconds_ == other.milliseconds_;
}
bool easy2d::Duration::operator!=(const Duration & other) const
{
return duration_ms_ != other.duration_ms_;
return milliseconds_ != other.milliseconds_;
}
bool easy2d::Duration::operator>(const Duration & other) const
{
return duration_ms_ > other.duration_ms_;
return milliseconds_ > other.milliseconds_;
}
bool easy2d::Duration::operator>=(const Duration & other) const
{
return duration_ms_ >= other.duration_ms_;
return milliseconds_ >= other.milliseconds_;
}
bool easy2d::Duration::operator<(const Duration & other) const
{
return duration_ms_ < other.duration_ms_;
return milliseconds_ < other.milliseconds_;
}
bool easy2d::Duration::operator<=(const Duration & other) const
{
return duration_ms_ <= other.duration_ms_;
return milliseconds_ <= other.milliseconds_;
}
easy2d::Duration easy2d::Duration::operator+(Duration const & other) const
{
Duration d;
d.duration_ms_ = duration_ms_ + other.duration_ms_;
Duration d(milliseconds_ + other.milliseconds_);
return std::move(d);
}
easy2d::Duration easy2d::Duration::operator-(Duration const & other) const
{
Duration d;
d.duration_ms_ = duration_ms_ - other.duration_ms_;
Duration d(milliseconds_ - other.milliseconds_);
return std::move(d);
}
easy2d::Duration easy2d::Duration::operator*(int value) const
{
Duration d(milliseconds_ * value);
return std::move(d);
}
easy2d::Duration easy2d::Duration::operator/(int value) const
{
Duration d(milliseconds_ / value);
return std::move(d);
}
easy2d::Duration easy2d::Duration::operator*(float value) const
{
int64_t ms = static_cast<int64_t>(milliseconds_ * value);
Duration d(ms);
return std::move(d);
}
easy2d::Duration easy2d::Duration::operator/(float value) const
{
int64_t ms = static_cast<int64_t>(milliseconds_ / value);
Duration d(ms);
return std::move(d);
}
easy2d::Duration & easy2d::Duration::operator+=(Duration const &other)
{
duration_ms_ += other.duration_ms_;
milliseconds_ += other.milliseconds_;
return (*this);
}
easy2d::Duration & easy2d::Duration::operator-=(Duration const &other)
{
duration_ms_ -= other.duration_ms_;
milliseconds_ -= other.milliseconds_;
return (*this);
}
easy2d::Duration & easy2d::Duration::operator*=(int value)
{
milliseconds_ *= value;
return (*this);
}
easy2d::Duration & easy2d::Duration::operator/=(int value)
{
milliseconds_ /= value;
return (*this);
}
easy2d::Duration & easy2d::Duration::operator*=(float value)
{
milliseconds_ *= value;
return (*this);
}
easy2d::Duration & easy2d::Duration::operator/=(float value)
{
milliseconds_ /= value;
return (*this);
}

View File

@ -67,7 +67,8 @@ easy2d::Time & easy2d::Time::operator-=(Duration const &other)
easy2d::Duration easy2d::Time::operator-(Time const & other) const
{
auto ms = duration_cast<milliseconds>(time_ - other.time_).count();
return std::move(Duration(static_cast<float>(ms) / 1000.f));
Duration d(static_cast<int64_t>(ms));
return std::move(d);
}
easy2d::Time easy2d::Time::Now()