Guest User

Untitled

a guest
Jan 6th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.17 KB | None | 0 0
  1. import ui
  2. import dbg
  3. import app
  4. import grp
  5. import grpImage
  6. import event
  7. import time
  8. import wndMgr
  9. import net
  10. import sys
  11.  
  12. QUEST_BOARD_IMAGE_DIR = 'd:/ymir work/ui/game/questboard/'
  13.  
  14. cur_questpage_number = 1
  15. entire_questbutton_number = 0
  16. entire_questpage_number = 1
  17.  
  18.  
  19. # TOOLTIP_IMAGE_BOX
  20. class ToolTipImageBox(ui.ImageBox):
  21. def __init__(self):
  22. ui.ImageBox.__init__(self)
  23. self.DestroyToolTip()
  24. def __del__(self):
  25. ui.ImageBox.__del__(self)
  26.  
  27. def CreateToolTip(self, parent, title, desc, x, y):
  28. import uiToolTip
  29. self.toolTip = uiToolTip.ToolTip()
  30. self.toolTip.SetWindowHorizontalAlignCenter()
  31. self.toolTip.SetFollow(False)
  32. self.toolTip.SetTitle(title)
  33. self.toolTip.SetPosition(x, y)
  34.  
  35. desc = desc.replace("|", "/")
  36. for line in desc.split("/"):
  37. self.toolTip.AutoAppendTextLine(line)
  38.  
  39. self.toolTip.ResizeToolTip()
  40. self.toolTip.Hide()
  41.  
  42. def DestroyToolTip(self):
  43. self.toolTip = None
  44.  
  45. def OnMouseOverIn(self):
  46. if self.toolTip:
  47. self.toolTip.SetTop()
  48. self.toolTip.Show()
  49.  
  50. def OnMouseOverOut(self):
  51. if self.toolTip:
  52. self.toolTip.Hide()
  53. # END_OF_TOOLTIP_IMAGE_BOX
  54.  
  55. class QuestCurtain(ui.Window):
  56. CURTAIN_TIME = 0.25
  57. CURTAIN_SPEED = 200
  58. BarHeight = 60
  59. OnDoneEventList = []
  60. def __init__(self,layer="TOP_MOST"):
  61. ui.Window.__init__(self,layer)
  62. self.TopBar = ui.Bar("TOP_MOST")
  63. self.BottomBar = ui.Bar("TOP_MOST")
  64.  
  65. self.TopBar.Show()
  66. self.BottomBar.Show()
  67.  
  68. self.TopBar.SetColor(0xff000000)
  69. self.BottomBar.SetColor(0xff000000)
  70.  
  71. self.TopBar.SetPosition(0,-self.BarHeight)
  72. self.TopBar.SetSize(wndMgr.GetScreenWidth(),self.BarHeight)
  73.  
  74. self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight())
  75. self.BottomBar.SetSize(wndMgr.GetScreenWidth(),self.BarHeight)
  76.  
  77. self.CurtainMode = 0
  78.  
  79. self.lastclock = time.clock()
  80.  
  81. def Close(self):
  82. self.CurtainMode = 0
  83. self.TopBar.SetPosition(0, -self.BarHeight-1)
  84. self.BottomBar.SetPosition(0, wndMgr.GetScreenHeight()+1)
  85. for OnDoneEvent in QuestCurtain.OnDoneEventList:
  86. apply(OnDoneEvent,(self,))
  87. QuestCurtain.OnDoneEventList = []
  88.  
  89. def OnUpdate(self):
  90. dt = time.clock() - self.lastclock
  91. if self.CurtainMode>0:
  92. self.TopBar.SetPosition(0, int(self.TopBar.GetGlobalPosition()[1]+dt*self.CURTAIN_SPEED))
  93. self.BottomBar.SetPosition(0, int(self.BottomBar.GetGlobalPosition()[1]-dt*self.CURTAIN_SPEED))
  94. if self.TopBar.GetGlobalPosition()[1]>0:
  95. self.TopBar.SetPosition(0,0)
  96. self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight()-self.BarHeight)
  97. self.CurtainMode = 0
  98.  
  99. elif self.CurtainMode<0:
  100. self.TopBar.SetPosition(0, int(self.TopBar.GetGlobalPosition()[1]-dt*self.CURTAIN_SPEED))
  101. self.BottomBar.SetPosition(0, int(self.BottomBar.GetGlobalPosition()[1]+dt*self.CURTAIN_SPEED))
  102. if self.TopBar.GetGlobalPosition()[1]<-self.BarHeight:
  103. self.TopBar.SetPosition(0,-self.BarHeight-1)
  104. self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight()+1)
  105. self.Close()
  106.  
  107. self.lastclock = time.clock()
  108.  
  109. class EventCurtain(ui.Bar):
  110.  
  111. COLOR_WHITE = 0.0
  112. COLOR_BLACK = 1.0
  113.  
  114. DEFAULT_FADE_SPEED = 0.035
  115.  
  116. STATE_WAIT = 0
  117. STATE_OUT = 1
  118. STATE_IN = 2
  119.  
  120. def __init__(self, index):
  121. print "NEW EVENT CURTAIN ----------------------------------------------------------------------------"
  122. ui.Bar.__init__(self, "CURTAIN")
  123. self.SetWindowName("EventCurtain")
  124. self.AddFlag("float")
  125. self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  126. self.Hide()
  127.  
  128. self.fadeColor = 1.0
  129. self.curAlpha = 0.0
  130. self.FadeInFlag = False
  131. self.state = self.STATE_WAIT
  132. self.speed = 1.0
  133. self.eventIndex = index
  134.  
  135. def __del__(self):
  136. print "---------------------------------------------------------------------------- DELETE EVENT CURTAIN"
  137. ui.Bar.__del__(self)
  138.  
  139. def SetAlpha(self, alpha):
  140. color = grp.GenerateColor(self.fadeColor, self.fadeColor, self.fadeColor, alpha)
  141. self.SetColor(color)
  142.  
  143. def FadeOut(self, speed):
  144. self.curAlpha = 0.0
  145. self.__StartFade(self.STATE_OUT, 0.0, speed)
  146.  
  147. def FadeIn(self, speed):
  148. self.curAlpha = 1.0
  149. self.__StartFade(self.STATE_IN, 0.0, speed)
  150.  
  151. def WhiteOut(self, speed):
  152. self.curAlpha = 0.0
  153. self.__StartFade(self.STATE_OUT, 1.0, speed)
  154.  
  155. def WhiteIn(self, speed):
  156. self.curAlpha = 1.0
  157. self.__StartFade(self.STATE_IN, 1.0, speed)
  158.  
  159. def __StartFade(self, state, color, speed):
  160. self.state = state
  161. self.fadeColor = color
  162. self.Show()
  163.  
  164. self.speed = self.DEFAULT_FADE_SPEED
  165. if 0 != speed:
  166. self.speed = speed
  167.  
  168. def __EndFade(self):
  169. event.EndEventProcess(self.eventIndex)
  170.  
  171. def OnUpdate(self):
  172.  
  173. if self.STATE_OUT == self.state:
  174.  
  175. self.curAlpha += self.speed
  176.  
  177. if self.curAlpha >= 1.0:
  178.  
  179. self.state = self.STATE_WAIT
  180. self.curAlpha = 1.0
  181. self.__EndFade()
  182.  
  183. elif self.STATE_IN == self.state:
  184.  
  185. self.curAlpha -= self.speed
  186.  
  187. if self.curAlpha <= 0.0:
  188.  
  189. self.state = self.STATE_WAIT
  190. self.curAlpha = 0.0
  191. self.__EndFade()
  192. self.Hide()
  193.  
  194. self.SetAlpha(self.curAlpha)
  195.  
  196. class BarButton(ui.Button):
  197. ColorUp = 0x40999999
  198. ColorDown = 0x40aaaacc
  199. ColorOver = 0x40ddddff
  200.  
  201. UP=0
  202. DOWN=1
  203. OVER=2
  204.  
  205. def __init__(self, layer = "UI",
  206. aColorUp = ColorUp,
  207. aColorDown = ColorDown,
  208. aColorOver = ColorOver):
  209. ui.Button.__init__(self,layer)
  210. self.state = self.UP
  211. self.colortable = aColorUp, aColorDown, aColorOver
  212.  
  213. def OnRender(self):
  214. x,y = self.GetGlobalPosition()
  215. grp.SetColor(self.colortable[self.state])
  216. grp.RenderBar(x,y,self.GetWidth(),self.GetHeight())
  217.  
  218. def CallEvent(self):
  219. self.state = self.UP
  220. ui.Button.CallEvent(self)
  221.  
  222. def DownEvent(self):
  223. self.state = self.DOWN
  224.  
  225. def ShowToolTip(self):
  226. self.state = self.OVER
  227.  
  228. def HideToolTip(self):
  229. self.state = self.UP
  230.  
  231. class DescriptionWindow(ui.Window):
  232. def __init__(self,idx):
  233. ui.Window.__init__(self, "TOP_MOST")
  234. self.descIndex = idx
  235. def __del__(self):
  236. ui.Window.__del__(self)
  237. def OnRender(self):
  238. event.RenderEventSet(self.descIndex)
  239.  
  240. class QuestDialog(ui.ScriptWindow):
  241.  
  242. TITLE_STATE_NONE = 0
  243. TITLE_STATE_APPEAR = 1
  244. TITLE_STATE_SHOW = 2
  245. TITLE_STATE_DISAPPEAR = 3
  246.  
  247. SKIN_NONE = 0
  248. SKIN_CINEMA = 5
  249.  
  250. QUEST_BUTTON_MAX_NUM = 8
  251.  
  252. def __init__(self,skin,idx):
  253.  
  254. ui.ScriptWindow.__init__(self)
  255. self.SetWindowName("quest dialog")
  256.  
  257. self.focusIndex = 0
  258.  
  259. self.board = None
  260. self.sx = 0
  261. self.sy = 0
  262.  
  263. self.skin = skin
  264. if skin == 3:
  265. event.SetRestrictedCount(idx,36)
  266. else:
  267. event.SetRestrictedCount(idx,60)
  268.  
  269. QuestCurtain.BarHeight = (wndMgr.GetScreenHeight()-wndMgr.GetScreenWidth()*9/16)/2
  270.  
  271. if QuestCurtain.BarHeight<0:
  272. QuestCurtain.BarHeight = 50
  273. if not ('QuestCurtain' in QuestDialog.__dict__):
  274. QuestDialog.QuestCurtain = QuestCurtain()
  275. QuestDialog.QuestCurtain.Show()
  276.  
  277. QuestDialog.QuestCurtain.CurtainMode = 1
  278. self.nextCurtainMode = 0
  279. if self.skin:
  280. QuestDialog.QuestCurtain.CurtainMode = 1
  281. self.nextCurtainMode = 0
  282. self.LoadDialog(self.skin)
  283. else:
  284. QuestDialog.QuestCurtain.CurtainMode = -1
  285. self.nextCurtainMode = -1
  286.  
  287. self.descIndex = idx
  288. self.descWindow = DescriptionWindow(idx)
  289. self.descWindow.Show()
  290. self.eventCurtain = EventCurtain(idx)
  291. event.SetEventHandler(idx, self)
  292.  
  293. self.OnCloseEvent = None
  294. self.btnAnswer = None
  295. self.btnNext = None
  296. self.imgLeft = None
  297. self.imgTop = None
  298. self.imgBackground = None
  299. self.imgTitle = None
  300. self.titleState = self.TITLE_STATE_NONE
  301. self.titleShowTime = 0
  302. self.images = []
  303. self.prevbutton = None
  304. self.nextbutton = None
  305.  
  306. # QUEST_INPUT
  307. self.needInputString = False
  308. self.editSlot = None
  309. self.editLine = None
  310. # END_OF_QUEST_INPUT
  311.  
  312. def __del__(self):
  313. ui.ScriptWindow.__del__(self)
  314.  
  315. def LoadDialog(self, skin):
  316. try:
  317. PythonScriptLoader = ui.PythonScriptLoader()
  318. PythonScriptLoader.LoadScriptFile(self, "uiscript/questdialog.py")
  319. except RuntimeError:
  320. dbg.TraceError("QuestDialog.LoadDialog")
  321.  
  322. try:
  323. self.board = self.GetChild('board')
  324. except RuntimeError:
  325. dbg.TraceError("QuestDialog.BindObject")
  326.  
  327. self.SetCenterPosition()
  328. if self.SKIN_CINEMA == skin:
  329. self.board.Hide()
  330.  
  331. # QUEST_CANCEL
  332. def OnCancel(self):
  333. self.nextCurtainMode = -1
  334. self.CloseSelf()
  335. # END_OF_QUEST_CANCEL
  336.  
  337. def CloseSelf(self):
  338. QuestDialog.QuestCurtain.CurtainMode = self.nextCurtainMode
  339. self.btnNext = None
  340. self.descWindow = None
  341. self.btnAnswer = None
  342. self.Destroy()
  343. if self.descIndex:
  344. event.ClearEventSet(self.descIndex)
  345. self.descIndex = None
  346.  
  347. self.focusIndex = 0
  348.  
  349. def Destroy(self):
  350. self.ClearDictionary()
  351. if self.OnCloseEvent:
  352. self.OnCloseEvent()
  353. self.OnCloseEvent = None
  354.  
  355. # QUEST_INPUT
  356. if self.needInputString:
  357. if self.editLine:
  358. text = self.editLine.GetText()
  359. net.SendQuestInputStringPacket(text)
  360. # END_OF_QUEST_INPUT
  361.  
  362. self.imgTitle = None
  363. self.images = None
  364. self.eventCurtain = None
  365. self.board = None
  366.  
  367. def OnUpdate(self):
  368. if self.skin == self.SKIN_CINEMA:
  369. event.UpdateEventSet(self.descIndex, 50, -(wndMgr.GetScreenHeight() - 44))
  370.  
  371. # AUTO_RESIZE_BOARD
  372. elif self.skin == 3:
  373. if self.board:
  374. event.UpdateEventSet(self.descIndex, self.board.GetGlobalPosition()[0]+20+self.sx, -self.board.GetGlobalPosition()[1]-20-self.sy)
  375. event.SetEventSetWidth(self.descIndex, self.board.GetWidth()-40)
  376. elif self.skin:
  377. if self.board:
  378. event.UpdateEventSet(self.descIndex, self.board.GetGlobalPosition()[0]+20, -self.board.GetGlobalPosition()[1]-20)
  379. event.SetEventSetWidth(self.descIndex, self.board.GetWidth()-40)
  380. # END_OF_AUTO_RESIZE_BOARD
  381. else:
  382. event.UpdateEventSet(self.descIndex, 0, 0)
  383.  
  384. if self.TITLE_STATE_NONE != self.titleState:
  385.  
  386. curTime = app.GetTime()
  387. elapsedTime = app.GetTime() - self.titleShowTime
  388.  
  389. if self.TITLE_STATE_APPEAR == self.titleState:
  390. self.imgTitle.SetAlpha(elapsedTime*2)
  391. if elapsedTime > 0.5:
  392. self.titleState = self.TITLE_STATE_SHOW
  393. self.titleShowTime = curTime
  394.  
  395. elif self.TITLE_STATE_SHOW == self.titleState:
  396. if elapsedTime > 1.0:
  397. self.titleState = self.TITLE_STATE_DISAPPEAR
  398. self.titleShowTime = curTime
  399.  
  400. elif self.TITLE_STATE_DISAPPEAR == self.titleState:
  401. self.imgTitle.SetAlpha(1.0 - elapsedTime*2)
  402. if elapsedTime > 0.5:
  403. self.titleState = self.TITLE_STATE_NONE
  404. self.titleShowTime = curTime
  405.  
  406. ## Set Variables
  407.  
  408. def AddOnCloseEvent(self,f):
  409. if self.OnCloseEvent:
  410. self.OnCloseEvent = lambda z=[self.OnCloseEvent, f]:map(apply,z)
  411. else:
  412. self.OnCloseEvent = f
  413.  
  414. def AddOnDoneEvent(self,f):
  415. QuestCurtain.OnDoneEventList.append(f)
  416.  
  417. def SetOnCloseEvent(self,f):
  418. self.OnCloseEvent = f
  419.  
  420. def SetEventSetPosition(self, x, y):
  421. self.sx = x
  422. self.sy = y
  423.  
  424. def AdjustEventSetPosition(self, x, y):
  425. self.sx += x
  426. self.sy += y
  427.  
  428. ## Event
  429. # QUEST_CANCEL
  430. def MakeNextButton(self, button_type):
  431. if self.SKIN_NONE == self.skin:
  432. return
  433.  
  434. yPos = event.GetEventSetLocalYPosition(self.descIndex)
  435.  
  436. b = BarButton()
  437. b.SetParent(self.board)
  438.  
  439. b.SetSize(100,26)
  440. b.SetPosition(self.sx+self.board.GetWidth()/2-50,self.sy+yPos)
  441.  
  442. self.nextButtonType = button_type;
  443.  
  444. import localeInfo
  445. if event.BUTTON_TYPE_CANCEL == button_type:
  446. b.SetEvent(lambda s=self:event.SelectAnswer(s.descIndex, 254) or s.OnCancel())
  447. b.SetText(localeInfo.UI_CANCEL)
  448. elif event.BUTTON_TYPE_DONE == button_type:
  449. b.SetEvent(lambda s=self:s.CloseSelf())
  450. b.SetText(localeInfo.UI_OK)
  451. elif event.BUTTON_TYPE_NEXT == button_type:
  452. b.SetEvent(lambda s=self:event.SelectAnswer(s.descIndex, 254) or s.CloseSelf())
  453. b.SetText(localeInfo.UI_NEXT)
  454. b.Show()
  455. b.SetTextColor(0xffffffff)
  456. self.btnNext = b
  457.  
  458. # END_OF_QUEST_CANCEL
  459.  
  460. def MakeQuestion(self, n): # n은 모든 퀘스트 대화창의 마지막 버튼인 "닫기"를 포함한 전체 퀘스트 버튼 개수. by 김준호
  461. global entire_questbutton_number
  462. global entire_questpage_number
  463. global cur_questpage_number
  464. entire_questpage_number = ((n-2)/7)+1
  465. entire_questbutton_number = n
  466.  
  467. if not self.board:
  468. return
  469.  
  470. self.btnAnswer = [self.MakeEachButton(i) for i in xrange (n)]
  471.  
  472. import localeInfo
  473. self.prevbutton = self.MakeNextPrevPageButton()
  474. self.prevbutton.SetPosition(self.sx+self.board.GetWidth()/2-164, self.board.GetHeight()/2-16)
  475. self.prevbutton.SetText(localeInfo.UI_PREVPAGE)
  476. self.prevbutton.SetEvent(self.PrevQuestPageEvent, 1, n)
  477.  
  478. self.nextbutton = self.MakeNextPrevPageButton()
  479. self.nextbutton.SetPosition(self.sx+self.board.GetWidth()/2+112, self.board.GetHeight()/2-16)
  480. self.nextbutton.SetText(localeInfo.UI_NEXTPAGE)
  481. self.nextbutton.SetEvent(self.NextQuestPageEvent, 1, n)
  482.  
  483. if cur_questpage_number != 1:
  484. cur_questpage_number = 1
  485.  
  486. def MakeEachButton(self, i):
  487. if self.skin == 3:
  488. button = BarButton("TOP_MOST",0x50000000, 0x50404040, 0x50606060)
  489. button.SetParent(self.board)
  490. button.SetSize(106,26)
  491. button.SetPosition(self.sx + self.board.GetWidth()/2+((i*2)-1)*56-56, self.sy+(event.GetLineCount(self.descIndex))*16+20+5)
  492. button.SetText("a")
  493. button.SetTextColor(0xff000000)
  494. else:
  495. i = i % 8
  496. button = BarButton("TOP_MOST")
  497. button.SetParent(self.board)
  498. button.SetSize(200,26)
  499. button.SetPosition(self.sx + self.board.GetWidth()/2-100,self.sy+(event.GetLineCount(self.descIndex)+i*2)*16+20+5)
  500. button.SetText("a")
  501. button.SetTextColor(0xffffffff)
  502. return button
  503.  
  504. def MakeNextPrevPageButton(self):
  505. button = BarButton("TOP_MOST")
  506. button.SetParent(self.board)
  507. button.SetSize(52,26)
  508. button.SetText("a")
  509. button.SetTextColor(0xffffffff)
  510. return button
  511.  
  512. def RefreshQuestPage(self, n):
  513. global cur_questpage_number
  514. global entire_questpage_number
  515. num = 0
  516. Showing_button_inx = (cur_questpage_number-1)* self.QUEST_BUTTON_MAX_NUM
  517.  
  518. while num < n:
  519. if num >= Showing_button_inx and num < Showing_button_inx + self.QUEST_BUTTON_MAX_NUM:
  520. self.btnAnswer[num].Show()
  521. else:
  522. self.btnAnswer[num].Hide()
  523. num = num + 1
  524.  
  525. if cur_questpage_number == 1:
  526. self.prevbutton.Hide()
  527. self.nextbutton.Show()
  528. elif cur_questpage_number == entire_questpage_number:
  529. self.prevbutton.Show()
  530. self.nextbutton.Hide()
  531. else:
  532. self.prevbutton.Show()
  533. self.nextbutton.Show()
  534.  
  535. def NextQuestPageEvent(self, one, n):
  536. global cur_questpage_number
  537. cur_questpage_number = cur_questpage_number + one
  538. self.RefreshQuestPage(n)
  539.  
  540. def PrevQuestPageEvent(self, one, n):
  541. global cur_questpage_number
  542. cur_questpage_number = cur_questpage_number - one
  543. self.RefreshQuestPage(n)
  544.  
  545. def ClickAnswerEvent(self, ai):
  546. event.SelectAnswer(self.descIndex, ai)
  547. self.nextbutton = None
  548. self.prevbutton = None
  549. self.CloseSelf()
  550.  
  551. def AppendQuestion(self, name, idx): # idx는 0부터 시작함. PythonEventManager.cpp line 881 참고. by 김준호
  552. if not self.btnAnswer:
  553. return
  554.  
  555. self.btnAnswer[idx].SetText(name)
  556. x, y= self.btnAnswer[idx].GetGlobalPosition()
  557.  
  558. self.btnAnswer[idx].SetEvent(self.ClickAnswerEvent, idx)
  559.  
  560. global entire_questbutton_number
  561.  
  562. Showing_button_idx = (cur_questpage_number-1)* self.QUEST_BUTTON_MAX_NUM
  563.  
  564. if Showing_button_idx <= idx and idx < Showing_button_idx + self.QUEST_BUTTON_MAX_NUM:
  565. self.btnAnswer[idx].Show()
  566. else:
  567. self.btnAnswer[idx].Hide()
  568. if entire_questbutton_number >= self.QUEST_BUTTON_MAX_NUM:
  569. self.nextbutton.Show()
  570.  
  571. def FadeOut(self, speed):
  572. self.eventCurtain.FadeOut(speed)
  573.  
  574. def FadeIn(self, speed):
  575. self.eventCurtain.FadeIn(speed)
  576.  
  577. def WhiteOut(self, speed):
  578. self.eventCurtain.WhiteOut(speed)
  579.  
  580. def WhiteIn(self, speed):
  581. self.eventCurtain.WhiteIn(speed)
  582.  
  583. def DoneEvent(self):
  584. self.nextCurtainMode = -1
  585. if self.SKIN_NONE == self.skin or self.SKIN_CINEMA == self.skin:
  586. self.CloseSelf()
  587.  
  588. def __GetQuestImageFileName(self, filename):
  589. if len(filename) > 1:
  590. if filename[1]!=':':
  591. filename = QUEST_BOARD_IMAGE_DIR+filename
  592.  
  593. return filename
  594.  
  595. # QUEST_INPUT
  596. def OnKeyDown(self, key):
  597. if self.btnAnswer == None:
  598. ## 선택문이 없고 '다음', '확인' 등의 일방 버튼만 있는 경우에 대한 처리
  599. if None != self.btnNext:
  600. if app.DIK_RETURN == key:
  601. self.OnPressEscapeKey()
  602.  
  603. if app.DIK_UP == key or app.DIK_DOWN == key:
  604. self.btnNext.ShowToolTip()
  605.  
  606. return True
  607.  
  608. focusIndex = self.focusIndex;
  609. lastFocusIndex = focusIndex;
  610.  
  611. #print "QuestDialog key down - focus, last : ", focusIndex, lastFocusIndex
  612.  
  613. answerCount = len(self.btnAnswer)
  614.  
  615. if app.DIK_DOWN == key:
  616. focusIndex += 1
  617.  
  618. if app.DIK_UP == key:
  619. focusIndex -= 1
  620.  
  621. if focusIndex < 0:
  622. focusIndex = answerCount - 1
  623.  
  624. if focusIndex >= answerCount:
  625. focusIndex = 0
  626.  
  627. self.focusIndex = focusIndex;
  628.  
  629. focusBtn = self.btnAnswer[focusIndex]
  630. lastFocusBtn = self.btnAnswer[lastFocusIndex]
  631.  
  632. if focusIndex != lastFocusIndex:
  633. focusBtn.ShowToolTip()
  634. lastFocusBtn.HideToolTip()
  635.  
  636. if app.DIK_RETURN == key:
  637. focusBtn.CallEvent()
  638.  
  639. return True
  640.  
  641. def OnPressEscapeKey(self):
  642.  
  643. # ESC키가 눌린 경우 "다음" 버튼을 누른 것과 같은 효과를 내도록 함.
  644. if None != self.btnNext:
  645. ##퀘스트문자들이 전부다 나왔을경우의 ESC버튼
  646. if event.BUTTON_TYPE_CANCEL == self.nextButtonType:
  647. event.SelectAnswer(self.descIndex, 254)
  648. self.CloseSelf()
  649. ## 아무 작업을 하지 않을때
  650. elif event.BUTTON_TYPE_DONE == self.nextButtonType:
  651. self.CloseSelf()
  652. ## 엔터나 다음화면으로 넘어가려고 할경우
  653. elif event.BUTTON_TYPE_NEXT == self.nextButtonType:
  654. event.SelectAnswer(self.descIndex, 254)
  655. self.CloseSelf()
  656. else:
  657. ## 도중에 꺼버리거나, ESC버튼이 나왓을경우
  658. event.SelectAnswer(self.descIndex, entire_questbutton_number -1 )
  659. self.nextbutton = None
  660. self.prevbutton = None
  661. self.OnCancel()
  662. return True
  663.  
  664. def OnIMEReturn(self):
  665. if self.needInputString:
  666. self.CloseSelf()
  667. return True
  668.  
  669. def OnIMEUpdate(self):
  670. if not self.needInputString:
  671. return
  672.  
  673. if not self.editLine:
  674. return
  675.  
  676. self.editLine.OnIMEUpdate()
  677.  
  678. def OnInput(self):
  679.  
  680. self.needInputString = True
  681.  
  682. event.AddEventSetLocalYPosition(self.descIndex, 5+10)
  683. yPos = event.GetEventSetLocalYPosition(self.descIndex)
  684.  
  685. self.editSlot = ui.SlotBar()
  686. self.editSlot.SetSize(200, 18)
  687. self.editSlot.SetPosition(0, yPos)
  688. self.editSlot.SetParent(self.board)
  689. self.editSlot.SetWindowHorizontalAlignCenter()
  690. self.editSlot.Show()
  691.  
  692. self.editLine = ui.EditLine()
  693. self.editLine.SetParent(self.editSlot)
  694. self.editLine.SetPosition(3, 3)
  695. self.editLine.SetSize(200, 17)
  696. self.editLine.SetMax(30)
  697. self.editLine.SetFocus()
  698. self.editLine.Show()
  699.  
  700. event.AddEventSetLocalYPosition(self.descIndex, 25+10)
  701.  
  702. self.MakeNextButton(event.BUTTON_TYPE_DONE)
  703.  
  704. self.editLine.UpdateRect()
  705. self.editSlot.UpdateRect()
  706. self.board.UpdateRect()
  707. # END_OF_QUEST_INPUT
  708.  
  709. def OnImage(self, x, y, filename, desc=""):
  710. filename = self.__GetQuestImageFileName(filename)
  711.  
  712. # IMAGE_EXCEPTION_BUG_FIX
  713. try:
  714. img = ui.MakeImageBox(self.board, filename, x, y)
  715. self.images.append(img)
  716. except RuntimeError:
  717. pass
  718. # END_OF_IMAGE_EXCEPTION_BUG_FIX
  719.  
  720. # QUEST_IMAGE
  721. def OnInsertItemIcon(self, type, idx, title, desc, index=0, total=1):
  722. if "item" != type:
  723. return
  724.  
  725. import item
  726. item.SelectItem(idx)
  727. filename = item.GetIconImageFileName()
  728.  
  729. underTitle = title
  730.  
  731. if not title and not desc:
  732. title = item.GetItemName()
  733. desc = item.GetItemDescription()
  734.  
  735. tempDesc = desc
  736. desc = ""
  737.  
  738. import grpText
  739. lineCount = grpText.GetSplitingTextLineCount(tempDesc, 25)
  740. for i in xrange(lineCount):
  741. desc += grpText.GetSplitingTextLine(tempDesc, 25, i) + "/"
  742.  
  743. desc = desc[:-1]
  744.  
  745. self.OnInsertImage(filename, underTitle, title, desc, index, total)
  746.  
  747. def OnInsertImage(self, filename, underTitle, title, desc, index=0, total=1):
  748.  
  749. if index == 0:
  750. event.AddEventSetLocalYPosition(self.descIndex, 24)
  751.  
  752. y = event.GetEventSetLocalYPosition(self.descIndex)
  753. xBoard, yBoard = self.board.GetGlobalPosition()
  754.  
  755. try:
  756. img = ToolTipImageBox()
  757. img.SetParent(self.board)
  758. img.LoadImage(filename)
  759. pos_x = (self.board.GetWidth() * (index + 1) / (total + 1)) - (img.GetWidth() / 2)
  760. img.SetPosition(pos_x, y)
  761. #img.SetWindowHorizontalAlignCenter()
  762. img.DestroyToolTip()
  763. if title and desc:
  764. img.CreateToolTip(self.board, title, desc, 0, yBoard + y + img.GetHeight())
  765. img.Show()
  766. self.images.append(img)
  767. except RuntimeError:
  768. pass
  769.  
  770. event.AddEventSetLocalYPosition(self.descIndex, img.GetHeight() - 20)
  771.  
  772. if underTitle:
  773. event.AddEventSetLocalYPosition(self.descIndex, 3)
  774. event.InsertTextInline(self.descIndex, underTitle, (self.board.GetWidth() * (index + 1) / (total + 1)))
  775. if index != total - 1:
  776. event.AddEventSetLocalYPosition(self.descIndex, -( 3 + 16 ))
  777. else:
  778. if index == total - 1:
  779. event.AddEventSetLocalYPosition(self.descIndex, 4)
  780.  
  781. if index != total - 1:
  782. event.AddEventSetLocalYPosition(self.descIndex, -(img.GetHeight() - 20))
  783.  
  784.  
  785. # END_OF_QUEST_IMAGE
  786.  
  787. def OnSize(self, width, height):
  788. self.board.SetSize(width, height)
  789.  
  790. def OnTitleImage(self, filename):
  791. img = ui.ImageBox("TOP_MOST")
  792.  
  793. try:
  794. img.SetWindowHorizontalAlignCenter()
  795. img.LoadImage(filename)
  796. img.SetPosition(0, wndMgr.GetScreenHeight() - (75/2) - (32/2))
  797. img.SetAlpha(0.0)
  798. img.Show()
  799. except RuntimeError:
  800. dbg.TraceError("QuestDialog.OnTitleImage(%s)" % filename)
  801. img.Hide()
  802.  
  803. self.imgTitle = img
  804. self.titleState = self.TITLE_STATE_APPEAR
  805. self.titleShowTime = app.GetTime()
  806.  
  807. def OnLeftImage(self, imgfile):
  808. imgfile = self.__GetQuestImageFileName(imgfile)
  809. if not self.imgLeft:
  810. self.imgLeft = ui.ExpandedImageBox("TOP_MOST")
  811. self.imgLeft.SetParent(self)
  812. self.imgLeft.SetPosition(0,0)
  813. bd = self.board
  814. bx, by = bd.GetLocalPosition()
  815. bd.SetPosition(160,by)
  816. if self.imgTop:
  817. tx, ty = self.imgTop.GetLocalPosition()
  818. self.imgTop.SetPosition(160,ty)
  819.  
  820. try:
  821. self.imgLeft.LoadImage(imgfile)
  822. self.imgLeft.SetSize(400,450)
  823. self.imgLeft.SetOrigin(self.imgLeft.GetWidth()/2,self.imgLeft.GetHeight()/2)
  824. self.imgLeft.Show()
  825. except RuntimeError:
  826. import dbg
  827. dbg.TraceError("QuestDialog.OnLeftImage(%s)" % imgfile)
  828. self.imgLeft.Hide()
  829.  
  830. def OnTopImage(self, imgfile):
  831. imgfile = self.__GetQuestImageFileName(imgfile)
  832.  
  833. bd = self.board
  834. bx, by = bd.GetLocalPosition()
  835. if not self.imgTop:
  836. self.imgTop = ui.ExpandedImageBox("TOP_MOST")
  837. self.imgTop.SetParent(self)
  838. bd.SetPosition(bx,190)
  839. self.imgTop.SetPosition(bx,10)
  840.  
  841. try:
  842. self.imgTop.LoadImage(imgfile)
  843. h = self.imgTop.GetHeight()
  844. if h>170:
  845. # need adjust board size
  846. bd.SetPosition(bx,20+h)
  847. bd.SetSize(350,420-h)
  848. self.imgTop.SetSize(350,h)
  849. else:
  850. self.imgTop.SetSize(350,170)
  851. bd.SetPosition(bx,190)
  852. bd.SetSize(350,250)
  853. self.imgTop.SetOrigin(self.imgTop.GetWidth()/2,self.imgTop.GetHeight()/2)
  854. self.imgTop.Show()
  855. except RuntimeError:
  856. dbg.TraceError("QuestDialog.OnTopImage(%s)" % imgfile)
  857. self.imgTop.Hide()
  858.  
  859. def OnBackgroundImage(self, imgfile):
  860. imgfile = self.__GetQuestImageFileName(imgfile)
  861. c = self.board
  862. w = c.GetWidth()
  863. h = c.GetHeight()
  864. px, py = c.GetLocalPosition()
  865. moved = 0
  866. if not self.imgBackground:
  867. self.imgBackground = ui.ExpandedImageBox("TOP_MOST")
  868. self.imgBackground.SetParent(c)
  869. self.imgBackground.SetPosition(0,0)
  870. self.imgBackground.LoadImage(imgfile)
  871. iw = self.imgBackground.GetWidth()
  872. ih = self.imgBackground.GetHeight()
  873. if self.skin==3:
  874. iw = 256
  875. ih = 333
  876. self.imgBackground.SetSize(iw,ih)
  877. if w < iw:
  878. px -= (iw-w)/2
  879. c.SetPosition(px,py)
  880. w = iw
  881. if h < ih:
  882. py -= (ih-h)/2
  883. c.SetPosition(px,py)
  884. h = ih
  885. if self.skin == 3:
  886. w=256
  887. h = 333
  888. self.sx = 0
  889. self.sy = 100
  890.  
  891. c.SetSize(w,h)
  892. c.HideInternal()
  893.  
  894. c.SetWindowHorizontalAlignCenter()
  895. c.SetWindowVerticalAlignCenter()
  896.  
  897. c.SetPosition(0,0)
  898. if self.skin==3:
  899. c.SetPosition(-190,0)
  900.  
  901. self.imgBackground.SetWindowHorizontalAlignCenter()
  902. self.imgBackground.SetWindowVerticalAlignCenter()
  903. self.imgBackground.SetPosition(0,0)
  904. self.imgBackground.Show()
Add Comment
Please, Sign In to add comment