123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- TextMessage = {}
-
- -- require styles
- importStyle 'textmessage.otui'
-
- -- private variables
- local MessageTypes = {
- consoleRed = { color = '#F55E5E', consoleTab = 'Default' },
- consoleOrange = { color = '#FE6500', consoleTab = 'Default' },
- consoleBlue = { color = '#9F9DFD', consoleTab = 'Default' },
- warning = { color = '#F55E5E', consoleTab = 'Server Log', labelId = 'centerWarning', wrap = true },
- infoDescription = { color = '#00EB00', consoleTab = 'Server Log', labelId = 'centerInfo', consoleOption = 'showInfoMessagesInConsole', wrap = true },
- eventAdvance = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'centerAdvance', consoleOption = 'showEventMessagesInConsole', wrap = true },
- eventDefault = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'bottomStatus', consoleOption = 'showEventMessagesInConsole' },
- statusDefault = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'bottomStatus', consoleOption = 'showStatusMessagesInConsole' },
- statusSmall = { color = '#FFFFFF', labelId = 'bottomStatus' },
- }
-
- local centerTextMessagePanel
- local centerLabel
-
- -- private functions
- local function displayMessage(msgtype, msg, time)
- if not Game.isOnline() then return end
-
- if msgtype.consoleTab ~= nil then
- if msgtype.consoleOption == nil or Options[msgtype.consoleOption] then
- Console.addText(msg, msgtype, msgtype.consoleTab)
- end
- end
-
- if msgtype.labelId then
- local label = Game.gameMapPanel:recursiveGetChildById(msgtype.labelId)
-
- label:setVisible(true)
- label:setText(msg)
- label:setColor(msgtype.color)
- label:resizeToText()
-
- if msgtype.wrap then
- label:setWidth(label:getParent():getWidth())
- label:wrapText()
- label:setHeight(label:getTextSize().height)
- end
-
- if not time then
- time = math.max(#msg * 100, 4000)
- else
- time = time * 1000
- end
- removeEvent(label.hideEvent)
- label.hideEvent = scheduleEvent(function() label:setVisible(false) end, time)
- end
- end
-
- local function createTextMessageLabel(id, parent)
- local label = createWidget('UILabel', parent)
- label:setFont('verdana-11px-rounded')
- label:setTextAlign(AlignCenter)
- label:setId(id)
- label:setMarginBottom(2)
- label:setVisible(false)
- return label
- end
-
- -- public functions
-
- function TextMessage.create()
- centerTextMessagePanel = createWidget('Panel', Game.gameMapPanel)
- centerTextMessagePanel:setId('centerTextMessagePanel')
- local layout = UIVerticalLayout.create(centerTextMessagePanel)
- layout:setFitChildren(true)
- centerTextMessagePanel:setLayout(layout)
- centerTextMessagePanel:setWidth(360)
- centerTextMessagePanel:centerIn('parent')
-
- createTextMessageLabel('centerWarning', centerTextMessagePanel)
- createTextMessageLabel('centerAdvance', centerTextMessagePanel)
- createTextMessageLabel('centerInfo', centerTextMessagePanel)
-
- bottomStatusLabel = createTextMessageLabel('bottomStatus', Game.gameMapPanel)
- bottomStatusLabel:setHeight(16)
- bottomStatusLabel:addAnchor(AnchorBottom, 'parent', AnchorBottom)
- bottomStatusLabel:addAnchor(AnchorLeft, 'parent', AnchorLeft)
- bottomStatusLabel:addAnchor(AnchorRight, 'parent', AnchorRight)
- end
-
- function TextMessage.displayStatus(msg, time)
- displayMessage(MessageTypes.warning, msg)
- end
-
- function TextMessage.displayEventAdvance(msg, time)
- displayMessage(MessageTypes.eventAdvance, msg, time)
- end
-
- function TextMessage.display(msgtypedesc, msg)
- local msgtype = MessageTypes[msgtypedesc]
- if msgtype then
- displayMessage(msgtype, msg)
- end
- end
-
- -- hooked events
- local function onGameDeath()
- local advanceLabel = Game.gameMapPanel:recursiveGetChildById('centerAdvance')
- if advanceLabel:isVisible() then return end
- TextMessage.displayEventAdvance('You are dead.')
- end
-
- local function onGameTextMessage(msgtypedesc, msg)
- TextMessage.display(msgtypedesc, msg)
- end
-
- connect(Game, { onGameStart = TextMessage.create,
- onGameEnd = TextMessage.destroy,
- onDeath = onGameDeath,
- onTextMessage = onGameTextMessage })
|