Commit Graph

291 Commits

Author SHA1 Message Date
David Briscoe
a030a20985 async: Assert that args is a table; add type_or_nil
If args is valid, assert it's a table.

Provides a clear and immediate error message when you convert
add_timeout() to call().

Also add type_or_nil. Very useful for optional parameters like this one.
Seems clearer than checking the arg first:
    if args then assert:type() end
2022-03-06 00:25:24 -08:00
David Briscoe
98f3630c07 async: Skip wrapping with xpcall under lovejs
See Davidobot/love.js#54.

lovejs crashes love with "attempt to yield across metamethod/C-call
boundary" when you try to yield in a coroutine, so we skip wrapping.

We lose the coroutine-local callstack, but at least it works.

Here's my repro:

    local color = {
        purple = {0.25, 0.09, 0.28, 1},
        white = {0.89, 0.91, 0.90, 1},
    }
    local ball = {
        x = 100,
        y = 100,
        r = 20,
    }
    local S = {}
    local input = {
        vanilla = 'v',
        async = 'c',
        quit = 'escape',
    }

    function love.load()
        S.coro = async()
    end

    local function coro_fn()
        S.async_running = true
        for i=1,100 do
            color.purple[4] = i / 100
            coroutine.yield()
        end
        color.purple[4] = 1
        S.async_running = false
        return true
    end

    function love.update(dt)
        S.coro:update(dt)

        if S.vanilla then
            local success, result = coroutine.resume(S.vanilla)
            if result then
                print("coroutine cleared")
                S.vanilla = nil
            end
        end

        if not S.async_running then
            if love.keyboard.isDown(input.vanilla) then
                S.vanilla = coroutine.create(coro_fn)
                print("raw coroutine started")

            elseif love.keyboard.isDown(input.async) then
                print("Starting async call coroutine from update")
                S.coro:call(coro_fn)

            elseif love.keyboard.isDown(input.quit) then
                love.event.quit()
            end
        end
    end

    function love.draw()
        love.graphics.setColor(color.purple)
        love.graphics.circle("fill", ball.x, ball.y, ball.r)

        love.graphics.setColor(color.white)
        local str = "To start a coroutine:"
        for key,val in pairs(input) do
            str = ("%s\n%s: %s"):format(str, key, val)
        end
        love.graphics.printf(str, 5,5, 200, "left")
    end
2022-03-05 23:44:08 -08:00
Max Cahill
f6a18380d4
Merge pull request #50 from Sheepolution/patch-3
Return table in foreach for chaining
2022-03-01 13:02:27 +11:00
Sheepolution
f36946ace4
Add comment to foreach regarding new behaviour 2022-03-01 03:01:39 +01:00
Sheepolution
3c6aaf1a76
Return table in foreach for chaining 2022-03-01 02:03:33 +01:00
Max Cahill
0fdddab5b9
Merge pull request #49 from Sheepolution/patch-2
Don't have inplace methods return a new sequence
2022-02-24 11:05:22 +11:00
Sheepolution
6df4b4bddd
Don't have inplace methods return a new sequence 2022-02-22 05:01:27 +01:00
Max Cahill
8fd402b125 Merge #48 - functional.splat 2022-01-25 10:23:07 +11:00
Max Cahill
aec62d92ec moved functional.splat below functional.map_inplace, reformatted a little 2022-01-25 10:22:28 +11:00
Jeremy S. Postelnek
fd998c8525
Update functional.lua 2022-01-24 16:40:46 -05:00
Jeremy S. Postelnek
a9b699afdd
Update functional.lua 2022-01-24 16:27:49 -05:00
Jeremy S. Postelnek
120c9658fc
Update functional.lua 2022-01-23 13:20:02 -05:00
Max Cahill
c0847e1955 fixed intersect.bounce_off bouncing if the velocity was already going away from the normal 2022-01-20 17:37:40 +11:00
Max Cahill
658c8e7117 fixed mathx.ease_inout 2022-01-18 13:15:54 +11:00
Max Cahill
0be82a31df fixed sequence missing a few functional methods 2022-01-17 17:05:59 +11:00
Max Cahill
18347e0b72
Merge pull request #47 from TurtleP/TurtleP/stringx_max_split
[Enhancement]: add optional `max_split` to `stringx.split`
2021-12-31 08:44:35 +11:00
TurtleP
2ef834d538 max_split -> limit, allow zero limit 2021-12-26 11:32:43 -05:00
Jeremy S. Postelnek
e5d00ef3a7
clarify the non-zero *and* positive error 2021-12-24 13:23:37 -05:00
Jeremy S. Postelnek
b01ba8e506
fix spacing 2021-12-24 13:19:38 -05:00
Jeremy S. Postelnek
23bc392b6e
check for negative max_split value 2021-12-24 13:19:12 -05:00
Jeremy S. Postelnek
660ae8ca52
add max_split to stringx.split 2021-12-24 13:03:36 -05:00
Max Cahill
2d5555400d fixed pretty print depth issues 2021-11-26 16:50:44 +11:00
Max Cahill
e731a167d8 added tablex.shallow_equal and tablex.deep_equal, slow functions for content-based (in)equality of different tables 2021-11-23 11:40:31 +11:00
Max Cahill
72cb14b8ec Merge branch feature/tablex.pick_weighted_random
minor changes to error handling and docs
2021-11-23 10:58:56 +11:00
Max Cahill
f3e299e3c9 fixed pubsub using set but not requiring it (breaks without :export())
fixes #44
2021-11-23 10:45:09 +11:00
Max Cahill
f5eda744b9 clarified declaration of h in colour.rgb_to_hsl
fixes #43
2021-11-23 10:41:09 +11:00
Max Cahill
5df717fe6d used mathx for clamp01 in intersect
fixes #45
2021-11-23 10:25:09 +11:00
Jesse Viikari
a42f1190e0 Modified weighted random pick function
- Now accepts a table from which it will pick the random value from,
  instead of an index
