From 3486fe3dde4b2b3d0fd33ca2e3ae73aea63fc8ef Mon Sep 17 00:00:00 2001 From: Hero Date: Thu, 18 Sep 2025 21:23:48 +0300 Subject: [PATCH] refactor: cleaner and faster time formatter --- source/Postbuild.hx | 51 +++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/source/Postbuild.hx b/source/Postbuild.hx index 0f90a860a..a918dcb63 100644 --- a/source/Postbuild.hx +++ b/source/Postbuild.hx @@ -35,37 +35,28 @@ class Postbuild static function format(time:Float, decimals:Int = 1):String { - var units = [ - {name: "day", secs: 86400}, - {name: "hour", secs: 3600}, - {name: "minute", secs: 60}, - {name: "second", secs: 1} - ]; - - var parts:Array = []; - var remaining:Float = time; - - for (unit in units) - { - var value:Float; - if (unit.name == "second") + var units = [ + {name: "day", secs: 86400}, + {name: "hour", secs: 3600}, + {name: "minute", secs: 60}, + {name: "second", secs: 1} + ]; + + var parts:Array = []; + var remaining:Float = time; + var factor = Math.pow(10, decimals); // compute once because the old code was computing it twice. + + for (u in units) { - // handle seconds with decimals - value = Math.round(remaining * Math.pow(10, decimals)) / Math.pow(10, decimals); + var value:Float = (u.name == "second") ? Math.round(remaining * factor) / factor : Math.floor(remaining / u.secs); + + if (u.name != "second") + remaining %= u.secs; + + if (value > 0 || (u.name == "second" && parts.length == 0)) + parts.push('${value} ${u.name}${value == 1 ? "" : "s"}'); } - else - { - value = Math.floor(remaining / unit.secs); - remaining %= unit.secs; - } - - // - if (value > 0 || (unit.name == "second" && parts.length == 0)) - { - parts.push('${value} ${unit.name}${value == 1 ? "" : "s"}'); - } - } - - return parts.join(" "); + + return parts.join(" "); } }