client/bin/pack/root/uitip.py

328 lines
7.1 KiB
Python
Raw Normal View History

import ui
import grp
import app
import wndMgr
class TextBar(ui.Window):
def __init__(self, width, height):
ui.Window.__init__(self)
self.handle = grp.CreateTextBar(width, height)
def __del__(self):
ui.Window.__del__(self)
grp.DestroyTextBar(self.handle)
def ClearBar(self):
grp.ClearTextBar(self.handle)
def SetClipRect(self, x1, y1, x2, y2):
grp.SetTextBarClipRect(self.handle, x1, y1, x2, y2)
def TextOut(self, x, y, text):
grp.TextBarTextOut(self.handle, x, y, text)
def OnRender(self):
x, y = self.GetGlobalPosition()
grp.RenderTextBar(self.handle, x, y)
def SetTextColor(self, r, g, b):
grp.TextBarSetTextColor(self.handle, r, g, b)
def GetTextExtent(self, text):
return grp.TextBarGetTextExtent(self.handle, text)
class TipBoard(ui.Bar):
SCROLL_WAIT_TIME = 3.0
TIP_DURATION = 5.0
STEP_HEIGHT = 17
def __init__(self):
ui.Bar.__init__(self)
self.AddFlag("not_pick")
self.tipList = []
self.curPos = 0
self.dstPos = 0
self.nextScrollTime = 0
self.width = 370
self.SetPosition(0, 70)
self.SetSize(370, 20)
self.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 0.5))
self.SetWindowHorizontalAlignCenter()
self.__CreateTextBar()
def __del__(self):
ui.Bar.__del__(self)
def __CreateTextBar(self):
x, y = self.GetGlobalPosition()
self.textBar = TextBar(370, 300)
self.textBar.SetParent(self)
self.textBar.SetPosition(3, 5)
self.textBar.SetClipRect(0, y, wndMgr.GetScreenWidth(), y+18)
self.textBar.Show()
def __CleanOldTip(self):
leaveList = []
for tip in self.tipList:
madeTime = tip[0]
if app.GetTime() - madeTime > self.TIP_DURATION:
pass
else:
leaveList.append(tip)
self.tipList = leaveList
if not leaveList:
self.textBar.ClearBar()
self.Hide()
return
self.__RefreshBoard()
def __RefreshBoard(self):
self.textBar.ClearBar()
index = 0
for tip in self.tipList:
text = tip[1]
self.textBar.TextOut(0, index*self.STEP_HEIGHT, text)
index += 1
def SetTip(self, text):
if not app.IsVisibleNotice():
return
curTime = app.GetTime()
self.tipList.append((curTime, text))
self.__RefreshBoard()
self.nextScrollTime = app.GetTime() + 1.0
if not self.IsShow():
self.curPos = -self.STEP_HEIGHT
self.dstPos = -self.STEP_HEIGHT
self.textBar.SetPosition(3, 5 - self.curPos)
self.Show()
def OnUpdate(self):
if not self.tipList:
self.Hide()
return
if app.GetTime() > self.nextScrollTime:
self.nextScrollTime = app.GetTime() + self.SCROLL_WAIT_TIME
self.dstPos = self.curPos + self.STEP_HEIGHT
if self.dstPos > self.curPos:
self.curPos += 1
self.textBar.SetPosition(3, 5 - self.curPos)
if self.curPos > len(self.tipList)*self.STEP_HEIGHT:
self.curPos = -self.STEP_HEIGHT
self.dstPos = -self.STEP_HEIGHT
self.__CleanOldTip()
class BigTextBar(TextBar):
def __init__(self, width, height, fontSize):
ui.Window.__init__(self)
self.handle = grp.CreateBigTextBar(width, height, fontSize)
class BigBoard(ui.Bar):
SCROLL_WAIT_TIME = 5.0
TIP_DURATION = 10.0
FONT_WIDTH = 18
FONT_HEIGHT = 18
LINE_WIDTH = 500
LINE_HEIGHT = FONT_HEIGHT + 5
STEP_HEIGHT = LINE_HEIGHT * 2
LINE_CHANGE_LIMIT_WIDTH = 350
FRAME_IMAGE_FILE_NAME_LIST = [
"season1/interface/oxevent/frame_0.sub",
"season1/interface/oxevent/frame_1.sub",
"season1/interface/oxevent/frame_2.sub",
]
FRAME_IMAGE_STEP = 256
FRAME_BASE_X = -20
FRAME_BASE_Y = -12
def __init__(self):
ui.Bar.__init__(self)
self.AddFlag("not_pick")
self.tipList = []
self.curPos = 0
self.dstPos = 0
self.nextScrollTime = 0
self.SetPosition(0, 150)
self.SetSize(512, 55)
self.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 0.5))
self.SetWindowHorizontalAlignCenter()
self.__CreateTextBar()
self.__LoadFrameImages()
def __LoadFrameImages(self):
x = self.FRAME_BASE_X
y = self.FRAME_BASE_Y
self.imgList = []
for imgFileName in self.FRAME_IMAGE_FILE_NAME_LIST:
self.imgList.append(self.__LoadImage(x, y, imgFileName))
x += self.FRAME_IMAGE_STEP
def __LoadImage(self, x, y, fileName):
img = ui.ImageBox()
img.SetParent(self)
img.AddFlag("not_pick")
img.LoadImage(fileName)
img.SetPosition(x, y)
img.Show()
return img
def __del__(self):
ui.Bar.__del__(self)
def __CreateTextBar(self):
x, y = self.GetGlobalPosition()
self.textBar = BigTextBar(self.LINE_WIDTH, 300, self.FONT_HEIGHT)
self.textBar.SetParent(self)
self.textBar.SetPosition(6, 8)
self.textBar.SetTextColor(242, 231, 193)
self.textBar.SetClipRect(0, y+8, wndMgr.GetScreenWidth(), y+8+self.STEP_HEIGHT)
self.textBar.Show()
def __CleanOldTip(self):
curTime = app.GetTime()
leaveList = []
for madeTime, text in self.tipList:
if curTime + self.TIP_DURATION <= madeTime:
leaveList.append(tip)
self.tipList = leaveList
if not leaveList:
self.textBar.ClearBar()
self.Hide()
return
self.__RefreshBoard()
def __RefreshBoard(self):
self.textBar.ClearBar()
if len(self.tipList) == 1:
checkTime, text = self.tipList[0]
(text_width, text_height) = self.textBar.GetTextExtent(text)
self.textBar.TextOut((500-text_width)/2, (self.STEP_HEIGHT-8-text_height)/2, text)
else:
index = 0
for checkTime, text in self.tipList:
(text_width, text_height) = self.textBar.GetTextExtent(text)
self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, text)
index += 1
def SetTip(self, text):
if not app.IsVisibleNotice():
return
curTime = app.GetTime()
self.__AppendText(curTime, text)
self.__RefreshBoard()
self.nextScrollTime = curTime + 1.0
if not self.IsShow():
self.curPos = -self.STEP_HEIGHT
self.dstPos = -self.STEP_HEIGHT
self.textBar.SetPosition(3, 8 - self.curPos)
self.Show()
def __AppendText(self, curTime, text):
import dbg
prevPos = 0
while 1:
curPos = text.find(" ", prevPos)
if curPos < 0:
break
(text_width, text_height) = self.textBar.GetTextExtent(text[:curPos])
if text_width > self.LINE_CHANGE_LIMIT_WIDTH:
self.tipList.append((curTime, text[:prevPos]))
self.tipList.append((curTime, text[prevPos:]))
return
prevPos = curPos + 1
self.tipList.append((curTime, text))
def OnUpdate(self):
if not self.tipList:
self.Hide()
return
if app.GetTime() > self.nextScrollTime:
self.nextScrollTime = app.GetTime() + self.SCROLL_WAIT_TIME
self.dstPos = self.curPos + self.STEP_HEIGHT
if self.dstPos > self.curPos:
self.curPos += 1
self.textBar.SetPosition(3, 8 - self.curPos)
if self.curPos > len(self.tipList)*self.LINE_HEIGHT:
self.curPos = -self.STEP_HEIGHT
self.dstPos = -self.STEP_HEIGHT
self.__CleanOldTip()
if __name__ == "__main__":
import app
import wndMgr
import systemSetting
import mouseModule
import grp
import ui
#wndMgr.SetOutlineFlag(TRUE)
app.SetMouseHandler(mouseModule.mouseController)
app.SetHairColorEnable(TRUE)
wndMgr.SetMouseHandler(mouseModule.mouseController)
wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
app.Create("METIN2 CLOSED BETA", systemSetting.GetWidth(), systemSetting.GetHeight(), 1)
mouseModule.mouseController.Create()
wnd = BigBoard()
wnd.Show()
wnd.SetTip("<EFBFBD>ȳ<EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD>")
wnd.SetTip("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڷ<EFBFBD> <20>Դϴ<D4B4>")
app.Loop()