garmin-repafield/source/RepaFieldTrack.mc

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);
}
}