You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			250 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			250 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using UnityEngine; | ||
|  | using Game.Common; | ||
|  | 
 | ||
|  | namespace Game | ||
|  | { | ||
|  |     public class PageDrama : UIPageBase<ViewDrama> | ||
|  |     { | ||
|  |         private string _nameLeft = ""; | ||
|  |         private string _nameRight = ""; | ||
|  |         private const float ShowCharWaitTimeMax = 0.02f; | ||
|  |         private float _showCharWaitTime; | ||
|  |         private int _textNumNow; | ||
|  |         private int _textNumMax; | ||
|  |         private string _textNow = ""; | ||
|  |         private int _choiceNow = 0; | ||
|  |         private int _choiceMax = 0; | ||
|  |         private bool _isChoiceOpen = false; | ||
|  |         public PageDrama() | ||
|  |         { | ||
|  |         } | ||
|  |         protected override void OnCreate() | ||
|  |         { | ||
|  |             CreateUI(true); | ||
|  |         } | ||
|  |         protected override void OnDestroy() | ||
|  |         { | ||
|  |         } | ||
|  |         protected override void OnOpen() | ||
|  |         { | ||
|  |             EventManager.Instance.AddEvent<PDialog>(EEvent.Dialog, OnDialog); | ||
|  |             EventManager.Instance.AddEvent<PDialogChoice>(EEvent.DialogChoice, OnDialogChoice); | ||
|  |             EventManager.Instance.AddEvent(EEvent.DialogEnd, OnDialogEnd); | ||
|  |             Util.SetControl(false); | ||
|  |         } | ||
|  |         protected override void OnClose() | ||
|  |         { | ||
|  |             EventManager.Instance.RemoveEvent<PDialog>(EEvent.Dialog, OnDialog); | ||
|  |             EventManager.Instance.RemoveEvent<PDialogChoice>(EEvent.DialogChoice, OnDialogChoice); | ||
|  |             EventManager.Instance.RemoveEvent(EEvent.DialogEnd, OnDialogEnd); | ||
|  |             Util.SetControl(true); | ||
|  |             View.m_c1.selectedIndex = 0; | ||
|  |             View.m_c4.selectedIndex = 0; | ||
|  |             View.m_c2.selectedIndex = 0; | ||
|  |             View.m_c3.selectedIndex = 0; | ||
|  |             View.m_c5.selectedIndex = 0; | ||
|  |             _isChoiceOpen = false; | ||
|  |             _choiceMax = 0; | ||
|  |             _choiceNow = 0; | ||
|  |             _nameLeft = ""; | ||
|  |             _nameRight = ""; | ||
|  |             ShowText(""); | ||
|  |         } | ||
|  |         public override void Update() | ||
|  |         { | ||
|  |             if (_textNumNow == _textNumMax) | ||
|  |             { | ||
|  |                 View.m_content.m_c1.selectedIndex = 1; | ||
|  |                 return; | ||
|  |             } | ||
|  |             if (_showCharWaitTime > 0) | ||
|  |             { | ||
|  |                 _showCharWaitTime -= Time.deltaTime; | ||
|  |                 return; | ||
|  |             } | ||
|  |             _textNumNow++; | ||
|  |             _showCharWaitTime = ShowCharWaitTimeMax; | ||
|  |             View.m_content.m_text.text = _textNow.Substring(0, _textNumNow); | ||
|  |         } | ||
|  |         private void ShowText(string text) | ||
|  |         { | ||
|  |             _textNow = text; | ||
|  |             _showCharWaitTime = 0; | ||
|  |             _textNumMax = text.Length; | ||
|  |             _textNumNow = 0; | ||
|  |             View.m_content.m_c1.selectedIndex = 0; | ||
|  |         } | ||
|  |         private void RefreshChoiceOpen() | ||
|  |         { | ||
|  |             View.m_c4.selectedIndex = _isChoiceOpen ? 0 : 1; | ||
|  |             View.m_c6.selectedIndex = _isChoiceOpen ? 0 : 1; | ||
|  |             View.m_c5.selectedIndex = _isChoiceOpen ? 1 : 0; | ||
|  |         } | ||
|  |         private void RefreshChoiceSelecet() | ||
|  |         { | ||
|  |             var choiceList = View.m_choice.GetChildren(); | ||
|  |             for (int i = 0; i < choiceList.Length; i++) | ||
|  |             { | ||
|  |                 var choice = choiceList[i] as ViewDramaChoiceItem; | ||
|  |                 choice.m_c1.selectedIndex = i == _choiceNow ? 1 : 0; | ||
|  |             } | ||
|  |         } | ||
|  |         private void OnDialogChoice(PDialogChoice param) | ||
|  |         { | ||
|  |             var choiceList = View.m_choice; | ||
|  |             choiceList.RemoveChildrenToPool(); | ||
|  |             _choiceMax = param.Choices.Count; | ||
|  |             _choiceNow = 0; | ||
|  |             _isChoiceOpen = false; | ||
|  |             foreach (var item in param.Choices) | ||
|  |             { | ||
|  |                 var choiceItem = choiceList.AddItemFromPool() as ViewDramaChoiceItem; | ||
|  |                 choiceItem.m_text.text = item; | ||
|  |             } | ||
|  |             RefreshChoiceSelecet(); | ||
|  | 
 | ||
|  |         } | ||
|  |         private void OnDialog(PDialog param) | ||
|  |         { | ||
|  |             var isRight = false; | ||
|  |             var needRefresh = false; | ||
|  |             var name = param.Name; | ||
|  |             //优先检测已经存在的 | ||
|  |             if (_nameLeft == name) | ||
|  |             { | ||
|  |                 isRight = false; | ||
|  |             } | ||
|  |             else if (_nameRight == name) | ||
|  |             { | ||
|  |                 isRight = true; | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 needRefresh = true; | ||
|  |                 //检测空位置 | ||
|  |                 if (string.IsNullOrEmpty(_nameLeft)) | ||
|  |                 { | ||
|  |                     isRight = false; | ||
|  |                 } | ||
|  |                 else if (string.IsNullOrEmpty(_nameRight)) | ||
|  |                 { | ||
|  |                     isRight = true; | ||
|  |                 } | ||
|  |                 else | ||
|  |                 { | ||
|  |                     //没有空位置 占左边位置 | ||
|  |                     isRight = false; | ||
|  |                 } | ||
|  |             } | ||
|  |             if (isRight) | ||
|  |             { | ||
|  |                 _nameRight = name; | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 _nameLeft = name; | ||
|  |             } | ||
|  | 
 | ||
|  |             var hasLeft = !string.IsNullOrEmpty(_nameLeft); | ||
|  |             var hasRight = !string.IsNullOrEmpty(_nameRight); | ||
|  | 
 | ||
|  |             //左右 | ||
|  |             View.m_c1.selectedIndex = isRight ? 2 : 1; | ||
|  |             //显隐 | ||
|  |             View.m_c4.selectedIndex = 1; | ||
|  |             View.m_c2.selectedIndex = hasLeft ? 1 : 0; | ||
|  |             View.m_c3.selectedIndex = hasRight ? 1 : 0; | ||
|  |             //刷新文本 | ||
|  |             View.m_nameLable.m_text.text = param.Name; | ||
|  |             ShowText(param.Content); | ||
|  |             //刷新立绘 | ||
|  |             if (needRefresh) | ||
|  |             { | ||
|  |                 if (isRight) | ||
|  |                 { | ||
|  |                     View.m_picRight.texture = Texture(param.Pic); | ||
|  |                 } | ||
|  |                 else | ||
|  |                 { | ||
|  |                     View.m_picLeft.texture = Texture(param.Pic); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         private void OnDialogEnd() | ||
|  |         { | ||
|  |             UIManager.Instance.Close(); | ||
|  |         } | ||
|  |         protected override void OnInput(PPlayerInput context) | ||
|  |         { | ||
|  |             if (context.Action == EKeyActionType.Press) | ||
|  |             { | ||
|  |                 if (context.Key == EFunctionKey.Menu) | ||
|  |                 { | ||
|  |                     Util.EndDrama(); | ||
|  |                 } | ||
|  |                 if (context.Key == EFunctionKey.Up || context.Key == EFunctionKey.Down) | ||
|  |                 { | ||
|  |                     if (!_isChoiceOpen) | ||
|  |                     { | ||
|  |                         return; | ||
|  |                     } | ||
|  |                     var newIndex = _choiceNow; | ||
|  |                     if (context.Key == EFunctionKey.Up) | ||
|  |                     { | ||
|  |                         newIndex--; | ||
|  |                     } | ||
|  |                     else | ||
|  |                     { | ||
|  |                         newIndex++; | ||
|  |                     } | ||
|  |                     _choiceNow = (newIndex + _choiceMax) % _choiceMax; | ||
|  |                     RefreshChoiceSelecet(); | ||
|  |                 } | ||
|  |                 if (context.Key == EFunctionKey.Jump) | ||
|  |                 { | ||
|  |                     if (_choiceMax != 0) | ||
|  |                     { | ||
|  |                         //选择 | ||
|  |                         if (!_isChoiceOpen) | ||
|  |                         { | ||
|  |                             _isChoiceOpen = true; | ||
|  |                             RefreshChoiceOpen(); | ||
|  |                             var c1Index = View.m_c1.selectedIndex; | ||
|  |                             if (c1Index != 0) | ||
|  |                             { | ||
|  |                                 View.m_c1.selectedIndex = c1Index == 1 ? 2 : 1; | ||
|  |                             } | ||
|  |                         } | ||
|  |                         else | ||
|  |                         { | ||
|  |                             _choiceMax = 0; | ||
|  |                             _isChoiceOpen = false; | ||
|  |                             RefreshChoiceOpen(); | ||
|  |                             Util.NextDramaChoice(_choiceNow); | ||
|  |                         } | ||
|  |                     } | ||
|  |                     else | ||
|  |                     { | ||
|  |                         //播放 | ||
|  |                         if (_textNumMax != _textNumNow) | ||
|  |                         { | ||
|  |                             _textNumNow = _textNumMax - 1; | ||
|  |                             _showCharWaitTime = 0; | ||
|  |                         } | ||
|  |                         else | ||
|  |                         { | ||
|  |                             Util.NextDrama(); | ||
|  |                         } | ||
|  |                     } | ||
|  | 
 | ||
|  | 
 | ||
|  |                 } | ||
|  |                 if (context.Key == EFunctionKey.Bag) | ||
|  |                 { | ||
|  |                     UIManager.Instance.Close(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |