//version 20190201 11:53PM
let fps = 30;
let ctx = undefined;
let width = undefined;
let height = undefined;
let c = undefined;
let scale = 1;
let device = []
var ENUM_MODE = {
LANDING: 0,
SELECT: 1,
PLAY: 2,
PRACTICE: 3,
SUMMARY: 4
};
let mode = null;
let canCalibrate = true
let landingMode, selectMode, playMode, endMode;
let bg_img;
let bg_circle_img_01;
let defaultRotateImgScale = 1.77778;
let rotate_device_img;
let mobileDevice = false;
let iOS = false;
let isAndroid = false;
let isFirefox = false;
let isSafari = false;
let isChrome = false;
// let alreadyTryGetUserMedia = false;
// let canGetUserMedia = false;
let text_valid_device_size = 50;
let canPlayBGM = true
let g_bgm = new Audio()
g_bgm.src = './audio/bgm.mp3'
g_bgm.load()
g_bgm.loop = true
let action_music = new Audio()
action_music.src = ''
action_music.load()
action_music.loop = true
let zodiac_animal_list = ["Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig"].map((item, i) => {
return {
name: item,
id: i
}
});
function loadList(id, score, cb = () => { }) {
let tempf = zodiac_animal_list.slice(0, id)
let tempb = zodiac_animal_list.slice(id)
zodiac_animal_list = tempb.concat(tempf)
let html = ''
for (let i = 0; i < zodiac_animal_list.length; i++) {
let ele = zodiac_animal_list[i]
let temp = 'normal'
if (i < score) {
temp = 'selected'
}
html += `
`
}
$('.selectList ul').html(html)
$('.selectList ul').delegate('li', 'click', function () {
if ($(this).is('.liactive')) {
return
}
if (this.dataset.active == 'selected') {
$(this).siblings().removeClass('liactive')
$(this).addClass('liactive')
cb(this.dataset)
}
})
$('.selectList').show()
}
$('#bgm').click(() => {
if ($('#bgm').is('.bgmplay')) {
$('#bgm').removeClass('bgmplay')
g_bgm.pause()
} else {
$('#bgm').addClass('bgmplay')
g_bgm.play()
}
})
function setup() {
checkDevice();
if (mobileDevice) {
showMobileTips()
return
}
mode = ENUM_MODE.LANDING;
endMode = EndMode();
playMode = PlayMode(endMode);
landingMode = LandingMode(playMode);
selectMode = SelectMode(playMode);
landingMode.setup();
selectMode.setup();
endMode.setup();
bg_img = new Image();
bg_img.onload = function () { }
bg_img.src = "content/ui/bg.jpg";
bg_circle_img_01 = new Image();
bg_circle_img_01.onload = function () { }
bg_circle_img_01.src = "content/ui/circle_mask.png";
rotate_device_img = new Image();
rotate_device_img.onload = function () { }
rotate_device_img.src = "content/ui/rotate_icon.png";
browser_support_img = new Image();
browser_support_img.onload = function () { }
browser_support_img.src = "content/ui/shadow_art.png";
// canGetUserMedia = false;
// alreadyTryGetUserMedia = true;
// alert(navigator.mediaDevices==null);
// navigator.mediaDevices.getUserMedia({ video: { width: { min: 640 }, height: { min: 480 } }, audio: false })
// .then(function(stream) {
// canGetUserMedia = true;
// })
// .catch(function(err) {
// canGetUserMedia = false;
// });
}
function checkDevice() {
var md = new MobileDetect(window.navigator.userAgent);
if (md.mobile() || md.phone() || md.tablet()) {
mobileDevice = true;
} else {
mobileDevice = false;
}
}
function update() {
scale = width / height > 1.77778 ? height / 1080 : width / 1920;
if (mode == ENUM_MODE.LANDING) {
landingMode.update();
} else if (mode == ENUM_MODE.SELECT) {
selectMode.update();
} else if (mode == ENUM_MODE.PLAY) {
playMode.update();
} else if (mode == ENUM_MODE.SUMMARY) {
endMode.update();
}
}
function hideUI() {
$('#btn_practice').hide();
$('#btn_next').hide();
$('#select_zodiac').hide();
$('#select_year').hide();
$('#play_again_btn').hide();
$('#btn_play_end').hide();
$('#calibrate_message').hide();
$('#btn_begin').hide();
}
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later:
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
function draw() {
var isChromium = window.chrome;
var winNav = window.navigator;
var vendorName = winNav.vendor;
var isOpera = typeof window.opr !== "undefined";
var isIEedge = winNav.userAgent.indexOf("Edge") > -1;
var hasMediaDevices = navigator.mediaDevices != null;
isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
isChrome = isChromium !== null &&
typeof isChromium !== "undefined" &&
vendorName === "Google Inc." &&
isOpera === false &&
isIEedge === false;
isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
isAndroid = /(android)/i.test(navigator.userAgent);
var isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
var iOSver = iOSversion();
if (mode == ENUM_MODE.LANDING) {
if (!hasMediaDevices // Can not use camera.
|| iOS && !isSafari // iPad|iPhone|iPod did not use Safari.
|| iOS && iOSver[0] < 11 // iPad|iPhone|iPod had iOS version lower than 11.
|| !iOS && !isMac && !isChrome // All devices except Mac|iPad|iPhone|iPod did not use Chrome.
|| isMac && !isChrome && !isSafari // Mac did not use Chrome or Safari.
) {
$('#btn_play').hide();
showMobileTips()
return;
}
}
if (mode != null && mobileDevice) {
let _canvas = document.getElementById('canvas');
let _ctx = _canvas.getContext('2d');
_ctx.save();
_ctx.drawImage(bg_img, 0, 0, window.innerWidth, window.innerHeight);
_ctx.translate(c.x, c.y);
// _ctx.drawImage(rotate_device_img, -rotate_device_img.width * 0.5 * scaleRotateDeviceImg, - rotate_device_img.height * 0.5 * scaleRotateDeviceImg, rotate_device_img.width * scaleRotateDeviceImg, rotate_device_img.height * scaleRotateDeviceImg);
_ctx.restore();
hideUIState();
} else {
if (mode == ENUM_MODE.LANDING) {
landingMode.showUI();
landingMode.draw();
if ($('#bgm').css('display') == 'none') {
$('#bgm').show()
}
} else if (mode == ENUM_MODE.SELECT) {
landingMode.hideUI();
if (selectMode.checkState() == 0) {
selectMode.selectShowUI();
} else {
selectMode.selectHideUI();
selectMode.beginShowUI();
}
selectMode.draw();
} else if (mode == ENUM_MODE.PLAY) {
playMode.draw();
} else if (mode == ENUM_MODE.SUMMARY) {
if (!endMode.checkCompleted()) {
$('#btn_play_end').hide();
$('#play_again_btn').show();
} else {
$('#btn_play_end').show();
$('#play_again_btn').hide();
}
endMode.draw();
}
}
}
function showMobileTips() {
$('#mobiletips').css('display', 'flex')
$('.mtipsheader img').attr('src', $.i18n('header_img'))
$('.mbtips p').html($.i18n('mb_tips'))
$('.mbbtn .mbcopy').html($.i18n('copylink')).unbind().bind('click', (e) => {
e.preventDefault();
var textArea = document.createElement("textarea");
textArea.style.position = "fixed";
textArea.style.top = 0;
textArea.style.left = 0;
textArea.style.width = "2em";
textArea.style.height = "2em";
textArea.style.padding = 0;
textArea.style.border = "none";
textArea.style.outline = "none";
textArea.style.boxShadow = "none";
textArea.style.background = "transparent";
textArea.value = document.location.href;
document.body.appendChild(textArea);
textArea.select();
try {
document.execCommand("copy") ? alert("复制成功") : alert("复制失败");
} catch (err) {
alert("复制失败");
}
document.body.removeChild(textArea);
})
$(`.mblang li[data-lang="${lang}"]`).siblings().removeClass('active')
$(`.mblang li[data-lang="${lang}"]`).addClass('active')
$(`.mblang`).delegate('li', 'click', function () {
if ($(this).is('.active')) {
return
}
console.log(this.dataset.lang);
window.location = window.location.href.toString().split("?")[0] + "?lang=" + this.dataset.lang;
setTimeout(function(){
location.reload();
}, 500);
})
}
function hideUIState() {
if (mode == ENUM_MODE.LANDING) {
landingMode.hideUI();
} else if (mode == ENUM_MODE.SELECT) {
if (selectMode.checkState() == 0) {
selectMode.selectHideUI();
} else {
selectMode.beginHideUI();
}
} else if (mode == ENUM_MODE.SUMMARY) {
$('#btn_play_end').hide();
$('#play_again_btn').hide();
}
$('.intro__footer-link--right ').hide();
$('#dropdown_select_lang').hide();
}