From 3c1ddbc29126b189a4f1760212db8db17f7049cb Mon Sep 17 00:00:00 2001 From: Martin Eyben Date: Tue, 19 Nov 2024 10:36:27 +0100 Subject: [PATCH] feat: add wind direction ascii --- src/main/java/eirb/pg203/WeatherData.java | 62 ++++++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/src/main/java/eirb/pg203/WeatherData.java b/src/main/java/eirb/pg203/WeatherData.java index c8b972c..01f02f9 100644 --- a/src/main/java/eirb/pg203/WeatherData.java +++ b/src/main/java/eirb/pg203/WeatherData.java @@ -20,20 +20,63 @@ class WeatherData { } } + enum WindDirection { + N("🡩"), + NE("🡭"), + E("🡪"), + SE("🡮"), + S("🡫"), + SW("🡯"), + W("🡨"), + NW("🡬"), + ERROR("E"); + + private String desc; + WindDirection(String desc) {this.desc = desc;} + + @Override + public String toString(){ return this.desc;}; + } + + private City city; private Instant date; private float temp; private Condition condition; // cloudly, sunny ... private float windSpeed; - private float windDirection; + private float windDirectionAngle; + private WindDirection windDirection; - WeatherData(City city, Instant date, float temp, float windSpeed, float windDirection, Condition condition) { + + private WindDirection getWindDirection(float windDirectionAngle) { + if (windDirectionAngle >= 337.5 || windDirectionAngle <= 22.5) + return WindDirection.N; + if (windDirectionAngle > 22.5 && windDirectionAngle <= 67.5) + return WindDirection.NE; + if (windDirectionAngle > 67.5 && windDirectionAngle <= 112.5) + return WindDirection.E; + if (windDirectionAngle > 112.5 && windDirectionAngle <= 157.5) + return WindDirection.SE; + if (windDirectionAngle > 157.5 && windDirectionAngle <= 202.5) + return WindDirection.S; + if (windDirectionAngle > 202.5 && windDirectionAngle <= 247.5) + return WindDirection.SW; + if (windDirectionAngle > 247.5 && windDirectionAngle <= 292.5) + return WindDirection.W; + if (windDirectionAngle > 292.5 && windDirectionAngle <= 337.5) + return WindDirection.NW; + + return WindDirection.ERROR; + + } + WeatherData(City city, Instant date, float temp, float windSpeed, float windDirectionAngle, Condition condition) { this.city = city; this.date = date; this.temp = temp; this.condition = condition; this.windSpeed = windSpeed; - this.windDirection = windDirection; + this.windDirectionAngle = windDirectionAngle; + this.windDirection = this.getWindDirection(windDirectionAngle); } public City getCity() { @@ -56,7 +99,9 @@ class WeatherData { return windSpeed; } - public float getWindDirection() { + public float getWindDirectionAngle() {return this.windDirectionAngle;} + + public WindDirection getWindDirection() { return windDirection; } @@ -80,17 +125,18 @@ class WeatherData { this.windSpeed = windSpeed; } - public void setWindDirection(float windDirection) { - this.windDirection = windDirection; + public void setWindDirectionAngle(float windDirectionAngle) { + this.windDirectionAngle = windDirectionAngle; } @Override public String toString() { - return String.format("%05.2f° %s %05.2fkm/h %06.2f°", + return String.format("%05.2f° %s %05.2fkm/h %06.2f° %s", this.getTemp(), this.getCondition().toString(), this.getWindSpeed(), - this.getWindDirection() + this.getWindDirectionAngle(), + this.getWindDirection().toString() ); } }