Skip to content

Instantly share code, notes, and snippets.

@johnnybui
Last active November 15, 2023 11:26
Show Gist options
  • Select an option

  • Save johnnybui/7310646667b4640636dfac6bf24bd177 to your computer and use it in GitHub Desktop.

Select an option

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
/*
** 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