Esempio n. 1
0
    /// <summary>
    /// 清除自定义敌机的函数
    /// </summary>
    private void UnrefCustomizedEnemy()
    {
        // 敌机初始化函数
        foreach (KeyValuePair <string, CustomizedDefineData> kv in _customizedEnemyDefMap)
        {
            string customizedEnemyName   = kv.Key;
            CustomizedDefineData defData = kv.Value;
            if (defData.initFuncRef != 0)
            {
                _luaState.L_Unref(LuaDef.LUA_REGISTRYINDEX, defData.initFuncRef);
#if LogLuaFuncRef
                _luaRefDic.Remove(defData.initFuncRef);
                Logger.Log("Unref init function of enemy " + customizedEnemyName + " ref = " + defData.initFuncRef);
#endif
            }
            if (defData.onKillFuncRef != 0)
            {
                _luaState.L_Unref(LuaDef.LUA_REGISTRYINDEX, defData.onKillFuncRef);
#if LogLuaFuncRef
                _luaRefDic.Remove(defData.onKillFuncRef);
                Logger.Log("Unref onEliminate function of enemy " + customizedEnemyName + " ref = " + defData.onKillFuncRef);
#endif
            }
        }
        _customizedEnemyDefMap.Clear();
    }
Esempio n. 2
0
    private void RefCustomizedEnemy()
    {
        _luaState.GetField(-1, "CustomizedEnemyTable");
        string customizedName;

        if (!_luaState.IsTable(-1))
        {
            Logger.Log("field CustomizedTable is not a table!");
            _luaState.Pop(1);
            return;
        }
        _luaState.PushNil();
        while (_luaState.Next(-2))
        {
            customizedName = _luaState.ToString(-2);
            if (!_luaState.IsTable(-1))
            {
                Logger.Log("sub field " + customizedName + " is not a table!");
            }
            CustomizedDefineData defData = new CustomizedDefineData();
            _luaState.GetField(-1, "Init");
            if (!_luaState.IsFunction(-1))
            {
                Logger.Log("sub field Init is not a function!");
                defData.initFuncRef = 0;
                _luaState.Pop(1);
            }
            else
            {
                defData.initFuncRef = _luaState.L_Ref(LuaDef.LUA_REGISTRYINDEX);
#if LogLuaFuncRef
                Logger.Log("InitFunction in Customized Class " + customizedName + " is Ref , ref = " + defData.initFuncRef);
                _luaRefDic.Add(defData.initFuncRef, defData.initFuncRef);
#endif
            }
            _luaState.GetField(-1, "OnKill");
            if (_luaState.IsFunction(-1))
            {
                defData.onKillFuncRef = _luaState.L_Ref(LuaDef.LUA_REGISTRYINDEX);
#if LogLuaFuncRef
                Logger.Log("OnKillFunction in Customized Enemy " + customizedName + " is Ref , ref = " + defData.onKillFuncRef);
                _luaRefDic.Add(defData.onKillFuncRef, defData.onKillFuncRef);
#endif
            }
            else
            {
                defData.onKillFuncRef = 0;
                _luaState.Pop(1);
            }
            _customizedEnemyDefMap.Add(customizedName, defData);
            _luaState.Pop(1);
        }
        _luaState.Pop(1);
    }
Esempio n. 3
0
    private void RefBossTable()
    {
        _luaState.GetField(-1, "BossTable");
        string bossName;

        if (!_luaState.IsTable(-1))
        {
            Logger.Log("Return value BossTable is not a table!");
        }
        _luaState.PushNil();
        while (_luaState.Next(-2))
        {
            bossName = _luaState.ToString(-2);
            if (!_luaState.IsTable(-1))
            {
                Logger.Log("Boss " + bossName + " in BossTable is invalid");
            }
            // init
            _luaState.GetField(-1, "Init");
            if (!_luaState.IsFunction(-1))
            {
                Logger.Log("Init Funciton of Boss" + bossName + " is invalid");
            }
            // boss与enemy公用一个DefMap
            CustomizedDefineData defData = new CustomizedDefineData();
            defData.initFuncRef = _luaState.L_Ref(LuaDef.LUA_REGISTRYINDEX);
            _customizedEnemyDefMap.Add(bossName, defData);
            // 弹出table
            _luaState.Pop(1);
#if LogLuaFuncRef
            _luaRefDic.Add(initRef, initRef);
            Logger.Log("Boss " + bossName + " is ref.Init funcRef = " + initRef);
#endif
        }
        //弹出BossTable
        _luaState.Pop(1);
    }