Add a script for inspecting screen tile parameters.
parent
a1eeb02a1b
commit
99e9785826
@ -0,0 +1,101 @@
|
||||
-- Read the tiles from the screen and display info about them.
|
||||
|
||||
local utils = require 'utils'
|
||||
local gui = require 'gui'
|
||||
|
||||
InspectScreen = defclass(InspectScreen, gui.Screen)
|
||||
|
||||
function InspectScreen:init(args)
|
||||
local w,h = dfhack.screen.getWindowSize()
|
||||
self.cursor_x = math.floor(w/2)
|
||||
self.cursor_y = math.floor(h/2)
|
||||
end
|
||||
|
||||
function InspectScreen:computeFrame(parent_rect)
|
||||
local sw, sh = parent_rect.width, parent_rect.height
|
||||
self.cursor_x = math.max(0, math.min(self.cursor_x, sw-1))
|
||||
self.cursor_y = math.max(0, math.min(self.cursor_y, sh-1))
|
||||
|
||||
local frame = { w = 14, r = 1, h = 10, t = 1 }
|
||||
if self.cursor_x > sw/2 then
|
||||
frame = { w = 14, l = 1, h = 10, t = 1 }
|
||||
end
|
||||
|
||||
return gui.compute_frame_body(sw, sh, frame, 1, 0, false)
|
||||
end
|
||||
|
||||
function InspectScreen:onRenderFrame(dc, rect)
|
||||
self:renderParent()
|
||||
self.cursor_pen = dfhack.screen.readTile(self.cursor_x, self.cursor_y)
|
||||
if gui.blink_visible(100) then
|
||||
dfhack.screen.paintTile({ch='X',fg=COLOR_LIGHTGREEN}, self.cursor_x, self.cursor_y)
|
||||
end
|
||||
dc:fill(rect, {ch=' ',fg=COLOR_BLACK,bg=COLOR_CYAN})
|
||||
end
|
||||
|
||||
local FG_PEN = {fg=COLOR_WHITE,bg=COLOR_BLACK,tile_color=true}
|
||||
local BG_PEN = {fg=COLOR_BLACK,bg=COLOR_WHITE,tile_color=true}
|
||||
local TXT_PEN = {fg=COLOR_WHITE}
|
||||
|
||||
function InspectScreen:onRenderBody(dc)
|
||||
dc:pen(COLOR_WHITE, COLOR_CYAN)
|
||||
if self.cursor_pen then
|
||||
local info = self.cursor_pen
|
||||
dc:string('CH: '):char(info.ch, FG_PEN):char(info.ch, BG_PEN):string(' '):string(''..info.ch,TXT_PEN):newline()
|
||||
local fgcolor = info.fg
|
||||
local fgstr = info.fg
|
||||
if info.bold then
|
||||
fgcolor = (fgcolor+8)%16
|
||||
fgstr = fgstr..'+8'
|
||||
end
|
||||
dc:string('FG: '):string('NN',{fg=fgcolor}):string(' '):string(''..fgstr,TXT_PEN):newline()
|
||||
dc:string('BG: '):string('NN',{fg=info.bg}):string(' '):string(''..info.bg,TXT_PEN):newline()
|
||||
local bstring = 'false'
|
||||
if info.bold then bstring = 'true' end
|
||||
dc:string('Bold: '..bstring):newline():newline()
|
||||
|
||||
if info.tile and gui.USE_GRAPHICS then
|
||||
dc:string('TL: '):tile(' ', info.tile, FG_PEN):tile(' ', info.tile, BG_PEN):string(' '..info.tile):newline()
|
||||
if info.tile_color then
|
||||
dc:string('Color: true')
|
||||
elseif info.tile_fg then
|
||||
dc:string('FG: '):string('NN',{fg=info.tile_fg}):string(' '):string(''..info.tile_fg,TXT_PEN):newline()
|
||||
dc:string('BG: '):string('NN',{fg=info.tile_bg}):string(' '):string(''..info.tile_bg,TXT_PEN):newline()
|
||||
end
|
||||
end
|
||||
else
|
||||
dc:string('Invalid', COLOR_LIGHTRED)
|
||||
end
|
||||
end
|
||||
|
||||
local MOVEMENT_KEYS = {
|
||||
CURSOR_UP = { 0, -1, 0 }, CURSOR_DOWN = { 0, 1, 0 },
|
||||
CURSOR_LEFT = { -1, 0, 0 }, CURSOR_RIGHT = { 1, 0, 0 },
|
||||
CURSOR_UPLEFT = { -1, -1, 0 }, CURSOR_UPRIGHT = { 1, -1, 0 },
|
||||
CURSOR_DOWNLEFT = { -1, 1, 0 }, CURSOR_DOWNRIGHT = { 1, 1, 0 },
|
||||
CURSOR_UP_FAST = { 0, -1, 0, true }, CURSOR_DOWN_FAST = { 0, 1, 0, true },
|
||||
CURSOR_LEFT_FAST = { -1, 0, 0, true }, CURSOR_RIGHT_FAST = { 1, 0, 0, true },
|
||||
CURSOR_UPLEFT_FAST = { -1, -1, 0, true }, CURSOR_UPRIGHT_FAST = { 1, -1, 0, true },
|
||||
CURSOR_DOWNLEFT_FAST = { -1, 1, 0, true }, CURSOR_DOWNRIGHT_FAST = { 1, 1, 0, true },
|
||||
}
|
||||
|
||||
function InspectScreen:onInput(keys)
|
||||
if keys.LEAVESCREEN then
|
||||
self:dismiss()
|
||||
else
|
||||
for k,v in pairs(MOVEMENT_KEYS) do
|
||||
if keys[k] then
|
||||
local delta = 1
|
||||
if v[4] then
|
||||
delta = 10
|
||||
end
|
||||
self.cursor_x = self.cursor_x + delta*v[1]
|
||||
self.cursor_y = self.cursor_y + delta*v[2]
|
||||
self:updateLayout()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
InspectScreen{}:show()
|
Loading…
Reference in New Issue