using FairyGUI;
using System.Collections;
using UnityEngine;
namespace GFGGame
{
///
/// 视图基类,界面不可以直接继承
///
public class UIView : IUIView
{
private string _descFilePath;
private EnumViewAnimationType _viewAnimationType = EnumViewAnimationType.None;
///
/// 打开视图传递的参数
///
public object viewData { get; set; }
public string viewName { get; set; }
///
/// 设置视图组件
///
public virtual GComponent viewCom { get; set; }
///
/// 设置是否全屏自适应
///
public bool isfullScreen { get; set; }
///
/// FairyGUI包名
///
protected string packageName
{
set
{
_descFilePath = ResPathUtil.GetUIPackagePath(value);
GFGUIPackage.AddPackage(_descFilePath);
}
}
///
/// 是否显示中
///
public bool isShowing
{
get { return viewCom != null && viewCom.onStage; }
}
///
/// 设置视图显示和隐藏的动画类型
///
protected EnumViewAnimationType viewAnimationType
{
set
{
_viewAnimationType = value;
}
}
public UIView()
{
//
Init();
OnInit();
if (viewCom != null)
{
viewCom.onAddedToStage.Add(__addedToStage);
viewCom.onRemovedFromStage.Add(__removeFromStage);
}
}
public virtual void Dispose()
{
if (viewCom != null)
{
viewCom.RemoveFromParent();
viewCom.Dispose();
viewCom = null;
}
if (_descFilePath != null)
{
GFGUIPackage.RemovePackage(_descFilePath);
}
_descFilePath = null;
viewData = null;
ViewManager.ClearUIView(viewName);
}
virtual protected void Init()
{
}
virtual protected void OnInit()
{
}
///
/// 界面打开状态刷新界面
///
virtual public void Refresh()
{
object temp = viewData;
this.OnHide();
this.viewData = temp;
this.OnShown();
}
public virtual void Show()
{
}
public virtual void Hide()
{
DoHideAnimation();
}
virtual protected void OnShown()
{
if (isfullScreen)
{
MakeFullScreen(viewCom);
}
AddEventListener();
// if (GuideController.IsGuide())
// {
// Timers.inst.AddUpdate(UpdateToCheckGuide);
// }
}
virtual protected void OnHide()
{
viewData = null;
RemoveEventListener();
// Timers.inst.Remove(UpdateToCheckGuide);
TryCompleteGuide();
}
virtual protected void RemoveEventListener()
{
}
virtual protected void AddEventListener()
{
}
virtual protected void UpdateToCheckGuide(object param)
{
}
virtual protected void TryCompleteGuide()
{
}
protected virtual void DoShowAnimation()
{
OnShown();
switch (_viewAnimationType)
{
case EnumViewAnimationType.ZOOM_CENTER:
ViewAnimationFactory.ZoomInCenter(this.viewCom);
break;
default:
break;
}
}
protected virtual void DoHideAnimation()
{
switch (_viewAnimationType)
{
case EnumViewAnimationType.ZOOM_CENTER:
ViewAnimationFactory.ZoomOutCenter(this.viewCom, this.OnDoHideAnimationCompleted);
break;
default:
this.OnDoHideAnimationCompleted();
break;
}
}
protected virtual void OnDoHideAnimationCompleted()
{
if (this.viewCom != null)
{
this.viewCom.RemoveFromParent();
}
}
private void MakeFullScreen(GObject ui)
{
ui.MakeFullScreen();
ui.AddRelation(GRoot.inst, RelationType.Size);
}
void __addedToStage()
{
DoShowAnimation();
}
void __removeFromStage()
{
OnHide();
Dispose();
}
}
}