Last active
November 15, 2023 11:26
-
-
Save johnnybui/7310646667b4640636dfac6bf24bd177 to your computer and use it in GitHub Desktop.
Amazfit GTR 3 Pro Pilots Watch Face (modified for smooth second animation) - Sample script for smooth second - https://amazfitwatchfaces.com/gtr/view/21850 - Modified from chen1092 code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| ** Modified by Johnny Bui for smooth second hand sweeping, | |
| ** credits to chen1092 original code | |
| ** | |
| ** File originaly generated by tool | |
| ** Watch_Face_Editor tool | |
| ** watchface js version v1.0.1 | |
| ** Copyright © CashaCX75. All Rights Reserved | |
| */ | |
| try { | |
| (() => { | |
| const __$$app$$__ = __$$hmAppManager$$__.currentApp; | |
| const __$$module$$__ = __$$app$$__.current; | |
| //drink is a name,can modify | |
| const h = new DeviceRuntimeCore.WidgetFactory(new DeviceRuntimeCore.HmDomApi(__$$app$$__, __$$module$$__), 'drink'); | |
| 'use strict'; | |
| //dynamic modify start | |
| let normal_background_bg_img; | |
| let normal_weather_image_progress_img_level; | |
| let normal_temperature_current_text_img; | |
| let normal_step_current_text_img; | |
| let normal_step_pointer_progress_img_pointer; | |
| let normal_date_img_date_week_img; | |
| let normal_date_img_date_day; | |
| let normal_date_img_date_month; | |
| let normal_date_img_date_year; | |
| let normal_heart_rate_text_text_img; | |
| let normal_heart_rate_pointer_progress_img_pointer; | |
| let normal_battery_text_text_img; | |
| let normal_battery_pointer_progress_img_pointer; | |
| let normal_analog_clock_time_pointer_hour; | |
| let normal_analog_clock_time_pointer_minute; | |
| let normal_analog_clock_time_pointer_second; | |
| let idle_analog_clock_time_pointer_hour; | |
| let idle_analog_clock_time_pointer_minute; | |
| //dynamic modify end | |
| /** | |
| * SMOOTH SECONDS SCRIPTS | |
| */ | |
| let now; | |
| let lastTime = 0; | |
| let animTimer; | |
| let widgetDelegate; | |
| const animDuration = 5000; | |
| const animFps = 25; // 8 for 28800VPH, 10 for 36000VPH, 25 for smooth motion | |
| function setSec() { | |
| const screenType = hmSetting.getScreenType(); | |
| if (screenType === hmSetting.screen_type.AOD) { | |
| return stopSecAnim(); | |
| } | |
| if (!now) { | |
| now = hmSensor.createSensor(hmSensor.id.TIME); | |
| } | |
| if (widgetDelegate) return; | |
| widgetDelegate = hmUI.createWidget(hmUI.widget.WIDGET_DELEGATE, { | |
| resume_call: (function () { | |
| console.log('ui resume'); | |
| if (animTimer) return; | |
| let duration = 0; | |
| const diffTime = now.utc - lastTime; | |
| if (diffTime < animDuration) { | |
| duration = animDuration - diffTime; | |
| } | |
| animTimer = timer.createTimer(duration, animDuration, (function (option) { | |
| lastTime = now.utc; | |
| startSecAnim(now.second * 6); | |
| })); | |
| }), | |
| pause_call: (function () { | |
| console.log('ui pause'); | |
| stopSecAnim(); | |
| }), | |
| }); | |
| } | |
| function startSecAnim(sec) { | |
| const secAnim = { | |
| anim_rate: 'linear', | |
| anim_duration: animDuration, | |
| anim_from: sec, | |
| anim_to: sec + animDuration * 6 / 1000, | |
| repeat_count: 1, | |
| anim_fps: animFps, | |
| anim_key: "angle", | |
| anim_status: 1, | |
| } | |
| normal_analog_clock_time_pointer_second.setProperty(hmUI.prop.ANIM, secAnim); | |
| } | |
| /** | |
| * onDestroy() | |
| */ | |
| function stopSecAnim() { | |
| if (animTimer) { | |
| timer.stopTimer(animTimer); | |
| animTimer = undefined; | |
| } | |
| } | |
| /** END SMOOTH SECOND SCRIPTS */ | |
| //not required | |
| const logger = DeviceRuntimeCore.HmLogger.getLogger("yeguang"); | |
| __$$module$$__.module = DeviceRuntimeCore.WatchFace({ | |
| init_view() { | |
| //dynamic modify start | |
| normal_background_bg_img = hmUI.createWidget(hmUI.widget.IMG, { | |
| x: 0, | |
| y: 0, | |
| w: 480, | |
| h: 480, | |
| src: '1.png', | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_weather_image_progress_img_level = hmUI.createWidget(hmUI.widget.IMG_LEVEL, { | |
| x: 330, | |
| y: 168, | |
| image_array: ["2.png", "3.png", "4.png", "5.png", "6.png", "7.png", "9.png", "12.png", "13.png", "14.png", "16.png", "17.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "25.png", "26.png", "28.png", "29.png", "30.png", "31.png", "32.png", "33.png", "34.png", "35.png", "36.png"], | |
| image_length: 29, | |
| type: hmUI.data_type.WEATHER_CURRENT, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_temperature_current_text_img = hmUI.createWidget(hmUI.widget.TEXT_IMG, { | |
| x: 385, | |
| y: 185, | |
| font_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| padding: false, | |
| h_space: 0, | |
| negative_image: '53.png', | |
| invalid_image: '52.png', | |
| align_h: hmUI.align.CENTER_H, | |
| type: hmUI.data_type.WEATHER_CURRENT, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_step_current_text_img = hmUI.createWidget(hmUI.widget.TEXT_IMG, { | |
| x: 202, | |
| y: 159, | |
| font_array: ["31.png", "32.png", "33.png", "34.png", "35.png", "36.png", "37.png", "38.png", "39.png", "40.png"], | |
| padding: false, | |
| h_space: 0, | |
| align_h: hmUI.align.CENTER_H, | |
| type: hmUI.data_type.STEP, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_step_pointer_progress_img_pointer = hmUI.createWidget(hmUI.widget.IMG_POINTER, { | |
| src: '41.png', | |
| center_x: 239, | |
| center_y: 119, | |
| x: 19, | |
| y: 80, | |
| start_angle: -113, | |
| end_angle: 113, | |
| type: hmUI.data_type.STEP, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_date_img_date_week_img = hmUI.createWidget(hmUI.widget.IMG_WEEK, { | |
| x: 333, | |
| y: 228, | |
| week_en: ["55.png", "56.png", "57.png", "58.png", "59.png", "60.png", "61.png"], | |
| week_tc: ["55.png", "56.png", "57.png", "58.png", "59.png", "60.png", "61.png"], | |
| week_sc: ["55.png", "56.png", "57.png", "58.png", "59.png", "60.png", "61.png"], | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_date_img_date_day = hmUI.createWidget(hmUI.widget.IMG_DATE, { | |
| day_startX: 396, | |
| day_startY: 230, | |
| day_sc_array: ["62.png", "63.png", "64.png", "65.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png"], | |
| day_tc_array: ["62.png", "63.png", "64.png", "65.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png"], | |
| day_en_array: ["62.png", "63.png", "64.png", "65.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png"], | |
| day_zero: 1, | |
| day_space: 0, | |
| day_align: hmUI.align.LEFT, | |
| day_is_character: false, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_date_img_date_month = hmUI.createWidget(hmUI.widget.IMG_DATE, { | |
| month_startX: 400, | |
| month_startY: 265, | |
| month_sc_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| month_tc_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| month_en_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| month_zero: 1, | |
| month_space: 0, | |
| month_align: hmUI.align.LEFT, | |
| month_is_character: false, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_date_img_date_year = hmUI.createWidget(hmUI.widget.IMG_DATE, { | |
| year_startX: 322, | |
| year_startY: 265, | |
| year_sc_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| year_tc_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| year_en_array: ["42.png", "43.png", "44.png", "45.png", "46.png", "47.png", "48.png", "49.png", "50.png", "51.png"], | |
| year_zero: 1, | |
| year_space: 0, | |
| year_align: hmUI.align.LEFT, | |
| year_is_character: false, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_heart_rate_text_text_img = hmUI.createWidget(hmUI.widget.TEXT_IMG, { | |
| x: 113, | |
| y: 256, | |
| font_array: ["72.png", "73.png", "74.png", "75.png", "76.png", "77.png", "78.png", "79.png", "80.png", "81.png"], | |
| padding: false, | |
| h_space: 0, | |
| invalid_image: '82.png', | |
| align_h: hmUI.align.CENTER_H, | |
| type: hmUI.data_type.HEART, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_heart_rate_pointer_progress_img_pointer = hmUI.createWidget(hmUI.widget.IMG_POINTER, { | |
| src: '83.png', | |
| center_x: 137, | |
| center_y: 241, | |
| x: 19, | |
| y: 57, | |
| start_angle: -180, | |
| end_angle: 180, | |
| type: hmUI.data_type.HEART, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_battery_text_text_img = hmUI.createWidget(hmUI.widget.TEXT_IMG, { | |
| x: 210, | |
| y: 382, | |
| font_array: ["72.png", "73.png", "74.png", "75.png", "76.png", "77.png", "78.png", "79.png", "80.png", "81.png"], | |
| padding: false, | |
| h_space: 0, | |
| unit_sc: '85.png', | |
| unit_tc: '85.png', | |
| unit_en: '85.png', | |
| invalid_image: '84.png', | |
| align_h: hmUI.align.CENTER_H, | |
| type: hmUI.data_type.BATTERY, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_battery_pointer_progress_img_pointer = hmUI.createWidget(hmUI.widget.IMG_POINTER, { | |
| src: '86.png', | |
| center_x: 240, | |
| center_y: 360, | |
| x: 19, | |
| y: 80, | |
| start_angle: -180, | |
| end_angle: 180, | |
| type: hmUI.data_type.BATTERY, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_analog_clock_time_pointer_hour = hmUI.createWidget(hmUI.widget.TIME_POINTER, { | |
| hour_path: '87.png', | |
| hour_centerX: 240, | |
| hour_centerY: 240, | |
| hour_posX: 42, | |
| hour_posY: 240, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| normal_analog_clock_time_pointer_minute = hmUI.createWidget(hmUI.widget.TIME_POINTER, { | |
| minute_path: '88.png', | |
| minute_centerX: 240, | |
| minute_centerY: 240, | |
| minute_posX: 42, | |
| minute_posY: 240, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| // Smooth Seconds | |
| normal_analog_clock_time_pointer_second = normal_analog_clock_time_pointer_second || hmUI.createWidget(hmUI.widget.IMG, { | |
| x: 0, | |
| y: 0, | |
| w: 480, | |
| h: 480, | |
| pos_x: 480 / 2 - 42, | |
| pos_y: 480 / 2 - 240, | |
| center_x: 240, | |
| center_y: 240, | |
| src: "89.png", | |
| angle: 0, | |
| show_level: hmUI.show_level.ONLY_NORMAL, | |
| }); | |
| setSec(); | |
| idle_analog_clock_time_pointer_hour = hmUI.createWidget(hmUI.widget.TIME_POINTER, { | |
| hour_path: '90.png', | |
| hour_centerX: 240, | |
| hour_centerY: 240, | |
| hour_posX: 42, | |
| hour_posY: 240, | |
| show_level: hmUI.show_level.ONAL_AOD, | |
| }); | |
| idle_analog_clock_time_pointer_minute = hmUI.createWidget(hmUI.widget.TIME_POINTER, { | |
| minute_path: '91.png', | |
| minute_centerX: 240, | |
| minute_centerY: 240, | |
| minute_posX: 42, | |
| minute_posY: 240, | |
| show_level: hmUI.show_level.ONAL_AOD, | |
| }); | |
| //dynamic modify end | |
| }, | |
| onInit() { | |
| console.log('index page.js on init invoke') | |
| this.init_view() | |
| }, | |
| onReady() { | |
| console.log('index page.js on ready invoke') | |
| }, | |
| onShow() { | |
| console.log('index page.js on show invoke') | |
| }, | |
| onHide() { | |
| console.log('index page.js on hide invoke') | |
| }, | |
| onDestory() { // found typo. Added method below just in case | |
| console.log('index page.js on destory invoke') | |
| stopSecAnim(); | |
| }, | |
| onDestroy() { | |
| console.log('index page.js on destroy invoke') | |
| stopSecAnim(); | |
| }, | |
| }); | |
| })() | |
| } catch (e) { | |
| console.log(e) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment