mirror of
https://gitlab.com/deetmit/mesecons_x.git
synced 2024-08-20 13:24:10 +02:00
110 lines
2.3 KiB
Lua
110 lines
2.3 KiB
Lua
|
|
||
|
|
||
|
function mx_get(m,x,y)
|
||
|
if m == nil then return nil end
|
||
|
if m[x] == nil then return nil end
|
||
|
if m[x][y] == nil then return nil end
|
||
|
return m[x][y]
|
||
|
end
|
||
|
|
||
|
function mx_set(m,x,y,value)
|
||
|
if m == nil then m = {} end
|
||
|
if m[x] == nil then m[x] = {} end
|
||
|
if m[x][y] == nil then m[x][y] = {} end
|
||
|
m[x][y] = value
|
||
|
end
|
||
|
|
||
|
function mx_flip_xy(m)
|
||
|
local new_m = {}
|
||
|
for i=1,m.w do
|
||
|
for k=1,m.h do
|
||
|
mx_set(new_m,k,i, mx_get(m,i,k))
|
||
|
end
|
||
|
end
|
||
|
new_m.h = m.w
|
||
|
new_m.w = m.h
|
||
|
return new_m
|
||
|
end
|
||
|
|
||
|
function mx_flip_y(m)
|
||
|
local new_m = {}
|
||
|
for i=1,m.w do
|
||
|
for k=1,m.h do
|
||
|
mx_set(new_m,m.w+1-i,k, mx_get(m,i,k))
|
||
|
end
|
||
|
end
|
||
|
new_m.h = m.h
|
||
|
new_m.w = m.w
|
||
|
return new_m
|
||
|
end
|
||
|
|
||
|
function mx_flip_x(m)
|
||
|
local new_m = {}
|
||
|
for i=1,m.w do
|
||
|
for k=1,m.h do
|
||
|
mx_set(new_m,i,m.h+1-k, mx_get(m,i,k))
|
||
|
end
|
||
|
end
|
||
|
new_m.h = m.h
|
||
|
new_m.w = m.w
|
||
|
return new_m
|
||
|
end
|
||
|
|
||
|
|
||
|
function mx_rotate90(m)
|
||
|
return mx_flip_x( mx_flip_xy (m))
|
||
|
end
|
||
|
|
||
|
function mx_rotate180(m)
|
||
|
return mx_rotate90(mx_rotate90(m))
|
||
|
end
|
||
|
|
||
|
function mx_rotate270(m)
|
||
|
return mx_rotate90(mx_rotate90(mx_rotate90(m)))
|
||
|
end
|
||
|
|
||
|
function rotate_mx(mx,direction)
|
||
|
|
||
|
if direction.x == 1 then
|
||
|
return mx_rotate270(mx)
|
||
|
end
|
||
|
if direction.x == -1 then
|
||
|
return mx_rotate90(mx)
|
||
|
end
|
||
|
if direction.z == 1 then
|
||
|
return mx
|
||
|
end
|
||
|
if direction.z == -1 then
|
||
|
return mx_rotate180(mx)
|
||
|
end
|
||
|
return mx
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
function move_mx_to_00(mx)
|
||
|
local new_mx = {}
|
||
|
|
||
|
local xmax = mx.xmax
|
||
|
local xmin = mx.xmin
|
||
|
|
||
|
local ymax = mx.ymax
|
||
|
local ymin = mx.ymin
|
||
|
|
||
|
|
||
|
local sx = xmax - xmin + 1
|
||
|
local sy = ymax - ymin + 1
|
||
|
|
||
|
for x=1,sx,1 do
|
||
|
for y=1,sy,1 do
|
||
|
mx_set(new_mx,x,y, mx_get(mx, x-1 + xmin, y-1 + ymin))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
new_mx.w = sx
|
||
|
new_mx.h = sy
|
||
|
return new_mx
|
||
|
|
||
|
end
|
||
|
|