1. if app.ENABLE_OX_RENEWAL:
  2. class BigBoardControl(ui.Bar):
  3. FONT_WIDTH = 18
  4. FONT_HEIGHT = 18
  5. LINE_WIDTH = 500
  6. LINE_HEIGHT = FONT_HEIGHT + 5
  7. STEP_HEIGHT = LINE_HEIGHT * 2
  8. LINE_CHANGE_LIMIT_WIDTH = 450
  9. BIG_TEXTBAR_MAX_HIGHT = 1000
  10. FRAME_IMAGE_FILE_NAME_LIST = [
  11. "season1/interface/oxevent/frame_new_0.sub",
  12. "season1/interface/oxevent/frame_new_1.sub",
  13. ]
  14. FRAME_IMAGE_STEP = 256
  15. FRAME_BASE_X = -20
  16. FRAME_BASE_Y = -12
  17. def __init__(self):
  18. ui.Bar.__init__(self)
  19. self.AddFlag("not_pick")
  20. self.tipList = []
  21. self.curPos = 0
  22. self.dstPos = 0
  23. self.nextScrollTime = 0
  24. self.scrollstop = 0
  25. self.pretexsize = 0
  26. self.nexttextsize = 0
  27. self.changeline = 0
  28. self.addtipListcount = 0
  29. self.SetPosition(0, 150)
  30. self.SetSize(512, 55)
  31. self.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 0.5))
  32. self.SetWindowHorizontalAlignCenter()
  33. self.__CreateTextBar()
  34. self.__LoadFrameImages()
  35. def __LoadFrameImages(self):
  36. x = self.FRAME_BASE_X
  37. y = self.FRAME_BASE_Y
  38. self.imgList = []
  39. for imgFileName in self.FRAME_IMAGE_FILE_NAME_LIST:
  40. self.imgList.append(self.__LoadImage(x, y, imgFileName))
  41. def __LoadImage(self, x, y, fileName):
  42. img = ui.ImageBox()
  43. img.SetParent(self)
  44. img.AddFlag("not_pick")
  45. img.LoadImage(fileName)
  46. img.SetPosition(x, y)
  47. img.Show()
  48. return img
  49. def __del__(self):
  50. self.tipList = []
  51. self.textBar.ClearBar()
  52. self.Hide()
  53. ui.Bar.__del__(self)
  54. def __CreateTextBar(self):
  55. x, y = self.GetGlobalPosition()
  56. self.textBar = BigTextBar(self.LINE_WIDTH, self.BIG_TEXTBAR_MAX_HIGHT, self.FONT_HEIGHT)
  57. self.textBar.SetParent(self)
  58. self.textBar.SetPosition(6, 8)
  59. self.textBar.SetTextColor(242, 231, 193)
  60. self.textBar.SetClipRect(0, y+8, wndMgr.GetScreenWidth(), y+8+self.STEP_HEIGHT)
  61. self.textBar.Show()
  62. def __CleanOldTip(self):
  63. self.tipList = []
  64. self.textBar.ClearBar()
  65. self.Hide()
  66. def __RefreshBoard(self):
  67. self.textBar.ClearBar()
  68. preaddtipListcount = self.addtipListcount
  69. self.addtipListcount = 0
  70. index = 0
  71. for text in self.tipList:
  72. (text_width, text_height) = self.textBar.GetTextExtent(text)
  73. if index == 0:
  74. self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, " ")
  75. index += 1
  76. self.addtipListcount += 1
  77. if index == (len(self.tipList) - (len(self.tipList) - self.pretexsize))+1 and not self.pretexsize == 0:
  78. self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, " ")
  79. index += 1
  80. self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, " ")
  81. index += 1
  82. self.addtipListcount += 2
  83. self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, text)
  84. index += 1
  85. if self.tipList:
  86. index += 1
  87. self.addtipListcount += 1
  88. self.textBar.TextOut((500-text_width)/2, index*self.LINE_HEIGHT, " ")
  89. def SetTip(self, text):
  90. if not app.IsVisibleNotice():
  91. return
  92. if text == "#start" or text == "#end" or text == "#send":
  93. pass
  94. else:
  95. self.__AppendText(text)
  96. if text == "#start" or text == "#send":
  97. if text == "#send" and self.pretexsize == 0:
  98. text = "#end"
  99. self.__RefreshBoard()
  100. if text == "#start":
  101. self.STEP_HEIGHT = (self.LINE_HEIGHT * (len(self.tipList) + self.addtipListcount))
  102. self.pretexsize = len(self.tipList)
  103. x, y = self.GetGlobalPosition()
  104. self.textBar.SetClipRect(0, y+8, wndMgr.GetScreenWidth(), y+8+self.STEP_HEIGHT)
  105. self.SetSize(512, 10 + (self.LINE_HEIGHT * (len(self.tipList) + self.addtipListcount))+10)
  106. self.imgList[1].SetPosition(self.FRAME_BASE_X, self.STEP_HEIGHT + 10)
  107. self.scrollstop = 0
  108. self.changeline = 1
  109. if text == "#send":
  110. self.scrollstop = 1
  111. self.nexttextsize = len(self.tipList) - self.pretexsize
  112. if not self.IsShow():
  113. self.curPos = -self.STEP_HEIGHT
  114. self.dstPos = -self.STEP_HEIGHT
  115. self.textBar.SetPosition(3, 8 - self.curPos)
  116. self.Show()
  117. if text == "#end":
  118. self.curPos = -self.STEP_HEIGHT
  119. self.dstPos = -self.STEP_HEIGHT
  120. self.textBar.SetPosition(3, 8 - self.curPos)
  121. self.textcount = 0
  122. self.changeline = 0
  123. self.pretexsize = 0
  124. self.nexttextsize = 0
  125. self.addtipListcount = 0
  126. self.__CleanOldTip()
  127. def __AppendText(self, text):
  128. import dbg
  129. prevPos = 0
  130. while 1:
  131. curPos = text.find(" ", prevPos)
  132. if curPos < 0:
  133. break
  134. (text_width, text_height) = self.textBar.GetTextExtent(text[:curPos])
  135. if text_width > self.LINE_CHANGE_LIMIT_WIDTH:
  136. self.tipList.append(text[:prevPos])
  137. (text_width, text_height) = self.textBar.GetTextExtent(text[prevPos:])
  138. if text_width > self.LINE_CHANGE_LIMIT_WIDTH:
  139. text = text[prevPos:]
  140. if text[:prevPos] == "":
  141. prevPos = curPos + 1
  142. else:
  143. prevPos = 0
  144. else:
  145. text = text[prevPos:]
  146. break
  147. else:
  148. prevPos = curPos + 1
  149. self.tipList.append(text)
  150. def OnUpdate(self):
  151. if not self.tipList:
  152. self.Hide()
  153. return
  154. if self.changeline:
  155. self.changeline = 0
  156. self.dstPos = self.curPos + self.STEP_HEIGHT
  157. if self.dstPos > self.curPos and self.curPos <= -1 and not self.scrollstop:
  158. self.curPos += 1
  159. self.textBar.SetPosition(3, 8 - self.curPos)
  160. if self.scrollstop:
  161. self.curPos += 1
  162. self.textBar.SetPosition(3, 8 - self.curPos)
  163. if self.curPos > (self.pretexsize + 2) * self.LINE_HEIGHT:
  164. self.pretexsize = (self.pretexsize + self.nexttextsize)
  165. self.scrollstop = 0

blackdragonx61