mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-22 03:05:16 +00:00
126 lines
No EOL
3.5 KiB
C++
126 lines
No EOL
3.5 KiB
C++
#include "server/gamemode/GameModeTimer.hpp"
|
|
#include <math.h>
|
|
#include "al/util/ControllerUtil.h"
|
|
#include "server/DeltaTime.hpp"
|
|
#include "logger.hpp"
|
|
|
|
GameModeTimer::GameModeTimer(bool isCountUp, float milli, int seconds, int minutes, int hours) {
|
|
mIsCountUp = isCountUp;
|
|
setTime(milli, seconds, minutes, hours);
|
|
}
|
|
|
|
GameModeTimer::GameModeTimer(float milli, int seconds, int minutes, int hours) {
|
|
mIsCountUp = false;
|
|
setTime(milli, seconds, minutes, hours);
|
|
}
|
|
|
|
GameModeTimer::GameModeTimer(GameTime const& time) {
|
|
mIsCountUp = true;
|
|
setTime(time);
|
|
}
|
|
|
|
GameModeTimer::GameModeTimer() {
|
|
mIsCountUp = true;
|
|
resetTime();
|
|
}
|
|
|
|
void GameModeTimer::setTime(float milli, int seconds, int minutes, int hours) {
|
|
if (milli >= 0)
|
|
mTime.mMilliseconds = milli;
|
|
if (seconds >= 0)
|
|
mTime.mSeconds = seconds;
|
|
if (minutes >= 0)
|
|
mTime.mMinutes = minutes;
|
|
if (hours >= 0)
|
|
mTime.mHours = hours;
|
|
}
|
|
|
|
void GameModeTimer::setTime(GameTime const& time) {
|
|
mTime = time;
|
|
}
|
|
|
|
void GameModeTimer::updateTimer() {
|
|
if (mIsUseControl) {
|
|
timerControl();
|
|
}
|
|
|
|
if (mIsEnabled) {
|
|
if (mIsCountUp) {
|
|
mTime.mMilliseconds += Time::deltaTime;
|
|
|
|
if (mTime.mMilliseconds >= 1) {
|
|
mTime.mMilliseconds--;
|
|
mTime.mSeconds++;
|
|
if (mTime.mSeconds >= 60) {
|
|
mTime.mSeconds = 0;
|
|
mTime.mMinutes++;
|
|
if (mTime.mMinutes >= 60) {
|
|
mTime.mMinutes = 0;
|
|
mTime.mHours++;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
mTime.mMilliseconds += Time::deltaTime;
|
|
if (mTime.mMilliseconds >= 1) {
|
|
mTime.mMilliseconds--;
|
|
mTime.mSeconds--;
|
|
if (mTime.mSeconds < 0) {
|
|
mTime.mSeconds = 59;
|
|
mTime.mMinutes--;
|
|
if (mTime.mMinutes < 0) {
|
|
if (mTime.mHours > 0) {
|
|
mTime.mMinutes = 59;
|
|
mTime.mHours--;
|
|
} else {
|
|
mIsEnabled = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void GameModeTimer::timerControl() {
|
|
if (al::isPadHoldL(-1)) {
|
|
if (al::isPadTriggerDown(-1)) {
|
|
mTime.mMilliseconds = 0;
|
|
mTime.mSeconds = 0;
|
|
mTime.mMinutes = 0;
|
|
mTime.mHours = 0;
|
|
}
|
|
} else {
|
|
if (al::isPadHoldRight(-1)) {
|
|
mTime.mMilliseconds = 0;
|
|
mTime.mSeconds++;
|
|
if (mTime.mSeconds >= 60) {
|
|
mTime.mSeconds = 0;
|
|
mTime.mMinutes++;
|
|
if (mTime.mMinutes >= 60) {
|
|
mTime.mMinutes = 0;
|
|
mTime.mHours++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (al::isPadTriggerLeft(-1)) {
|
|
mTime.mMilliseconds = 0;
|
|
if (mTime.mMinutes != 0) {
|
|
mTime.mSeconds--;
|
|
if (mTime.mSeconds < 0) {
|
|
mTime.mSeconds = 59;
|
|
mTime.mMinutes--;
|
|
if (mTime.mMinutes < 0) {
|
|
if (mTime.mHours > 0) {
|
|
mTime.mMinutes = 59;
|
|
mTime.mHours--;
|
|
} else {
|
|
mTime.mMinutes = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |