lume/README.md

229 lines
7.0 KiB
Markdown
Raw Normal View History

2014-02-27 20:19:10 +00:00
# lume
A collection of functions for Lua, geared towards game development.
2014-02-27 20:19:10 +00:00
## Installation
The [lume.lua](lume.lua?raw=1) file should be dropped into an existing project and
2014-02-27 20:19:10 +00:00
required by it:
```lua
lume = require "lume"
```
## Function reference
### lume.clamp(x, min, max)
Returns the value `x` clamped between the values `min` and `max`
### lume.round(x)
Rounds `x` to the nearest integer. Rounds away from zero if we're midway
between two integers.
2014-02-27 20:19:10 +00:00
### lume.sign(x)
Returns `1` if `x` is 0 or above, returns `-1` when `x` is negative.
### lume.lerp(a, b, amount)
Returns the linearly interpolated value between `a` and `b`, `amount` should be
range of 0 - 1; if `amount` is outside of this range it is clamped.
2014-02-27 20:19:10 +00:00
### lume.smooth(a, b, amount)
Similar to `lume.lerp()` but uses cosine interpolation instead of linear
interpolation.
2014-02-27 20:19:10 +00:00
### lume.pingpong(x)
Ping-pongs the value `x` between 0 and 1.
2014-02-27 20:19:10 +00:00
### lume.distance(x1, y1, x2, y2)
Returns the distance between the two points.
### lume.angle(x1, y2, x2, y2)
Returns the angle between the two points.
### lume.random([a [, b]])
Returns a random number between `a` and `b`. If only `a` is supplied a number
2014-02-27 20:19:10 +00:00
between `0` and `a` is returned. If no arguments are supplied a random number
between `0` and `1` is returned.
### lume.randomchoice(t)
Returns a random value from array `t`.
2014-02-27 20:19:10 +00:00
### lume.shuffle(t)
Shuffles the values of array `t` in place, returns the array.
2014-02-27 20:19:10 +00:00
### lume.array(...)
Iterates the supplied iterator and returns an array filled with the values.
2014-02-27 20:19:10 +00:00
```lua
lume.array(pairs({a = 1, b = 2})) -- Returns {"a", "b"}
2014-02-27 20:19:10 +00:00
```
### lume.map(t, fn)
Applies the function `fn` to each value in table `t` and returns a new table
with the resulting values.
2014-02-27 20:19:10 +00:00
```lua
lume.map({1, 2, 3}, function(x) return x * 2 end) -- Returns {2, 4, 6}
```
### lume.all(t [, fn])
Returns true if all the values in `t` table are true. If a `fn` function is
supplied it is called on each value, true is returned if all of the calls to
`fn` return true.
2014-02-27 20:19:10 +00:00
```lua
lume.all({1, 2, 1}, function(x) return x == 1 end) -- Returns false
```
### lume.any(t [, fn])
Returns true if any of the values in `t` table are true. If a `fn` function is
supplied it is called on each value, true is returned if any of the calls to
`fn` return true.
2014-02-27 20:19:10 +00:00
```lua
lume.any({1, 2, 1}, function(x) return x == 1 end) -- Returns true
2014-02-27 20:19:10 +00:00
```
### lume.reduce(t, fn, first)
2014-02-27 20:19:10 +00:00
Applies `fn` on two arguments cumulative to the items of the array `t`, from
left to right, so as to reduce the array to a single value. The accumulator is
intialised to the `first` value.
2014-02-27 20:19:10 +00:00
```lua
lume.reduce({1, 2, 3}, function(a, b) return a + b end, 0) -- Returns 6
2014-02-27 20:19:10 +00:00
```
### lume.set(t [, retainkeys])
2014-02-27 22:17:36 +00:00
Returns a copy of the `t` table with all the duplicate values removed. If
`retainkeys` is true the table is not treated as an array and retains its
original keys.
2014-02-27 22:17:36 +00:00
```lua
lume.set({2, 1, 2, "cat", "cat"}) -- Returns {1, 2, cat}
```
### lume.filter(t, fn [, retainkeys])
Calls `fn` on each value of `t` table. Returns a new table with only the values
where `fn` returned true. If `retainkeys` is true the table is not treated as
an array and retains its original keys.
2014-02-27 20:19:10 +00:00
```lua
lume.filter({1, 2, 3, 4}, function(x) return x % 2 == 0 end) -- Returns {2, 4}
2014-02-27 20:19:10 +00:00
```
### lume.merge(t, t2 [, retainkeys])
Merges all the values from the table `t2` into `t` in place. If `retainkeys` is
true the table is not treated as an array and retains its original keys; if `t`
and `t2` have a conflicting key, the value from `t2` is used.
2014-02-27 20:19:10 +00:00
```lua
lume.merge({2, 3}, {4, 5}) -- Returns {2, 3, 4, 5}
2014-02-27 20:19:10 +00:00
```
### lume.find(t, value)
Returns the index/key of `value` in `t`. Returns `nil` if that value does not
exist in the table.
```lua
lume.find({"a", "b", "c"}, "b") -- Returns 2
```
2014-02-27 20:22:49 +00:00
### lume.once(fn, ...)
2014-02-27 20:19:10 +00:00
Returns a wrapper function to `fn` which takes the supplied arguments. The
wrapper function will call `fn` on the first call and do nothing on any
subsequent calls.
```lua
local f = lume.once(print, "Hello")
f() -- Prints "Hello"
f() -- Does nothing
```
### lume.slice(t [, i [, j]])
Mimics the behaviour of Lua's `string.sub`, but operates on an array rather
than a string. Creates and returns a new array of the given slice.
```lua
lume.slice({"a", "b", "c", "d", "e"}, 2, 4) -- Returns {"b", "c", "d"}
```
### lume.clone(t)
Returns a shallow copy of the table `t`.
### lume.fn(fn, ...)
Creates a wrapper function around function `fn`, automatically inserting the
arguments into `fn` which will persist every time the wrapper is called.
```lua
local f = lume.fn(print, "Hello")
f() -- Prints "Hello"
```
### lume.time(fn, ...)
Inserts the arguments into function `fn` and calls it. Returns the time in
seconds the function `fn` took to execute followed by `fn`'s returned values.
```lua
lume.time(function(x) return x end, "hello") -- Returns 0, "hello"
```
2014-02-27 20:19:10 +00:00
### lume.serialize(x)
Serializes the argument `x` into a string which can be loaded again using
`lume.deserialize()`. Only booleans, numbers, tables and strings can be
serialized. Circular references are not handled; all nested tables are
serialized as unique tables.
2014-02-27 20:19:10 +00:00
```lua
lume.serialize({a = "test", b = {1, 2, 3}, false})
-- Returns "{[1]=false,["a"]="test",["b"]={[1]=1,[2]=2,[3]=3,},}"
```
### lume.deserialize(str)
Deserializes a string created by `lume.serialize()` and returns the resulting
value. This function should not be run on an untrusted string.
```lua
lume.deserialize("{1, 2, 3}") -- Returns {1, 2, 3}
```
### lume.split(str [, sep])
Splits the string `str` into words and returns a table of the sub strings. If
`sep` is provided the string will be split at any of the characters in `sep`
instead of on whitespace.
2014-02-27 20:19:10 +00:00
```lua
2014-02-27 22:51:22 +00:00
lume.split("One two three") -- Returns {"One", "two", "three"}
2014-02-27 20:19:10 +00:00
```
### lume.trim(str [, chars])
Trims the whitespace from the start and end of the string `str` and returns the
new string. If a `chars` value is set the characters in `chars` are trimmed
instead of whitespace.
2014-02-27 20:19:10 +00:00
```lua
lume.trim(" Hello ") -- Returns "Hello"
```
### lume.format(str, vars)
Returns a formatted string. The values of keys in the table `vars` can be
inserted into the string by using the form `"{key}"` in `str`.
2014-02-27 20:19:10 +00:00
```lua
lume.format("Hello {a}, I hope {a} is {b}.", {a = "world", b = "well"})
-- Returns "Hello world, I hope world is well."
```
### lume.dostring(str)
Executes the lua code inside `str`.
```lua
lume.dostring("print('Hello!')") -- Prints "Hello!"
```
### lume.hotswap(modname)
Reloads an already loaded module in place; `modname` should be the same string
used when loading the module with require(). This function can be used to
immediatly see the effects of code changes without having to restart the
program.
```lua
lume.hotswap("lume") -- Reloads the lume module
```
2014-02-27 20:19:10 +00:00
### lume.rgba(color)
Takes the 32bit integer `color` argument and returns 4 numbers, one for each
channel, with a range of 0 - 255. The returned values can be used as the
arguments to [LÖVE](http://love2d.org)'s setColor() function.
2014-02-27 20:19:10 +00:00
```lua
lume.rgba(0xFF304050) -- Returns 48, 64, 80, 255
```
## License
This library is free software; you can redistribute it and/or modify it under
the terms of the MIT license. See [LICENSE](LICENSE) for details.