selectMode.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. function SelectMode () {
  2. let zodiac_animal_list = ["Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig"];
  3. let that = {};
  4. let zodiac_id = 0;
  5. let ENUM_SELECT_STATE = {
  6. SELECT: 0,
  7. PREPARE_BEGIN: 1
  8. }
  9. let select_state = null;
  10. let begin_result_img;
  11. let select_zodiac = "rat";
  12. //responsive stuffs;
  13. let canvas;
  14. let ctx;
  15. let scale;
  16. let baseWidth = 3840 * 0.5;
  17. let baseHeight = 2160 * 0.5;
  18. let baseRatio = baseWidth/baseHeight;
  19. let defaultTextSize = 95 * 0.5;
  20. let btnSize = 297 * 0.5;
  21. let dropdownSize = 280 * 0.5;
  22. let beginResImgSpecialScale = 3.0 * 0.5;
  23. let text_select_state_desc = "";
  24. that.resizeWindow = function() {
  25. canvas.width = window.innerWidth*devicescreenratio;
  26. canvas.height = window.innerHeight*devicescreenratio;
  27. canvas.style.width = window.innerWidth + "px";
  28. canvas.style.height = window.innerHeight + "px";
  29. ctx.setTransform(devicescreenratio, 0, 0, devicescreenratio, 0, 0);
  30. width = window.innerWidth;
  31. height = window.innerHeight;
  32. c = {x: width / 2.0, y: height / 2.0 };
  33. degree = -90;
  34. scale = width / height > baseRatio ? height / baseHeight : width / baseWidth;
  35. }
  36. that.setup = function () {
  37. that.createModalZodiac();
  38. that.setOnJqueryClickListener();
  39. select_state = ENUM_SELECT_STATE.SELECT;
  40. that.initZodiac();
  41. circle_mask = new Image();
  42. circle_mask.onload = function(){}
  43. circle_mask.src = "content/ui/circle_mask.png";
  44. canvas = document.getElementById('canvas');
  45. ctx = canvas.getContext('2d');
  46. }
  47. that.initZodiac = function() {
  48. zodiac_id = 11;
  49. select_zodiac = zodiac_animal_list[zodiac_id];
  50. let get_zodiac_name = zodiac_animal_list[zodiac_id].toLocaleLowerCase();
  51. let btn_path = 'content/ui/animal_button/' + get_zodiac_name + '_button.png';
  52. let date = new Date();
  53. let year = date.getFullYear().toString().slice(2);
  54. $("#date_text").html(year);
  55. $("#select_zodiac").css({'background-image': 'url(' +btn_path+')'});
  56. that.setSelectorZodiac(zodiac_id);
  57. }
  58. that.update = function() {
  59. that.resizeWindow();
  60. }
  61. that.draw = function() {
  62. if(select_state === ENUM_SELECT_STATE.SELECT) {
  63. that.drawBg();
  64. that.drawText();
  65. that.drawInput();
  66. } else {
  67. ctx.save();
  68. let briscale = beginResImgSpecialScale * scale;
  69. let y = c.y - circle_mask.height * 0.3* scale - begin_result_img.height * 0.5 *briscale ;
  70. let x = c.x - begin_result_img.width * 0.5 * briscale;
  71. that.drawBg();
  72. ctx.drawImage( begin_result_img,x,y,begin_result_img.width * briscale,begin_result_img.height * briscale);
  73. let h = defaultTextSize * scale;
  74. let header_h = h * 1.2;
  75. let line_h = h*0.83;
  76. let instruction_h = h*0.73;
  77. ctx.translate(c.x, c.y);
  78. ctx.font = header_h + "px " + $.i18n('fonts_primary');
  79. ctx.fillStyle ='rgb(160, 56, 57)';
  80. ctx.textAlign = "center";
  81. let str_zodiac_animal = splitText($.i18n('copy_in_spotlight', zodiac_message_list[zodiac_id]), "|");
  82. let origin = -3.2;
  83. if(str_zodiac_animal) {
  84. ctx.font = header_h + "px " + $.i18n('fonts_primary');
  85. for(var i = 0;i < str_zodiac_animal.length; i++) {
  86. ctx.fillText(str_zodiac_animal[i], 0 , line_h * origin);
  87. origin += 1.0;
  88. }
  89. }
  90. ctx.font = instruction_h + "px " + $.i18n('fonts_primary');
  91. let str_array_splited = splitText($.i18n('intro_begin'), "|");
  92. let origin_ = -1.2;
  93. if(str_array_splited) {
  94. for(var i = 0;i < str_array_splited.length; i++) {
  95. ctx.fillText(str_array_splited[i], 0 , line_h * origin_);
  96. origin_ += 1.0;
  97. }
  98. }
  99. ctx.restore();
  100. that.drawBeginBtn();
  101. }
  102. }
  103. that.drawBg = function() {
  104. ctx.save();
  105. ctx.drawImage(bg_img, 0, 0, width, height);
  106. ctx.drawImage(circle_mask, c.x - (circle_mask.width *0.5 * scale), c.y - (circle_mask.height *0.5 * scale) ,circle_mask.width* scale,circle_mask.height* scale );
  107. ctx.restore();
  108. }
  109. that.drawBeginBtn = function() {
  110. let btnScaledSize = btnSize * scale;
  111. let y = c.y + circle_mask.height * 0.325 * scale - btnScaledSize * 0.5;
  112. let x = c.x - btnScaledSize * 0.5;
  113. $('#btn_begin').width(btnScaledSize);
  114. $('#btn_begin').height(btnScaledSize);
  115. $('#btn_begin').offset({top: y , left: x });
  116. }
  117. that.drawText = function() {
  118. let h = defaultTextSize * scale * 0.85;
  119. ctx.save();
  120. ctx.translate(c.x, c.y);
  121. ctx.beginPath();
  122. ctx.font = h + "px " + $.i18n('fonts_primary');
  123. ctx.fillStyle ='rgb(172, 102, 82)';
  124. let line_h = h * 1.3;
  125. let origin_ = -4;
  126. let str_select_desc = splitText($.i18n('select_your_chinese_zodiac_sign'), "|");
  127. if(str_select_desc) {
  128. for(var i = 0;i < str_select_desc.length; i++) {
  129. ctx.fillText(str_select_desc[i], -ctx.measureText(str_select_desc[i]).width / 2 , line_h * origin_);
  130. origin_ += 1.0;
  131. }
  132. }
  133. ctx.fill();
  134. ctx.closePath();
  135. ctx.restore();
  136. }
  137. that.drawInput = function() {
  138. //Start Button
  139. let btnScaledSize = btnSize * scale;
  140. let y = c.y + circle_mask.height * 0.325 * scale - btnScaledSize * 0.5;
  141. let x = c.x - btnScaledSize * 0.5;
  142. $('#btn_next').width(btnScaledSize);
  143. $('#btn_next').height(btnScaledSize);
  144. $('#btn_next').offset({top:y,left: x});
  145. $('#select_zodiac').height(btnScaledSize);
  146. $('#select_zodiac').width(btnScaledSize);
  147. $('#select_year').height(btnScaledSize );
  148. $('#select_year').width(btnScaledSize);
  149. $('#btn_select_zodiac').width(btnScaledSize);
  150. $('#btn_select_zodiac').height(btnScaledSize);
  151. $('#select_year').css({top: c.y - btnScaledSize * 0.5, left: c.x - btnScaledSize * -0.5,position:'absolute' });
  152. $('#select_zodiac').css({top: c.y - btnScaledSize *0.5 , left: c.x - btnScaledSize * 1.5 ,position:'absolute' });
  153. let date_picker_w = $('.datepicker-dropdown').width();
  154. let date_picker_h = $('.datepicker-dropdown').height();
  155. $('.datepicker-dropdown').css({top: c.y - date_picker_h * 0.5, left: c.x - (date_picker_w * 0.5)});
  156. let h = defaultTextSize * scale;
  157. ctx.font = h + "px " + $.i18n('fonts_primary');
  158. ctx.fillStyle = 'rgb(172, 102, 82)';
  159. let line_h = h * 1.3;
  160. let text = $.i18n('or_text');
  161. ctx.translate(c.x, c.y);
  162. ctx.fillText(text, -ctx.measureText(text).width / 2, line_h * 0.3) ;
  163. ctx.fill();
  164. ctx.restore();
  165. }
  166. that.createModalZodiac = function () {
  167. let div = "";
  168. for(var i = 0; i < zodiac_animal_list.length; i++) {
  169. let animal_file = zodiac_animal_list[i].toLocaleLowerCase();
  170. let animal_name= zodiac_text_list[i].toLocaleLowerCase();
  171. if(i % 4 == 0){
  172. div += '</div>' ;
  173. div += '<div class="row">' ;
  174. }
  175. div += '<div id="'+i +'"class="col-sm-3 btn-zodiac" >';
  176. div += '<p id="zodiac_ic_name" class="zodiac-ic-name center-message" style="font-family:' +$.i18n('fonts_primary')+'"> ' +animal_name+'</p>'
  177. div += '<img width="50" src="content/ui/animal_silhouette/' +animal_file +'.png " style=" margin-left: auto; margin-right: auto;display: block;">' ;
  178. div += '</div>';
  179. }
  180. $("#modal_zodiac_body").append(div);
  181. };
  182. that.selectShowUI = function() {
  183. $('#select_zodiac').show();
  184. $('#select_year').show();
  185. $('#btn_next').show();
  186. }
  187. that.selectHideUI = function() {
  188. $('#select_zodiac').hide();
  189. $('#select_year').hide();
  190. $('#btn_next').hide();
  191. }
  192. that.beginShowUI = function() {
  193. $("#btn_begin").show();
  194. }
  195. that.beginHideUI = function() {
  196. $("#btn_begin").hide();
  197. }
  198. that.checkState = function() {
  199. return select_state;
  200. }
  201. that.setSelectorZodiac = function(id) {
  202. select_zodiac = zodiac_animal_list[id];
  203. for(var i = 0; i < zodiac_animal_list.length; i++) {
  204. $("#" + i).find("img").attr('src','content/ui/animal_silhouette/' +zodiac_animal_list[i].toLocaleLowerCase() +'.png ');
  205. if(i == id) {
  206. $("#" + id).find("img").attr('src','content/zodiac_play/' +select_zodiac.toLocaleLowerCase() +'.png ');
  207. }
  208. }
  209. }
  210. that.setOnJqueryClickListener = function() {
  211. $("#btn_next").on('click', function(){
  212. that.selectHideUI();
  213. begin_result_img = new Image();
  214. begin_result_img.onload = function(){
  215. select_state = ENUM_SELECT_STATE.PREPARE_BEGIN;
  216. $("#btn_begin").show();
  217. }
  218. begin_result_img.src = "content/zodiac_black/"+select_zodiac.toLocaleLowerCase()+".png";
  219. });
  220. $("#btn_begin").on('click', function() {
  221. that.selectHideUI();
  222. playMode.resetState();
  223. playMode.initZodiac(zodiac_id);
  224. playMode.showUI();
  225. playMode.setup();
  226. mode = ENUM_MODE.PLAY;
  227. that.beginHideUI();
  228. });
  229. $('.datepicker').datepicker({
  230. minViewMode: 0,
  231. startView:2,
  232. format: 'dd/mm/yyyy',
  233. orientation: "center",
  234. autoclose: true,
  235. language: lang=='zh-cn'?'zh-CN':'en-us',
  236. defaultViewDate: {
  237. year: '1990'
  238. },
  239. });
  240. $('.datepicker').on('changeDate', function() {
  241. var date = $('.datepicker').datepicker('getDate');
  242. select_zodiac = getAnimalName(date.getFullYear(), date.getMonth()+1, date.getDate());
  243. for(var i = 0; i < zodiac_animal_list.length;i++) {
  244. let animal_str = zodiac_animal_list[i];
  245. if(select_zodiac === animal_str) {
  246. zodiac_id = i;
  247. }
  248. }
  249. let get_zodiac_name = zodiac_animal_list[zodiac_id].toLocaleLowerCase();
  250. let btn_path = 'content/ui/animal_button/' + get_zodiac_name + '_button.png';
  251. $("#select_zodiac").css({'background-image': 'url(' +btn_path+')'})
  252. $("#year_text").html( date.getFullYear().toString().slice(2));
  253. that.setSelectorZodiac(zodiac_id);
  254. });
  255. $("#select_zodiac").on('click', function(){
  256. $('#myModal').modal({show:true});
  257. });
  258. //create zodiac animal selection.
  259. for(var i = 0; i < zodiac_animal_list.length; i++) {
  260. $("#" + i).on('click', function() {
  261. zodiac_id = parseInt($(this).attr('id'));
  262. select_zodiac = zodiac_animal_list[zodiac_id];
  263. let get_zodiac_name = zodiac_animal_list[zodiac_id].toLocaleLowerCase();
  264. let btn_path = 'content/ui/animal_button/' + get_zodiac_name + '_button.png';
  265. $("#select_zodiac").css({'background-image': 'url(' +btn_path+')'})
  266. $("#date_text").html('');
  267. $(this).find("img").attr('src','content/zodiac_play/' +select_zodiac.toLocaleLowerCase() +'.png ');
  268. that.setSelectorZodiac(zodiac_id);
  269. });
  270. }
  271. }
  272. return that;
  273. }