mirror of
https://github.com/Dadido3/noita-mapcap.git
synced 2024-12-22 02:17:33 +00:00
Move hilbert curve lib into library directory
This commit is contained in:
parent
8841a57185
commit
2acc4e7e93
@ -6,6 +6,9 @@
|
||||
---@type NoitaEntityAPI
|
||||
local EntityAPI = dofile_once("mods/noita-mapcap/files/libraries/noita-api/entity.lua")
|
||||
|
||||
---@type HilbertLib
|
||||
local Hilbert = dofile_once("mods/noita-mapcap/files/libraries/hilbert-curve.lua")
|
||||
|
||||
---@type JSONLib
|
||||
local json = dofile_once("mods/noita-mapcap/files/libraries/json.lua")
|
||||
|
||||
@ -354,7 +357,7 @@ function startCapturingHilbert(area)
|
||||
async(
|
||||
function()
|
||||
while t < tLimit do
|
||||
local hx, hy = mapHilbert(t, gridPOTSize)
|
||||
local hx, hy = Hilbert.Map(t, gridPOTSize)
|
||||
if hx < gridWidth and hy < gridHeight then
|
||||
local x, y = (hx + gridLeft) * CAPTURE_GRID_SIZE, (hy + gridTop) * CAPTURE_GRID_SIZE
|
||||
x, y = x + 256, y + 256 -- Align screen with ingame chunk grid that is 512x512.
|
||||
|
@ -1,8 +1,19 @@
|
||||
-- Copyright (c) 2019-2020 David Vogel
|
||||
-- Copyright (c) 2019-2022 David Vogel
|
||||
--
|
||||
-- This software is released under the MIT License.
|
||||
-- https://opensource.org/licenses/MIT
|
||||
|
||||
---@class HilbertLib
|
||||
local Hilbert = {}
|
||||
|
||||
---Rotate/flip quadrant.
|
||||
---@param n integer
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param rx boolean
|
||||
---@param ry boolean
|
||||
---@return integer
|
||||
---@return integer
|
||||
local function hilbertRotate(n, x, y, rx, ry)
|
||||
if not ry then
|
||||
if rx then
|
||||
@ -15,13 +26,17 @@ local function hilbertRotate(n, x, y, rx, ry)
|
||||
return x, y
|
||||
end
|
||||
|
||||
-- Maps a variable t to a hilbert curve with the side length of 2^potSize (Power of two size)
|
||||
function mapHilbert(t, potSize)
|
||||
---Maps t in the range of [0, (2^potSize)^2-1] to a position on the hilbert curve with the side length of 2^potSize (Power of two size).
|
||||
---@param t integer
|
||||
---@param potSize integer
|
||||
---@return integer
|
||||
---@return integer
|
||||
function Hilbert.Map(t, potSize)
|
||||
local size = math.pow(2, potSize)
|
||||
local x, y = 0, 0
|
||||
|
||||
if t < 0 or t >= size * size then
|
||||
error("Variable t is outside of the range")
|
||||
error("variable t is outside of the range")
|
||||
end
|
||||
|
||||
for i = 0, potSize - 1, 1 do
|
||||
@ -46,3 +61,5 @@ function mapHilbert(t, potSize)
|
||||
|
||||
return x, y
|
||||
end
|
||||
|
||||
return Hilbert
|
Loading…
Reference in New Issue
Block a user