- Changed function name to better reflect the way it now works
2021-11-19 10:03:40 +02:00
Max Cahill
7767802433 chased down more math vs mathx usage (and actually fixed the random_lerp usage) 2021-11-19 15:35:52 +11:00
Max Cahill
4460a94933 mathx.random_lerp calls mathx.lerp instead of math.lerp so it works without exported globals
fixes #41
2021-11-19 15:28:54 +11:00
Max Cahill
6ce0dfa523 fixed wrong inequality :) 2021-11-18 15:18:58 +11:00
Max Cahill
774965a508 added async.wait for waiting for a certain period of time inside an async task 2021-11-18 15:15:48 +11:00
Max Cahill
31bfe92d37 added todo for tablex.weighted_random, removed returning the weight value as multi-return wasn't documented and could break in some circumstances 2021-11-18 10:35:26 +11:00
Max Cahill
7aa476a58c
Merge pull request #40 from speakk/weighted_random
Add a weighted random pick for tablex
2021-11-18 10:25:48 +11:00
Jesse Viikari
7eb6bcc576 Add a weighted random pick for tablex 2021-11-17 20:20:04 +02:00
Max Cahill
63a1cf5438 Merge PR #39: add ripairs
minor: touched up whitespace/naming/comments
2021-11-11 13:47:24 +11:00
Max Cahill
8aa6107056 made tablex relative require consistent with other modules 2021-11-11 13:42:03 +11:00
Westerbly Snaydley
cf8e0ac81a add ripairs (reverse ipairs) 2021-11-09 23:45:01 -05:00
Max Cahill
65d8f24a45
Merge pull request #38 from radgeRayden/master
Fix intersect depending on exported mathx
2021-10-26 10:06:40 +11:00
Westerbly Snaydley
271d079bbb Fix intersect depending on exported mathx 2021-10-24 18:32:14 -05:00
Max Cahill
0629e349a4 Merge remote-tracking branch 'origin/master' 2021-10-22 12:40:29 +11:00
Max Cahill
bbc34ddb5b added measure.lua benchmarking helpers - todo ones that aid inline profiling, probably just wrapping some code and measuring time/memory deltas each run 2021-10-22 12:40:23 +11:00
Max Cahill
50053b6674
Merge pull request #37 from Sheepolution/patch-1
Fix parameter/argument name mismatch
2021-10-21 13:13:44 +11:00
Max Cahill
1d430bd6a9 added todo note about auto-pooling 2021-10-19 15:41:40 +11:00
Sheepolution
95269b3362
Fix parameter/argument name mismatch 2021-10-19 03:04:55 +02:00
Max Cahill
c10338fa5d Added (more helpful) error on first use rather than on require when missing bitops library for colour.pack/unpack methods
fixes https://github.com/1bardesign/batteries/issues/35
2021-10-19 11:48:16 +11:00
Max Cahill
5b49cbdc17 Added installation note about package.loaded and LUA_PATH for init.lua
fixes https://github.com/1bardesign/batteries/issues/36
2021-10-19 11:35:18 +11:00
Max Cahill
0eda6e8262 added functional.chain for conveniently mapping things like node paths and vector splines 2021-10-15 12:49:31 +11:00
Max Cahill
eae1849c16 fixed filter_inplace doesn't return anything, thanks sheepolution 2021-10-12 11:51:17 +11:00
Max Cahill
0ebe5b1e9f added async.stall to canonicalise the stalling mechanism for async users 2021-10-08 16:17:18 +11:00