Пример #1
0
        private static void CallRaw(string identifier, params Parameter[] parameters)
        {
            // push arguments
            foreach (var parameter in parameters.Reverse())
            {
                parameter.PushValue();
            }

            // call the function
            if (!GameInterface.Script_Call(identifier.ToLowerInvariant(), _entRef, parameters.Length))
            {
                SetEntRef(-1);
                throw new ScriptException("Could not find function " + identifier);
            }

            // reset the entref to 0
            SetEntRef(-1);

            // check for return values
            _returnValue = null;

            if (GameInterface.Notify_NumArgs() == 1)
            {
                switch (GameInterface.Script_GetType(0))
                {
                case VariableType.Entity:
                    _returnValue = Entity.GetEntity(GameInterface.Script_GetEntRef(0));
                    break;

                case VariableType.Integer:
                    _returnValue = GameInterface.Script_GetInt(0);
                    break;

                case VariableType.Float:
                    _returnValue = GameInterface.Script_GetFloat(0);
                    break;

                case VariableType.String:
                    _returnValue = GameInterface.Script_GetString(0);
                    break;

                case VariableType.Vector:
                    Vector3 outValue;
                    GameInterface.Script_GetVector(0, out outValue);
                    _returnValue = outValue;
                    break;
                }
            }

            GameInterface.Script_CleanReturnStack();
        }
Пример #2
0
        public T GetField <T>(string name)
        {
            name = name.ToLowerInvariant();

            if (!_fieldNames.ContainsKey(name))
            {
                return((T)_privateFields[name]);
            }

            object returnValue = null;
            int    fieldID     = _fieldNames[name];

            GameInterface.Script_GetField(_entRef, fieldID);

            switch (GameInterface.Script_GetType(0))
            {
            case VariableType.Integer:
                returnValue = GameInterface.Script_GetInt(0);
                break;

            case VariableType.Float:
                returnValue = GameInterface.Script_GetFloat(0);
                break;

            case VariableType.String:
                returnValue = GameInterface.Script_GetString(0);
                break;

            case VariableType.Vector:
                Vector3 outValue;
                GameInterface.Script_GetVector(0, out outValue);
                returnValue = outValue;
                break;
            }

            GameInterface.Script_CleanReturnStack();

            return((T)Convert.ChangeType(returnValue, typeof(T)));
        }