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#
		
	
| 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();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |