SuperMarioOdysseyOnline/source/server/GameModeTimer.cpp
2022-06-16 14:33:18 -07:00

119 lines
No EOL
3.2 KiB
C++

#include "server/gamemode/GameModeTimer.hpp"
#include <math.h>
#include "al/util/ControllerUtil.h"
#include "server/DeltaTime.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::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;
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;
}
}
}
}
if(al::isPadHoldL(-1) && al::isPadTriggerDown(-1)) {
mTime.mMilliseconds = 0;
mTime.mSeconds = 0;
mTime.mMinutes = 0;
mTime.mHours = 0;
}
}