316 lines
7.3 KiB
C#
316 lines
7.3 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using System;
|
|||
|
using XLua;
|
|||
|
using Module.Log;
|
|||
|
using UnityEngine.EventSystems;
|
|||
|
|
|||
|
public class LuaUIItemSelect : UIItemSelect {
|
|||
|
|
|||
|
public delegate void voidObject(object obj);
|
|||
|
public delegate void voidLuaUIItemSelect(LuaUIItemSelect obj);
|
|||
|
|
|||
|
public string luaScript;
|
|||
|
public LuaParamGO[] injectionGos;
|
|||
|
|
|||
|
internal static float lastGCTime = 0;
|
|||
|
internal const float GCInterval = 1; //1 second
|
|||
|
|
|||
|
private Action luaAwake;
|
|||
|
private Action luaStart;
|
|||
|
private Action luaUpdate;
|
|||
|
private Action luaFixedUpdate;
|
|||
|
private Action luaOnEnable;
|
|||
|
private Action luaOnDisable;
|
|||
|
private Action luaOnDestroy;
|
|||
|
|
|||
|
private Action luaRefresh;
|
|||
|
private voidObject luaRefreshWithTab;
|
|||
|
private Action luaOnPointerClick;
|
|||
|
private Action luaOnItemClick;
|
|||
|
private Action luaShow;
|
|||
|
private voidObject luaShowWithTab;
|
|||
|
|
|||
|
private Action luaSelect;
|
|||
|
private Action luaUnSelect;
|
|||
|
|
|||
|
private bool hasAwake = false;
|
|||
|
protected LuaTable scriptEnv;
|
|||
|
|
|||
|
public virtual void SetValue(string paramName, object value)
|
|||
|
{
|
|||
|
if (scriptEnv != null)
|
|||
|
{
|
|||
|
scriptEnv.Set(paramName, value);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public virtual void SetValueAtPath(string paramName, object value)
|
|||
|
{
|
|||
|
CallScriptFuncAtPath("SetValue", paramName, value);
|
|||
|
}
|
|||
|
|
|||
|
public virtual object GetValueAtPath(string valueName)
|
|||
|
{
|
|||
|
if (scriptEnv != null)
|
|||
|
{
|
|||
|
return scriptEnv.GetInPath<object>(luaScript + "." + valueName);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public virtual object GetValue(string valueName)
|
|||
|
{
|
|||
|
if (scriptEnv != null)
|
|||
|
{
|
|||
|
return scriptEnv.Get<object>(valueName);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Init()
|
|||
|
{
|
|||
|
if (luaScript == null)
|
|||
|
return;
|
|||
|
|
|||
|
if (scriptEnv == null)
|
|||
|
{
|
|||
|
scriptEnv = LuaMain.luaEnv.NewTable();
|
|||
|
}
|
|||
|
|
|||
|
LuaTable meta = LuaMain.luaEnv.NewTable();
|
|||
|
meta.Set("__index", LuaMain.luaEnv.Global);
|
|||
|
scriptEnv.SetMetaTable(meta);
|
|||
|
meta.Dispose();
|
|||
|
|
|||
|
scriptEnv.Set("self", this.gameObject);
|
|||
|
foreach (var injection in injectionGos)
|
|||
|
{
|
|||
|
scriptEnv.Set(injection.name, injection.value);
|
|||
|
}
|
|||
|
|
|||
|
TextAsset script = LoadAssetBundle.Instance.LoadScriptAsset(luaScript);
|
|||
|
LuaMain.luaEnv.DoString(script.text, luaScript, scriptEnv);
|
|||
|
|
|||
|
// 生命周期
|
|||
|
luaAwake = scriptEnv.GetInPath<Action>(luaScript + ".Awake");
|
|||
|
luaStart = scriptEnv.GetInPath<Action>(luaScript + ".Start");
|
|||
|
luaUpdate = scriptEnv.GetInPath<Action>(luaScript + ".Update");
|
|||
|
luaFixedUpdate = scriptEnv.GetInPath<Action>(luaScript + ".FixedUpdate");
|
|||
|
luaOnEnable = scriptEnv.GetInPath<Action>(luaScript + ".OnEnable");
|
|||
|
luaOnDisable = scriptEnv.GetInPath<Action>(luaScript + ".OnDisable");
|
|||
|
luaOnDestroy = scriptEnv.GetInPath<Action>(luaScript + ".OnDestroy");
|
|||
|
|
|||
|
// UIItembase
|
|||
|
luaRefresh = scriptEnv.GetInPath<Action>(luaScript + ".Refresh");
|
|||
|
luaRefreshWithTab = scriptEnv.GetInPath<voidObject>(luaScript + ".RefreshWithTab");
|
|||
|
luaOnPointerClick = scriptEnv.GetInPath<Action>(luaScript + ".OnPointerClick");
|
|||
|
luaOnItemClick = scriptEnv.GetInPath<Action>(luaScript + ".OnItemClick");
|
|||
|
luaShow = scriptEnv.GetInPath<Action>(luaScript + ".Show");
|
|||
|
luaShowWithTab = scriptEnv.GetInPath<voidObject>(luaScript + ".ShowWithTab");
|
|||
|
|
|||
|
// UIItemSelect
|
|||
|
luaSelect = scriptEnv.GetInPath<Action>(luaScript + ".Select");
|
|||
|
luaUnSelect = scriptEnv.GetInPath<Action>(luaScript + ".UnSelect");
|
|||
|
}
|
|||
|
|
|||
|
public override void Awake()
|
|||
|
{
|
|||
|
if (hasAwake)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
hasAwake = true;
|
|||
|
|
|||
|
Init();
|
|||
|
|
|||
|
if (luaAwake != null)
|
|||
|
{
|
|||
|
luaAwake();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public virtual void Start()
|
|||
|
{
|
|||
|
if (luaStart != null)
|
|||
|
{
|
|||
|
luaStart();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public virtual void FixedUpdate()
|
|||
|
{
|
|||
|
if (luaFixedUpdate != null)
|
|||
|
{
|
|||
|
luaFixedUpdate();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected virtual void Update()
|
|||
|
{
|
|||
|
if (luaUpdate != null)
|
|||
|
{
|
|||
|
luaUpdate();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected virtual void OnEnable()
|
|||
|
{
|
|||
|
#if UNITY_EDITOR
|
|||
|
// 编辑器模式下,重新打开UI,重新加载脚本,便于调试
|
|||
|
//Init();
|
|||
|
//hasAwake = true;
|
|||
|
//if (luaAwake != null)
|
|||
|
//{
|
|||
|
// luaAwake();
|
|||
|
//}
|
|||
|
#endif
|
|||
|
if (luaOnEnable != null)
|
|||
|
{
|
|||
|
luaOnEnable();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected virtual void OnDisable()
|
|||
|
{
|
|||
|
if (luaOnDisable != null)
|
|||
|
{
|
|||
|
luaOnDisable();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected virtual void OnDestroy()
|
|||
|
{
|
|||
|
if (luaOnDestroy != null)
|
|||
|
{
|
|||
|
luaOnDestroy();
|
|||
|
}
|
|||
|
|
|||
|
luaAwake = null;
|
|||
|
luaStart = null;
|
|||
|
luaUpdate = null;
|
|||
|
luaFixedUpdate = null;
|
|||
|
luaOnEnable = null;
|
|||
|
luaOnDisable = null;
|
|||
|
luaOnDestroy = null;
|
|||
|
luaRefresh = null;
|
|||
|
luaRefreshWithTab = null;
|
|||
|
luaOnPointerClick = null;
|
|||
|
luaOnItemClick = null;
|
|||
|
luaShow = null;
|
|||
|
luaShowWithTab = null;
|
|||
|
luaSelect = null;
|
|||
|
luaUnSelect = null;
|
|||
|
|
|||
|
scriptEnv.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
public virtual void CallScriptFuncAtPath(string funcName, params object[] funcParam)
|
|||
|
{
|
|||
|
var func = scriptEnv.GetInPath<LuaFunction>(luaScript + "." + funcName);
|
|||
|
if (func == null)
|
|||
|
{
|
|||
|
LogModule.ErrorLog("there is no script func name:" + funcName);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
func.Call(funcParam);
|
|||
|
}
|
|||
|
|
|||
|
#region ItemBase
|
|||
|
|
|||
|
public override void Show()
|
|||
|
{
|
|||
|
if (luaShow != null)
|
|||
|
{
|
|||
|
luaShow.Invoke();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Show(Hashtable hash)
|
|||
|
{
|
|||
|
System.Object info = hash["InitObj"];
|
|||
|
ShowWithTab(info);
|
|||
|
}
|
|||
|
|
|||
|
public virtual void ShowWithTab(System.Object luaData)
|
|||
|
{
|
|||
|
if (luaShowWithTab != null)
|
|||
|
{
|
|||
|
_InitInfo = luaData;
|
|||
|
luaShowWithTab.Invoke(luaData);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Refresh()
|
|||
|
{
|
|||
|
if (luaRefresh != null)
|
|||
|
{
|
|||
|
luaRefresh.Invoke();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public virtual void Refresh(System.Object luaData)
|
|||
|
{
|
|||
|
if (luaRefreshWithTab != null)
|
|||
|
{
|
|||
|
luaRefreshWithTab.Invoke(luaData);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void OnPointerClick(PointerEventData eventData)
|
|||
|
{
|
|||
|
OnItemClick();
|
|||
|
|
|||
|
ButtonPlaySound btnPlay = GetComponent<ButtonPlaySound>();
|
|||
|
if (btnPlay != null)
|
|||
|
btnPlay.PlaySound();
|
|||
|
}
|
|||
|
|
|||
|
public override void OnItemClick()
|
|||
|
{
|
|||
|
if (_ClickEvent != null)
|
|||
|
{
|
|||
|
_ClickEvent(_InitInfo);
|
|||
|
}
|
|||
|
|
|||
|
if (_PanelClickEvent != null)
|
|||
|
{
|
|||
|
_PanelClickEvent(this);
|
|||
|
}
|
|||
|
|
|||
|
if(luaOnItemClick != null)
|
|||
|
{
|
|||
|
luaOnItemClick.Invoke();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region ItemSelect
|
|||
|
public override void Selected()
|
|||
|
{
|
|||
|
if(luaSelect != null)
|
|||
|
{
|
|||
|
luaSelect();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void UnSelected()
|
|||
|
{
|
|||
|
if(luaUnSelect != null)
|
|||
|
{
|
|||
|
luaUnSelect();
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|