모듈:Cubemapper

리버티게임(개발), 모두가 만들어가는 자유로운 게임
백괴게임>Peremen님의 2018년 3월 1일 (목) 20:11 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 이동 검색으로 이동


모듈 설명문서[보기] [편집] [역사] [새로 고침]

이 모듈은 큐브, 큐브/미니에서 지도를 출력하는 데 사용하는 모듈입니다. 일반적인 다른 큐브 형태의 게임에도 모듈을 적용할 수 있습니다. 모듈에서 내보내는 함수는 하나입니다.

map( position, highlight, block, rows, cols )

큐브 지도를 출력합니다.

사용 방법:

{{#invoke:Cubemapper|map|position=위치|highlight=강조색|block=블록문자|rows=16|cols=16}}

인자:

position
(필수) 큐브 지도에 나타낼 위치입니다.
highlight
(선택) 현재 위치를 강조할 때 사용할 HTML 색상 코드입니다. 지정하지 않으면 #FFA500(██)을 사용합니다.
block
(선택) 큐브 각 방을 나타낼 때 사용할 문자입니다. 지정하지 않으면 █을 사용합니다.
rows, cols
(선택) 큐브의 세로, 가로 크기입니다. 기본값은 16 x 16 큐브입니다.


-----------------------------------------------------------------------------
-- Module: CubeMapper. Renders a map for cube themed games.
-- Author: 사용자:Peremen
-- Original implementation by Cyrus Hackford
-----------------------------------------------------------------------------

local p = {}

function ReverseTable(t)
    local reversedTable = {}
    local itemCount = #t
    for k, v in ipairs(t) do
        reversedTable[itemCount + 1 - k] = v
    end
    return reversedTable
end

function p.map(frame)
	-- Only position is mandatory
	if type(frame.args["position"]) ~= "string" then
		error("No position specified")
	end
	
	-- Optional arguments
	local position = tonumber(frame.args["position"])
	local highlight = frame.args.highlight or "#FFA500"
	local block = frame.args.block or "█"
	local rows = tonumber(frame.args.rows) or 16
	local cols = tonumber(frame.args.cols) or 16
	
	local a = { }
	
	for j=1, rows do
		local t = { }
		for k=0, (cols-1) do
			if position == ((rows * k) + j) then
				local cube_span = mw.html.create('span')
				cube_span
					:css('color', highlight)
					:wikitext(block)
				t[#t+1] = tostring(cube_span)
			else
				t[#t+1] = block
			end
		end
		a[#a+1] = table.concat(t, " ")
	end
	return table.concat(ReverseTable(a), "<br />")
end

return p