https://github.com/deepnight/deepnightlibs
The general personal libs I use in my Haxe projects.
https://github.com/deepnight/deepnightlibs
Last synced: 4 months ago
JSON representation
The general personal libs I use in my Haxe projects.
- Host: GitHub
- URL: https://github.com/deepnight/deepnightlibs
- Owner: deepnight
- License: mit
- Created: 2019-09-16T14:19:31.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2026-01-23T15:10:44.000Z (4 months ago)
- Last Synced: 2026-01-24T06:31:29.965Z (4 months ago)
- Language: Haxe
- Homepage: https://deepnight.net
- Size: 4.32 MB
- Stars: 259
- Watchers: 13
- Forks: 58
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# About
The general purpose libs I use in all my Haxe projects. If you want to build one of [my project](https://github.com/deepnight/), you will need them.
[](https://github.com/deepnight/deepnightLibs/actions/workflows/runUnitTests.yml)
# Install
## Stable
Use this version if you plan to use the libs for your own projects.
```bash
haxelib install deepnightLibs
```
## Latest Git version (mostly stable)
This is the version I use and update very frequently.
Pick this version if you're building one of my GitHub projects, such as LDtk or one of my gamejam entry.
```bash
haxelib git deepnightLibs https://github.com/deepnight/deepnightLibs
```
# Usage
In your HXML file, add:
```hxml
-lib deepnightLibs
```
All the libs are in the `dn.*` package.
```haxe
class MyProject {
public function new() {
trace( dn.M.fmin(0.3,0.8) ); // 0.3
}
}
```
# Tips
Use global imports! To import libs in every HX files, just add a ``import.hx`` (this exact name & caps) file to the **root** of your ``src`` folder:
```
dn.*;
dn.Col as C;
```
- The first line imports all classes in ``dn`` package,
- The second one imports ``dn.Col`` as an alias "C",
- Feel free to add your own convenient imports there.
# Noteworthy classes
## dn.M
My re-implementation of the Math class, with high-performances in mind:
```haxe
M.fmin(0.5, 0.9); // 0.5
M.frandRange(0, 2); // random Float number between 0 -> 2
M.randRange(0, 2); // either 0, 1 or 2
M.pow(val, 2); // turns into val*val at compilation time
```
## dn.Col
The color management lib, with performance in mind.
A color is an abstract class that revolves around a single Integer value (the color in 0xaarrggbb format). Most methods are just operations on this internal Int value.
```haxe
import dn.Col;
var c : Col = 0xff0000; // red
var c : Col = Red; // also red, but using and enum constant
var c : Col = "#ff0000"; // still red, but the conversion from a constant String to Int is hard-inlined using macros. Costs 0 at runtime.
var darker = c.toBlack(0.5); // return a 50% darker red
var c2 = c.to(Yellow, 0.3); // return a mix from current color with 30% of the standard yellow
```
## dn.DecisionHelper
A nice tool to easily pick a value among many others using any custom criterion.
```haxe
var arr = [ "a", "foo", "bar", "food", "hello" ];
var dh = new dn.DecisionHelper(arr);
/* Iterates all values in arr and increase their internal score by 1 if they contain the letter "o". */
dh.score( v -> StringTools.contains(v,"o") ? 1 : 0 );
/* Increase score of each values using 10% of their length (ie. longer strings get slightly higher score) */
dh.score( v -> v.length*0.1 );
/* Discard any value containing the letter "h" */
dh.remove( v -> StringTools.contains(v,"h") );
/* Only keep values with length>1 */
dh.keepOnly( v -> v.length>1 );
trace( dh.getBest() ); // -> food
/* Internal scores: a (discarded), foo (1.3), bar (0.3), food (1.4), hello (discarded). */
```