Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Infinite multidimensional table?

I was wondering if it was possible with lua to create a table that can have any slot be created on the fly. I want to create a 2d universe that has tiles on it. I would start with a ship on 0,0 and would have a large asteroid made from tiles say a few hundred spaces to any direction.

What I would do now is just have a limited sized precreated tilemap scroll into position and do my things there. When I would fly away I would then just empty that table(tilemap) and then use this for another spot in space. Sort of like island tile maps.

If I would be able say do table[x][y] = turrettile and on other x and y spaces have it just be nil. I would not eat up lots of memory? The integer limit is 64 bit so I would be able to have a super huge universe.

How would I create/use a 2 dimensional table like that?

Comments

  • dave1707dave1707 Mod
    Posts: 9,808

    @Pakz Heres an example. This creates a 2D table containing 20 random entries. These are somewhere in the range of 1000 by 1000. You can just create any entry anywhere. Before using a y entry, you have to make sure there’s an x table entry, tab[x]={} before assigning a value to tab[x][y] .

    function setup()
        tab={}  -- create table
    
        -- create 20 random table positions
        for z=1,20 do
            -- random x,y table position
            x=math.random(1000)
            y=math.random(1000)
    
            -- table[x] doesnt exits yet, so create it
            if tab[x]==nil then
                tab[x]={}
            end
    
            -- fill table x,y with some value
            tab[x][y]=vec2(x,y)
        end 
    
        -- print used table positions
        for a,b in pairs(tab) do
            for c,d in pairs(b) do
                print(d)
            end
        end
    end
    
  • Posts: 18

    Nice! Thanks. Very informative :)

    I had been experimenting myself and got this working :

    map = {}
    
    -- make a 50 by 50 map section at -100 x and -100 y
    for x=-100,-50 do
        map[x]={}
        for y=-100,-50 do
            map[x][y]=2
    
        end
    end
    
    -- make a 50 by 50 map section at 100 x and -100 y
    for x=100,150 do
        map[x]={}
        for y=-100,-50 do
            map[x][y]=1
    
        end
    end
    
  • dave1707dave1707 Mod
    edited December 2021 Posts: 9,808

    @Pakz As far as I know, only entries that are used fill the table. In my example above, even though I’m using values up to 1000, only the 20 entries I created are in the table. So you can have a very large possible array, but only use a small number of entries in the table.

  • Posts: 18

    I had a hunch back when I started looking at godot and its lua like language. I play Minecraft a lot so having super large worlds I think are neat.

    I just created a infinite tile map scroller as a test which generates new tiles areas in runtime ahead in its scrolling direction. This seemed to work as it should.

  • dave1707dave1707 Mod
    Posts: 9,808

    @Pakz I did something like that a long time ago just to see if it could be done. I never did anything with it and probably deleted the code. I would create texture maps in the direction I was going and I might have deleted what was behind me. I don’t remember if I did or just left them.

  • Posts: 18

    I probably wil also drop the space game when I do not get hooked to it. I already have 2 versions made with 2 different languages. This time I wil start with adding a building feature where you can place blocks around the ship. Hoping that being able to build a base wil get me into it :)

    The mineable asteroid with tunnel system generator is done so that just needs copying and fitting.

    This was my first version if anyone is interested. Needs a keyboard. Does not always work on all mobile devices.

    https://cromdesi.home.xs4all.nl/emscripten/dudespacemining/Main.html

  • dave1707dave1707 Mod
    Posts: 9,808

    @Pakz It did nothing on my iPad.

  • Posts: 18
    It failed on the first time on my ipad just yet. The second time(reload) it did start. I have no keyboard at hand though.

    It uses a old emscripten version.
Sign In or Register to comment.