Ejemplo n.º 1
0
        /// <summary>
        /// Sets a field in the inner Lua table.
        /// </summary>
        /// <param name="key">A double, string or bool value.</param>
        /// <returns>A double, string, bool, LuaDataContainer or LuaDataProvider.</returns>
        internal object this[object key]
        {
            set
            {
                // Dewraps the value if its a container or provider.
                var v = _dataFactory.GetNativeValueFromValue(value);

                // Sets the field.
                _luaState.SafeSetField(_luaTable, key, v);
            }
        }
Ejemplo n.º 2
0
        private IList <object> ExecuteCore(params object[] args)
        {
            // Conforms the parameters: wrappers from the Data layer
            // are converted to their native equivalents.
            // The self table is added if it is specified.
            List <LuaValue> parameters = new List <LuaValue>();

            if (_selfTable != null)
            {
                parameters.Add(_selfTable);
            }
            foreach (var item in args)
            {
                parameters.Add(_dataFactory.GetNativeValueFromValue(item));
            }

            // Runs the provider and gets the list of objects.
            IList <object> retValues;

            try
            {
                retValues = _luaState.SafeCallRaw(_luaFunction, parameters.ToArray());
            }
            catch (Exception e)
            {
                throw new InvalidOperationException("An exception occured while executing the provider.", e);
            }

            // Converts the different values to types from the data layer.
            List <object> ret = new List <object>();

            foreach (var item in retValues)
            {
                if (item is LuaValue)
                {
                    ret.Add(_dataFactory.GetValueFromNativeValue((LuaValue)item));
                }
                else
                {
                    ret.Add(item);
                }
            }

            // Returns the list.
            return(ret);
        }