imperial unit support

This commit is contained in:
Gyuri Horák 2023-09-30 20:09:52 +02:00
parent 1a16f7d64f
commit 6f73f37eaa
Signed by: dyuri
GPG Key ID: 4993F07B3EAE8D38
3 changed files with 49 additions and 4 deletions

2
.gitignore vendored
View File

@ -4,3 +4,5 @@
/internal-mir
RepaField.prg
RepaField.prg.debug.xml
RepaField-settings.json

View File

@ -1,6 +1,8 @@
- settings
- pace/speed based on sport
- imperial unit support
- pace/speed switch
- cadence => vertical speed (might be a setting?)
- also might save vertical speed to fit
- track color => color coded by elevation gain/loss (or even vertical speed ?)
- https://github.com/loukad/vertlover

View File

@ -17,6 +17,10 @@ class RepaFieldView extends WatchUi.DataField {
hidden var hrZoneColors as Array<Numeric>;
hidden var cadenceZones as Array<Numeric>;
hidden var cadenceZoneColors as Array<Numeric>;
hidden var isDistanceMetric as Boolean;
hidden var isElevationMetric as Boolean;
hidden var mileToKm as Float = 1.609344f;
hidden var meterToFeet as Float = 3.28084f;
// fields
hidden var fBgOverlay;
@ -48,6 +52,8 @@ class RepaFieldView extends WatchUi.DataField {
hidden var offCourse as Float;
hidden var speed as Float;
hidden var aspeed as Float;
hidden var pace as Float;
hidden var apace as Float;
hidden var altitude as Float;
hidden var egain as Number;
hidden var edrop as Number;
@ -76,10 +82,16 @@ class RepaFieldView extends WatchUi.DataField {
offCourse = 0.0f;
speed = 0.0f;
aspeed = 0.0f;
pace = 0.0f;
apace = 0.0f;
altitude = 0.0f;
egain = 0;
edrop = 0;
cadence = 0;
var settings = System.getDeviceSettings();
isDistanceMetric = settings.distanceUnits == System.UNIT_METRIC;
isElevationMetric = settings.elevationUnits == System.UNIT_METRIC;
}
function tickHr(v as Number) {
@ -162,6 +174,12 @@ class RepaFieldView extends WatchUi.DataField {
fElevationGain.setColor(themeColor2);
fElevationLoss.setColor(themeColor2);
fTime.setColor(themeColor3);
// units
if (!isDistanceMetric) {
var fdl = View.findDrawableById("distanceLabel") as Text;
fdl.setText("mi");
}
}
function compute(info as Activity.Info) as Void {
@ -208,13 +226,25 @@ class RepaFieldView extends WatchUi.DataField {
}
if (info.currentSpeed != null) {
speed = info.currentSpeed as Float;
if (speed == 0) {
pace = 0.0f;
} else {
pace = 1000 / 60 / speed;
}
} else {
speed = 0.0f;
pace = 0.0f;
}
if (info.averageSpeed != null) {
aspeed = info.averageSpeed as Float;
if (aspeed == 0) {
apace = 0.0f;
} else {
apace = 1000 / 60 / aspeed;
}
} else {
aspeed = 0.0f;
apace = 0.0f;
}
if (info.altitude != null) {
altitude = info.altitude as Float;
@ -236,6 +266,19 @@ class RepaFieldView extends WatchUi.DataField {
} else {
cadence = 0;
}
// convert units to imperial if needed
if (!isDistanceMetric) {
distance = distance / mileToKm;
toDestination = toDestination / mileToKm;
pace = pace * mileToKm;
apace = apace * mileToKm;
}
if (!isElevationMetric) {
altitude = altitude * meterToFeet;
egain = (egain * meterToFeet).toNumber();
edrop = (edrop * meterToFeet).toNumber();
}
}
// Display the value you computed here. This will be called
@ -303,7 +346,6 @@ class RepaFieldView extends WatchUi.DataField {
// pace
if (fPace != null) {
if (speed != 0) {
var pace = 1000 / 60 / speed; // mps -> min/km
var pmin = pace.toNumber();
var psec = (pace - pmin) * 60;
fPace.setText(pmin.format("%2d") + ":" + psec.format("%02d"));
@ -313,7 +355,6 @@ class RepaFieldView extends WatchUi.DataField {
}
if (fAPace != null) {
if (aspeed != 0) {
var apace = 1000 / 60 / aspeed; // mps -> min/km
var apmin = apace.toNumber();
var apsec = (apace - apmin) * 60;
fAPace.setText(apmin.format("%2d") + ":" + apsec.format("%02d"));