Exemplo n.º 1
0
        public static void SetVar(int instance, string name, int i1, int i2, Value val)
        {
            switch ((InstanceTarget)instance)
            {
            case InstanceTarget.Self:
                Current.SetLocalVar(name, i1, i2, val);
                break;

            case InstanceTarget.Other:
                if (Other == null)
                {
                    throw new ProgramError(Error.CannotAssign);
                }
                Other.SetLocalVar(name, i1, i2, val);
                break;

            case InstanceTarget.All:
                foreach (var inst in Instances)
                {
                    inst.SetLocalVar(name, i1, i2, val);
                }
                break;

            case InstanceTarget.Noone:
                throw new ProgramError(Error.CannotAssign);

            case InstanceTarget.Global:
                if (GlobalVariableExists(name))
                {
                    GetGlobalVariable(name).Set(i1, i2, val);
                }
                else
                {
                    GlobalVariables.Add(name, new Variable(val, i1: i1, i2: i2));
                }
                break;

            default:
                var e = GetInstance(instance);

                if (e != null)
                {
                    e.SetLocalVar(name, i1, i2, val);
                }
                else if (instance < (int)InstanceTarget.Global)
                {
                    throw new ProgramError(Error.CannotAssign);
                }
                else
                {
                    foreach (var i in Instances.Where(ii => ii.object_index == instance))
                    {
                        e.SetLocalVar(name, i1, i2, val);
                    }
                }
                break;
            }
        }
Exemplo n.º 2
0
 public static void SetVar(string name, int i1, int i2, Value val)
 {
     if (DeclaredVariables.Contains(name))
     {
         if (ScopedVariables.ContainsKey(name))
         {
             if (ScopedVariables[name].IsReadOnly)
             {
                 throw new ProgramError(Error.CannotAssign);
             }
             ScopedVariables[name][i1, i2] = val;
         }
         else
         {
             ScopedVariables.Add(name, new Variable(i1, i2, val));
         }
     }
     else if (GlobalVariableExists(name))
     {
         var globalvar = GetGlobalVariable(name);
         if (globalvar.IsReadOnly)
         {
             throw new ProgramError(Error.CannotAssign);
         }
         globalvar[i1, i2] = val;
     }
     else if (Current != null)
     {
         if (Current.VariableExists(name))
         {
             var instancevar = Current.Variable(name);
             if (instancevar.IsReadOnly)
             {
                 throw new ProgramError(Error.CannotAssign);
             }
             instancevar[i1, i2] = val;
         }
         else
         {
             Current.SetLocalVar(name, val);
         }
     }
 }