StoryTalkItemCtr.lua 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. local StoryTalkItemCtr = {}
  2. function StoryTalkItemCtr:SetData(wnd, item, logicData)
  3. local curCfgData = logicData[1]
  4. local curTalk = logicData[2]
  5. local bgSprite = logicData[3]
  6. local isCur = logicData[4]
  7. local listItem = logicData[5]
  8. --local roleImage = logicData[5]
  9. item.talkLft:SetActive(curTalk.SpeakSite == 1)
  10. item.talkRgt:SetActive(curTalk.SpeakSite == 2)
  11. local talkItem = curTalk.SpeakSite == 1 and item.talkLft or item.talkRgt
  12. talkItem.next:SetActive(isCur)
  13. local roleName = curTalk.SpeakSite == 1 and curTalk.LeftName or curTalk.RightName
  14. if roleName == "player" then
  15. talkItem.text.text.text = ManagerContainer.DataMgr.UserData:GetUserNickname()
  16. else
  17. talkItem.text.text.text = I18N.T(roleName)
  18. end
  19. talkItem.bg.image.sprite = bgSprite
  20. local content = I18N.T(curTalk.SpeakId)
  21. local speed = 0.05
  22. if curTalk.WordTime > 0 then
  23. speed = curTalk.WordTime*0.001
  24. end
  25. talkItem.dsc.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, 39);
  26. talkItem.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, 185);
  27. item.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, 185);
  28. --item.layoutElement.preferredHeight = 185
  29. local length = StringUtil.GetTextLeng(talkItem.dsc.text, content)
  30. local idx = math.floor(length / 728)
  31. if idx > 0 then
  32. local increase = idx * 47
  33. if increase > talkItem.dsc.rectTransform.sizeDelta.y - 39 then
  34. local size = talkItem.dsc.rectTransform.sizeDelta.y + increase
  35. if size > talkItem.dsc.rectTransform.sizeDelta.y then
  36. talkItem.dsc.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, size);
  37. end
  38. size = talkItem.rectTransform.sizeDelta.y + increase
  39. if size > talkItem.rectTransform.sizeDelta.y then
  40. talkItem.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, size);
  41. end
  42. size = item.rectTransform.sizeDelta.y + increase
  43. --item.layoutElement.preferredHeight = size
  44. item.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, size);
  45. wnd.scrollView.loopListView:OnItemSizeChanged(listItem.ItemIndex)
  46. end
  47. end
  48. if not isCur then
  49. talkItem.dsc.text.text = content
  50. item.canvasGroup.alpha = 0.5
  51. talkItem.transform.localPosition = Vector3.zero
  52. else
  53. local pos = item.transform.localPosition
  54. pos.y = -30
  55. item.transform.localPosition = pos
  56. pos = talkItem.transform.localPosition
  57. pos.x = curTalk.SpeakSite == 1 and -300 or 300
  58. talkItem.transform.localPosition = pos
  59. talkItem.dsc.text.text = ""
  60. item.canvasGroup.alpha = 1
  61. talkItem.transform:DOLocalMoveX(0, 0.3):SetAutoKill()
  62. wnd.lastNext = talkItem.next
  63. wnd.curTalkContent = content
  64. wnd.curTalkDsc = talkItem.dsc.text
  65. --wnd.curTalkDscContent = talkItem.dsc.contentSizeFitter
  66. local duration = #content * speed
  67. --DG.Tweening.DOTween.Kill(curTalkDsc)
  68. wnd.curTalkDsc.text = ""
  69. --LogError("Add next4444")
  70. wnd.curTalkTweener = wnd.curTalkDsc:DOText(content, duration):OnComplete(function()
  71. wnd.curTalkOverStatus = true
  72. end):SetAutoKill()
  73. wnd.curTalkDsc.transform:DOScaleZ(1, curCfgData.PlayInterval):OnComplete(function()
  74. --LogError("next4444")
  75. wnd:PlayStoryPerform()
  76. end):SetAutoKill()
  77. end
  78. end
  79. return StoryTalkItemCtr