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
|
||
}
|