| @@ -1,11 +1,14 @@ | |||
| // | |||
| // Lol Engine | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net> | |||
| // © 2016 Guillaume Bittoun <guillaume.bittoun@gmail.com> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| // and/or modify it under the terms of the Do What the Fuck You Want | |||
| // to Public License, Version 2, as published by the WTFPL Task Force. | |||
| // See http://www.wtfpl.net/ for more details. | |||
| // | |||
| #pragma once | |||
| @@ -21,63 +24,50 @@ | |||
| namespace lol | |||
| { | |||
| /* | |||
| * Timer implementation class | |||
| */ | |||
| class Timer | |||
| { | |||
| private: | |||
| float GetSeconds(bool reset) | |||
| { | |||
| std::chrono::steady_clock::time_point | |||
| tp = std::chrono::steady_clock::now(), | |||
| tp0 = m_tp; | |||
| if (reset) | |||
| m_tp = tp; | |||
| return std::chrono::duration_cast<std::chrono::duration<float>>(tp - tp0).count(); | |||
| } | |||
| public: | |||
| Timer() | |||
| : m_tp() | |||
| { | |||
| (void)GetSeconds(true); | |||
| } | |||
| ~Timer() | |||
| { | |||
| (void)get_seconds(true); | |||
| } | |||
| void Reset() | |||
| { | |||
| (void)GetSeconds(true); | |||
| (void)get_seconds(true); | |||
| } | |||
| float Get() | |||
| { | |||
| return GetSeconds(true); | |||
| return get_seconds(true); | |||
| } | |||
| float Poll() | |||
| { | |||
| return GetSeconds(false); | |||
| return get_seconds(false); | |||
| } | |||
| void Wait(float seconds) | |||
| { | |||
| if (seconds > 0.0f) | |||
| { | |||
| float secs_elapsed = GetSeconds(false); | |||
| float secs_elapsed = get_seconds(false); | |||
| std::this_thread::sleep_for(std::chrono::duration<float>(seconds - secs_elapsed)); | |||
| } | |||
| } | |||
| private: | |||
| std::chrono::steady_clock::time_point m_tp; | |||
| float get_seconds(bool reset) | |||
| { | |||
| auto tp = std::chrono::steady_clock::now(), tp0 = m_tp; | |||
| if (reset) | |||
| m_tp = tp; | |||
| return std::chrono::duration_cast<std::chrono::duration<float>>(tp - tp0).count(); | |||
| } | |||
| }; | |||
| } /* namespace lol */ | |||