content/hifi-content/rebecca/LoadTest/CountdownClock/countdown.js
2022-02-14 02:04:11 +01:00

96 lines
No EOL
3.4 KiB
JavaScript

//
// countDown.js
//
// Created by Rebecca Stankus on 07/02/18
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
(function () {
var _this;
var DEBUG = 1;
var ONE_THOUSAND = 1000;
var SECONDS_PER_MINUTE = 60;
var MINUTES_PER_HOUR = 60;
var HOURS_PER_DAY = 24;
var TWO_DIGITS = 10;
var TARGET_TIME_INDEX = 13;
var Countdown = function() {
_this = this;
};
Countdown.prototype = {
interval: null,
targetTime: null,
preload: function(entityID) {
_this.entityID = entityID;
_this.getTargetTime();
_this.synchronize();
_this.interval = Script.setInterval(function() {
_this.synchronize();
}, ONE_THOUSAND);
},
getTargetTime: function() {
var name = Entities.getEntityProperties(_this.entityID, 'name').name;
_this.targetTime = new Date(name.substring(TARGET_TIME_INDEX, (name.length))).getTime();
if (DEBUG) {
print("target time is ", _this.targetTime);
}
},
synchronize: function() {
var currentTime = new Date().getTime();
print("THE TIME IS NOW ", currentTime.getMonth(), "/", currentTime.getDate(), " ", currentTime.getHours(), ":", currentTime.getMinutes());
var untilTargetTime = _this.targetTime - currentTime;
var days = Math.floor(untilTargetTime / (ONE_THOUSAND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY));
var targetPassed = false;
if (days < 0) {
targetPassed = true;
} else {
days = days < TWO_DIGITS ? "0" + days : days;
}
var hours = Math.floor((untilTargetTime % (ONE_THOUSAND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY))
/ (ONE_THOUSAND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR ));
if (hours < 0) {
targetPassed = true;
} else {
hours = hours < TWO_DIGITS ? "0" + hours : hours;
}
var minutes = Math.floor((untilTargetTime % (ONE_THOUSAND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR )) /
(ONE_THOUSAND * SECONDS_PER_MINUTE));
if (minutes < 0) {
targetPassed = true;
} else {
minutes = minutes < TWO_DIGITS ? "0" + minutes : minutes;
}
var seconds = Math.floor((untilTargetTime % (ONE_THOUSAND * SECONDS_PER_MINUTE)) / ONE_THOUSAND);
if (seconds < 0) {
targetPassed = true;
} else {
seconds = seconds < TWO_DIGITS ? "0" + seconds : seconds;
}
if (targetPassed) {
Entities.editEntity(_this.entityID, { text: "HOORAY!" });
} else {
Entities.editEntity(_this.entityID, { text: days + "d " + hours + "h "
+ minutes + "m " + seconds + "s "});
}
},
unload: function() {
if (_this.interval) {
Script.clearInterval(_this.interval);
}
}
};
return new Countdown;
});