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