Skip to content

Instantly share code, notes, and snippets.

@moukrea
Last active February 17, 2022 21:58
Show Gist options
  • Select an option

  • Save moukrea/1b0bb09ab957c16e54279ae2badf1f24 to your computer and use it in GitHub Desktop.

Select an option

Save moukrea/1b0bb09ab957c16e54279ae2badf1f24 to your computer and use it in GitHub Desktop.
Pujie Black custom complications
/**
* ##############################################
* COMMON
* ##############################################
* @info All layers need this piece of code, except "Full circle". For shadow, please set "is_shadow" to true
*/
// Stored complication values in variables for debugging purposes
var value_now = [cvalue];
var value_min = [cmin] <= value_now ? [cmin] : value_now;
var value_max = [cmax];
// Convert complication values in percentages
// /!\ Do not change the scale as it would break logic in bellow steps
var percent_min = 0;
var percent_max = 100;
var percent_now = ( (value_now - value_min) / (value_max - value_min) ) * (percent_max - percent_min) + percent_min;
// Only to be set to true in Shadow layer
var is_shadow = false;
// Special case when value is higher than maximum expected value (over-achievement)
if (percent_now > percent_max || (is_shadow == true && percent_now > ( percent_max - 10 ))) {
var percent_over = percent_now - percent_max;
}
// Over-over-achiever edge case
if (typeof percent_over !== 'undefined' && (percent_over > percent_max || (is_shadow == true && percent_over > ( percent_max - 10 )))) {
percent_over = percent_now - percent_max;
do {
percent_over = percent_over - percent_max;
} while (percent_over > percent_max && percent_over - percent_max > 0)
}
/**
* ##############################################
* LAYER: First half
* ##############################################
* @type Arc layer
* @startAngle 270
* @sweepAngle Automated
* @partAngle 300,00
* @gapAngle 2,000
* @strokeStyle #1
*/
// First half visibility
return percent_now >= 0 && percent_now <= 150 ? true : false;
// First half processing
if (percent_now > percent_max) {
return 180;
} else {
return ( percent_now / percent_max ) * 360;
}
/**
* ##############################################
* LAYER: Second half
* ##############################################
* @type Arc layer
* @startAngle 90
* @sweepAngle Automated
* @partAngle 300,00
* @gapAngle 2,000
* @strokeStyle #1
*/
// Second half visibility
if (percent_now > percent_max) {
return percent_over >= 50 && percent_over <= 100 ? true : false;
} else {
return percent_now >= 50 && percent_now <= 100 ? true : false;
}
// Second half processing
if (percent_now > percent_max) {
return ( (percent_over / percent_max) * 360 ) - 180;
} else {
return ( (percent_now / percent_max) * 360 ) - 180;
}
/**
* ##############################################
* LAYER: First half +X
* ##############################################
* @type Arc layer
* @startAngle 270
* @sweepAngle Automated
* @partAngle 300,00
* @gapAngle 2,000
* @strokeStyle #1
*/
// First half +X visibility
if (percent_now > percent_max) {
return percent_over <= 50 ? true : false;
} else {
return false;
}
// First half +X processing
if (typeof percent_over != 'undefined') {
return ( percent_over / percent_max ) * 360;
} else {
return 0;
}
/**
* ##############################################
* LAYER: Shadow
* ##############################################
* @info This layer need the variable "is_shadow" from common code to be sete to true
*
* @type Arc layer
* @startAngle Automated
* @sweepAngle 0,100
* @partAngle 300,00
* @gapAngle 2,000
* @strokeStyle #1
*/
// Shadow visibility
return percent_now + 2 > percent_max ? true : false;
// Shadow processing (Start angle)
if (typeof percent_over != 'undefined') {
return ( (percent_over / percent_max) * 360 ) - 88;
} else {
return 0;
}
/**
* ##############################################
* LAYER: Full circle
* ##############################################
* @info This layer doesn't need any of the common code
*
* @type Arc layer
* @startAngle 270
* @sweepAngle 360
* @partAngle 300,00
* @gapAngle 2,000
* @strokeStyle #1
*/
// Full circle visibility
return [cvalue] > [cmax];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment