mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-09 13:15:05 +00:00
119 lines
3.2 KiB
C++
119 lines
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;
|
||
|
}
|
||
|
}
|