Commit Graph

400 Commits

Author SHA1 Message Date
rhy
2642c304ad uuid: Discard gsub's 2nd return value 2023-01-10 11:21:31 -03:00
rhy
57bc1a2edb uuid: Use mathx's _random instead of stringx's 2023-01-10 11:21:31 -03:00
rhy
e630418372 uuid: Add a passed rng to uuid4 2023-01-10 11:21:31 -03:00
rhy
5f2e7b437d uuid: Fix variable casing 2023-01-10 11:21:31 -03:00
rhy
0f390f9f85 Add uuid.lua from the other pull request 2023-01-10 11:21:31 -03:00
Max Cahill
ba7a7b5500 fixed intersection tests with zero radius shapes (treated as points generally) 2022-12-08 13:36:29 +11:00
Max Cahill
2c76b7dde0 fixed crash in spairs and then provided a more robust default_less function which sorts numbers before strings, but sorts those groups with operator< 2022-12-06 10:45:57 +11:00
Max Cahill
0d88061e3b moved unique_mapping to ferris 2022-12-05 18:10:21 +11:00
Max Cahill
844c9e8c8f ...needed to forward-declare for the previous fix 2022-11-08 09:23:45 +11:00
Max Cahill
c6e6ec858c fixed accidentally global callback in subscribe_once 2022-11-08 09:20:37 +11:00
Max Cahill
94d9901728 better error reporting for pubsub defer-related errors 2022-11-07 17:13:25 +11:00
Max Cahill
66e9848bef added pubsub:subscribe_once and fixed a bug if you subscribe or unsubscribe from inside a callback 2022-11-03 16:19:18 +11:00
Max Cahill
9a8493b880 added stringx.split_and_trim to save me inlining something with the same effect all over the place 2022-10-24 16:08:39 +11:00
Max Cahill
84d4e39622 clarified position/halfsize for aabbs and provided conversion functions from xywh to pos/hs representation
closes #60
2022-10-24 15:18:28 +11:00
Max Cahill
49df9d9743 added tablex.next_element 2022-10-18 12:25:37 +11:00
Max Cahill
7285531870 fixed dedent() with trimmed blank lines (some editors do this automatically) 2022-09-20 15:00:44 +10:00
Max Cahill
662101ddae Merge branch 'feature/nobit-colour' 2022-09-13 11:15:18 +10:00
Max Cahill
4f86dc0a5e keep both bitop and float-only pack/unpack functions in colour 2022-09-13 11:15:08 +10:00
Max Cahill
44c6ae1b0a added tablex.compact to compact sequential tables of a known range containing nils 2022-07-19 15:58:15 +10:00
Max Cahill
24fde1c157 made stringx.deindent remove all trailing empties rather than just one 2022-07-11 16:44:51 +10:00
Max Cahill
9f5dfcb923 removed needless branch in tablex.shallow_copy 2022-06-23 16:36:54 +10:00
Max Cahill
81512550bb fixed possible stack overflow in deep_copy 2022-06-09 16:36:02 +10:00
Max Cahill
a5c26038df fixed reset timer still counting as expired 2022-06-07 16:43:20 +10:00
Max Cahill
bff54f0dbd disambiguated variable names in map_call 2022-06-07 16:30:01 +10:00
Max Cahill
b68081be53 added map_call for mapping a sequence with a method call (useful for object-y collections) 2022-06-07 16:16:01 +10:00
Max Cahill
7366473f32 added functional.map_field for quick extraction of some field of a sequence of objects 2022-06-07 15:38:16 +10:00
Max Cahill
dbce7e6083 managed expired state inside the timer rather than just checking if the time has expired; makes sure the callback fires even for zero length timers 2022-06-07 14:09:35 +10:00
Josh Perry
a089b160a2 uuid: added a uuid module
Only contains a function for (the most useful) uuid4 at present.
2022-05-26 14:05:04 +01:00
Max Cahill
795f2587d2 fixed pretty.lua using tablex instead of table alias 2022-05-23 14:54:05 +10:00
Max Cahill
1e75fad409 changed pretty printing to use sorted keys 2022-05-23 14:51:18 +10:00
Max Cahill
433e4ebb08 removed whitespace to make the linter happy; todo discover how to turn this particular inanity (whitespace only lines) off :) 2022-05-23 14:51:02 +10:00
Max Cahill
8a57ae458f added changes to accept spairs; merged #58 2022-05-23 14:48:52 +10:00
jalhund
199b8ded1d tablex: Add spairs (alternative of pairs that returns sorted table) 2022-05-18 05:17:55 +00:00
Miku AuahDark
fabbd3f702
colour: Don't depend on bit library. 2022-05-09 10:16:43 +08:00
Max Cahill
be48dd9115 clarified blue vs chroma b in oklab functions 2022-04-22 10:08:55 +10:00
Max Cahill
6e65f82474 clarified rng variable name, but also removed warning for _ prefixed variables as they are used to signal internal/private variables rather than unused variables. 2022-04-22 10:05:44 +10:00
Max Cahill
cb3083bc79 added oklab support to colour.lua (needs testing) 2022-04-05 14:51:49 +10:00
Max Cahill
05f86e2cc1 fixed wrong degenerate direction checked in intersect.line_line_collide 2022-03-29 17:56:02 +11:00
Max Cahill
813ee20052 moving tests to .test to get them out of root folder for now 2022-03-07 12:10:20 +11:00
Max Cahill
6969a044a3 updated tests to reflect that tablex shallow and deep copy don't copy non-table values 2022-03-07 12:04:19 +11:00
Max Cahill
213ba5df0f added tablex.copy is an alias for tablex.shallow_copy, same for overlay, bunch of whitespace changes, some additional asserts 2022-03-07 12:00:05 +11:00
Max Cahill
de5c803389 fixed set not specifying deep or shallow copy 2022-03-07 11:59:23 +11:00
Max Cahill
b6ca4c7740
Merge pull request #53 from idbrii/fix-async-lovejs
async: Skip wrapping with xpcall under lovejs
2022-03-07 10:50:36 +11:00
Max Cahill
840f4ba703
Merge pull request #54 from idbrii/capture-w-func
async: Use function to capture ...
2022-03-07 10:49:01 +11:00
Max Cahill
461c3a8131
Merge pull request #52 from idbrii/table-deep-test
tablex: Add deep & shallow for copy, overlay; remove redundant recursion; add tests
2022-03-07 10:27:35 +11:00
Max Cahill
4b0e0c7ec7
Merge pull request #51 from idbrii/lint
Add luacheck and fix bugs it found
2022-03-07 10:14:08 +11:00
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
David Briscoe
d48d4b0e81 table: Rewrite *_copy to copy any kind of type
Allowing shallow_copy/deep_copy to accept any type makes it easier to
write generic code where you just want to copy some input without
knowing anything about it. Like an event system, save system, etc.

Add corresponding test.

Tests pass
2022-03-03 22:03:12 -08:00
David Briscoe
0c193d7901 lint: Don't assign values that will never be used
No bugs here, but giving an initial value can hide cases where we fail
to set a value. Use an assert instead so we can see errors if we change
and break this code.

Except break_next which goes out of scope after it's assigned (I guess
it used to be outside the loop).
2022-03-03 10:17:35 -08:00