Browse Source

feat: three argument mapRange overload

Sv443 6 tháng trước cách đây
mục cha
commit
3fe8b25
3 tập tin đã thay đổi với 25 bổ sung9 xóa
  1. 5 0
      .changeset/cyan-keys-destroy.md
  2. 4 7
      README.md
  3. 16 2
      lib/math.ts

+ 5 - 0
.changeset/cyan-keys-destroy.md

@@ -0,0 +1,5 @@
+---
+"@sv443-network/userutils": minor
+---
+
+Added overload to mapRange() that only needs both `max` range values and assumes 0 for both `min` values

+ 4 - 7
README.md

@@ -930,16 +930,12 @@ clamp(99999, 0, Infinity);   // 99999
 ### mapRange()
 Usage:  
 ```ts
-mapRange(
-  value: number,
-  range1min: number,
-  range1max: number,
-  range2min: number,
-  range2max: number
-): number
+mapRange(value: number, range1min: number, range1max: number, range2min: number, range2max: number): number
+mapRange(value: number, range1max: number, range2max: number): number
 ```
   
 Maps a number from one range to the spot it would be in another range.  
+If only the `max` arguments are passed, the function will set the `min` for both ranges to 0.  
   
 <details><summary><b>Example - click to view</b></summary>
 
@@ -948,6 +944,7 @@ import { mapRange } from "@sv443-network/userutils";
 
 mapRange(5, 0, 10, 0, 100); // 50
 mapRange(5, 0, 10, 0, 50);  // 25
+mapRange(5, 10, 50);        // 25
 
 // to calculate a percentage from arbitrary values, use 0 and 100 as the second range
 // for example, if 4 files of a total of 13 were downloaded:

+ 16 - 2
lib/math.ts

@@ -4,10 +4,24 @@ export function clamp(value: number, min: number, max: number): number {
 }
 
 /**
- * Transforms the value parameter from the numerical range `range1min─range1max` to the numerical range `range2min─range2max`  
+ * Transforms the value parameter from the numerical range `range1min` to `range1max` to the numerical range `range2min` to `range2max`  
  * For example, you can map the value 2 in the range of 0-5 to the range of 0-10 and you'd get a 4 as a result.
  */
-export function mapRange(value: number, range1min: number, range1max: number, range2min: number, range2max: number): number {
+export function mapRange(value: number, range1min: number, range1max: number, range2min: number, range2max: number): number;
+/**
+ * Transforms the value parameter from the numerical range `0` to `range1max` to the numerical range `0` to `range2max`
+ * For example, you can map the value 2 in the range of 0-5 to the range of 0-10 and you'd get a 4 as a result.
+ */
+export function mapRange(value: number, range1max: number, range2max: number): number;
+export function mapRange(value: number, range1min: number, range1max: number, range2min?: number, range2max?: number): number {
+  // overload
+  if(typeof range2min === "undefined" || range2max === undefined) {
+    range2max = range1max;
+    range2min = 0;
+    range1max = range1min;
+    range1min = 0;
+  }
+
   if(Number(range1min) === 0.0 && Number(range2min) === 0.0)
     return value * (range2max / range1max);