import Toybox.Graphics; import Toybox.Lang; import Toybox.System; import Toybox.WatchUi; class IHands extends Drawable { var BackgroundColor as ColorType; var CenterShift as [Float, Float]; var Color as ColorType; var Radius as Float; var Type as HandType; typedef HandsParams as { :Identifier as Object, :Color as ColorType, :Type as HandType, :Field as FieldParams, }; enum HandType { OTHER_HAND = 0, HOURS_HAND = 1, MINUTES_HAND = 2, SECONDS_HAND = 3, } enum HandStyleType { EMPTY_HANDS = 0, SIMPLE_HANDS = 1, } static function getHands(style as HandStyleType, options as HandsParams) as IHands? { switch (style) { case SIMPLE_HANDS: return new SimpleHands(options); case EMPTY_HANDS: default: return null; } } function initialize(options as HandsParams) { Drawable.initialize({:identifier => options[:Identifier]}); // scene var field = getOrElse(options[:Field], {}) as FieldParams; CenterShift = getOrElse(field[:CenterShift], [0.0, 0.0]); Radius = 0.95 * getOrElse(field[:Radius], 1.0); // properties BackgroundColor = options[:BackgroundColor]; Color = options[:Color]; Type = options[:Type]; } function draw(dc as Dc) as Void { var center = getCenter(dc, CenterShift); var length = Radius * min(center[0], center[1]); drawHand(dc, center[0], center[1], length); } function drawHand(dc as Dc, x as Float, y as Float, length as Float) as Void {} function getAngle(angle as Float?) as Float? { var now = System.getClockTime(); switch (Type) { case HOURS_HAND: return (now.hour % 12 + now.min / 60.0) * 30.0; case MINUTES_HAND: return now.min * 6.0; case SECONDS_HAND: return now.sec * 6.0; case OTHER_HAND: default: return angle; } } }