328 lines
7.1 KiB
Python
328 lines
7.1 KiB
Python
|
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()
|
|||
|
|