tibia-client/modules/console/console.lua

126 lines
3.0 KiB
Lua
Raw Normal View History

2011-08-20 22:30:41 +02:00
Console = { }
2011-08-21 03:01:46 +02:00
2011-08-20 22:30:41 +02:00
local console
local logLocked = false
2011-08-21 03:01:46 +02:00
local commandEnv = createEnvironment()
2011-08-21 23:49:31 +02:00
local maxLines = 80
local numLines = 0
local commandHistory = { }
local currentHistoryIndex = 0
2011-08-20 22:30:41 +02:00
function Console.onLog(level, message, time)
-- avoid logging while reporting logs (would cause a infinite loop)
if not logLocked then
logLocked = true
local color
if level == LogDebug then
color = '#5555ff'
elseif level == LogInfo then
2011-08-23 03:08:36 +02:00
color = '#5555ff'
2011-08-20 22:30:41 +02:00
elseif level == LogWarning then
color = '#ffff00'
else
color = '#ff0000'
end
2011-08-23 03:08:36 +02:00
if level ~= LogDebug then
Console.addLine(message, color)
end
2011-08-20 22:30:41 +02:00
logLocked = false
end
end
function Console.addLine(text, color)
-- create new label
2011-08-21 23:49:31 +02:00
2011-08-20 22:30:41 +02:00
local label = UILabel.create()
console:insertChild(-2, label)
label:setId('consoleLabel' .. numLines)
2011-08-20 22:30:41 +02:00
label:setText(text)
label:setForegroundColor(color)
label:setStyle('ConsoleLabel')
2011-08-21 23:49:31 +02:00
numLines = numLines + 1
if numLines > maxLines then
local firstLabel = console:getChildByIndex(1)
2011-08-23 03:08:36 +02:00
firstLabel:destroy()
2011-08-21 23:49:31 +02:00
end
2011-08-20 22:30:41 +02:00
end
function Console.navigateCommand(step)
local numCommands = #commandHistory
if numCommands > 0 then
currentHistoryIndex = math.min(math.max(currentHistoryIndex + step, 0), numCommands)
local commandLineEdit = console:getChildById('commandLineEdit')
if currentHistoryIndex > 0 then
local command = commandHistory[numCommands - currentHistoryIndex + 1]
commandLineEdit:setText(command)
else
commandLineEdit:clearText()
end
end
end
2011-08-20 22:30:41 +02:00
function Console.create()
console = UI.loadAndDisplay("/console/console.otui")
2011-08-20 22:30:41 +02:00
console:hide()
console.onKeyPress = function(self, keyCode, keyChar, keyboardModifiers)
if keyboardModifiers == KeyboardNoModifier then
if keyCode == KeyReturn or keyCode == keyEnter then
local commandLineEdit = console:getChildById('commandLineEdit')
local command = commandLineEdit:getText()
Console.executeCommand(command)
commandLineEdit:clearText()
return true
elseif keyCode == KeyUp then
Console.navigateCommand(1)
return true
elseif keyCode == KeyDown then
Console.navigateCommand(-1)
return true
end
end
return false
end
2011-08-20 22:30:41 +02:00
Logger.setOnLog(Console.onLog)
Logger.fireOldMessages()
end
function Console.destroy()
2011-08-20 23:37:27 +02:00
Logger.setOnLog(nil)
2011-08-20 22:30:41 +02:00
console:destroy()
console = nil
end
function Console.show()
console.parent:lockChild(console)
console.visible = true
end
function Console.hide()
console.parent:unlockChild(console)
console.visible = false
end
function Console.executeCommand(command)
currentHistoryIndex = 0
table.insert(commandHistory, command)
2011-08-20 22:30:41 +02:00
Console.addLine(">> " .. command, "#ffffff")
2011-08-21 03:01:46 +02:00
local func, err = loadstring(command, "@")
2011-08-20 22:30:41 +02:00
if func then
2011-08-21 03:01:46 +02:00
setfenv(func, commandEnv)
2011-08-20 22:30:41 +02:00
local ok, ret = pcall(func)
if ok then
2011-08-21 03:01:46 +02:00
if ret then
print(ret)
end
2011-08-20 22:30:41 +02:00
else
Logger.log(LogError, 'command failed: ' .. ret)
end
else
Logger.log(LogError, 'incorrect lua syntax: ' .. err:sub(5))
end
end