mirror of
https://github.com/dyuri/garmin-repafield.git
synced 2025-12-16 19:24:01 +00:00
83 lines
2.3 KiB
MonkeyC
83 lines
2.3 KiB
MonkeyC
import Toybox.Application;
|
|
import Toybox.Graphics;
|
|
import Toybox.WatchUi;
|
|
import Toybox.Lang;
|
|
|
|
class Track extends WatchUi.Drawable {
|
|
|
|
hidden var _toDestination as Float;
|
|
hidden var _distance as Float;
|
|
hidden var _offCourse as Float;
|
|
|
|
function initialize() {
|
|
var dictionary = {
|
|
:identifier => "Track"
|
|
};
|
|
|
|
Drawable.initialize(dictionary);
|
|
|
|
_toDestination = 0.0f;
|
|
_distance = 0.0f;
|
|
_offCourse = 0.0f;
|
|
}
|
|
|
|
function setToDestination(tdst as Float) as Void {
|
|
_toDestination = tdst;
|
|
}
|
|
|
|
function setDistance(dst as Float) as Void {
|
|
_distance = dst;
|
|
}
|
|
|
|
function setOffCourse(off as Float) as Void {
|
|
_offCourse = off;
|
|
}
|
|
|
|
function draw(dc as Dc) as Void {
|
|
if (_toDestination == 0.0f) {
|
|
return;
|
|
}
|
|
|
|
var trackPercentage = _distance / (_distance + _toDestination);
|
|
if (trackPercentage > 1.0f) {
|
|
trackPercentage = 1.0f;
|
|
}
|
|
|
|
// draw
|
|
var w = dc.getWidth();
|
|
var h = dc.getHeight();
|
|
var astart = 150;
|
|
var aend = 390;
|
|
dc.setPenWidth(4);
|
|
dc.setColor(0x555555, Graphics.COLOR_TRANSPARENT);
|
|
dc.drawArc(w / 2, h / 2, w / 2 - 2, Graphics.ARC_COUNTER_CLOCKWISE, astart, aend);
|
|
|
|
if (trackPercentage <= 0.0f) {
|
|
return;
|
|
}
|
|
|
|
// color
|
|
if (_offCourse > 50.0f) {
|
|
dc.setColor(0xFF0000, Graphics.COLOR_TRANSPARENT);
|
|
} else if (trackPercentage < 0.2) {
|
|
dc.setColor(0x8800FF, Graphics.COLOR_TRANSPARENT);
|
|
} else if (trackPercentage < 0.4) {
|
|
dc.setColor(0x0000FF, Graphics.COLOR_TRANSPARENT);
|
|
} else if (trackPercentage < 0.6) {
|
|
dc.setColor(0x0055FF, Graphics.COLOR_TRANSPARENT);
|
|
} else if (trackPercentage < 0.8) {
|
|
dc.setColor(0x00AAFF, Graphics.COLOR_TRANSPARENT);
|
|
} else {
|
|
dc.setColor(0x00FFFF, Graphics.COLOR_TRANSPARENT);
|
|
}
|
|
|
|
var acurrent = astart + (aend - astart) * trackPercentage;
|
|
if (acurrent < astart + 1) {
|
|
acurrent = astart + 1;
|
|
} else if (acurrent > aend) {
|
|
acurrent = aend;
|
|
}
|
|
dc.drawArc(w / 2, h / 2, w / 2 - 2, Graphics.ARC_COUNTER_CLOCKWISE, astart, acurrent);
|
|
}
|
|
}
|