public static VarList Event(VarList globals) { VarList outp = new VarList(); Dictionary <string, Var> evnt = outp.string_vars; evnt["_call"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ VarEvent ths = (VarEvent)arguments.number_vars[0]; int i = 0; State state = new State(); state.returns[0] = Var.nil; DoLater toDo = null; toDo = new DoLater(delegate { if (i >= ths.callbacks.Count) { return; } scope.callstack.Push(toDo); VarList newArgs = new VarList(); foreach (KeyValuePair <Var, Var> kv in arguments) { if (kv.Key is VarNumber) { double k = (double)(VarNumber)kv.Key; if (k >= 0 && k % 1 == 0) { if (k > 0) { newArgs.number_vars[k - 1] = kv.Value; } } else { newArgs.number_vars[k] = kv.Value; } } else if (kv.Key is VarString) { newArgs.string_vars[(string)(VarString)kv.Key] = kv.Value; } else { newArgs.other_vars[kv.Key] = kv.Value; } } ths.callbacks[i].Call(scope, state.returns, 0, newArgs); i++; }); scope.callstack.Push(toDo); }); evnt["_and"] = And; evnt["_or"] = Or; evnt["_tostring"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = "<Event>"; }); return(outp); }
// PUBLIC METHODS: ------------------------------------------------------------------------ public void OnChangeGlobal(string variableID) { if (!this.onVariableChange.ContainsKey(variableID)) { return; } VarEvent varEvent = this.onVariableChange[variableID]; if (varEvent != null) { varEvent.Invoke(variableID); } }
public void OnChangeLocal(GameObject gameObject, string variableID) { string localID = GetLocalID(gameObject, variableID); if (!this.onVariableChange.ContainsKey(variableID)) { return; } VarEvent varEvent = this.onVariableChange[localID]; if (varEvent != null) { varEvent.Invoke(variableID); } }
public static VarList Generate(VarList globals) { VarList net_VAR = new VarList(); Dictionary <string, Var> net = net_VAR.string_vars; net["connections"] = new VarList(); net["subscribe"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ string hook = (string)(VarString)arguments.number_vars[0]; VarEvent toHook; if (net["connections"].string_vars.ContainsKey(hook)) { toHook = (VarEvent)net["connections"].string_vars[hook]; } else { net["connections"].string_vars[hook] = toHook = new VarEvent(); } returnTarget[returnID] = toHook; }); net["message"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ string hook = (string)(VarString)arguments.number_vars[0]; /*Listener.subspace_messages.Enqueue(new System.Tuple<string, Var>(hook, arguments.number_vars.ContainsKey(1)?arguments.number_vars[1]:Var.nil)); * foreach(KeyValuePair<int, Program> kv in Listener.programs){ * var their_net = kv.Value.scope.globals.meta.string_vars["_parent"].string_vars["net"].string_vars; * if(their_net["connections"].string_vars.ContainsKey(hook)){ * Variable.VarList args = new Variable.VarList(); * if(arguments.number_vars.ContainsKey(1)){ * args.number_vars[0] = arguments.number_vars[1]; * args.string_vars["message"] = arguments.number_vars[1]; * } * their_net["connections"].string_vars[hook].Call(kv.Value.scope, new Dictionary<int, Variable.Var>(), 0, args); * } * }*/ returnTarget[returnID] = arguments.number_vars.ContainsKey(1) ? arguments.number_vars[1] : Var.nil; }); return(net_VAR); }
public static VarList Generate(VarList globals) { VarList tcomm_VAR = new VarList(); Dictionary <string, Var> tcomm = tcomm_VAR.string_vars; tcomm["onmessage"] = new VarEvent(); tcomm["broadcast"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ Signal newSignal = new Signal("*beep*", "1459", "Telecomms Broadcaster", "Machine", "1", "says"); if (arguments.string_vars.ContainsKey("content") && arguments.string_vars["content"] is VarString) { newSignal.content = (string)(VarString)arguments.string_vars["content"]; } else if (arguments.number_vars.ContainsKey(0) && arguments.number_vars[0] is VarString) { newSignal.content = (string)(VarString)arguments.number_vars[0]; } if (arguments.string_vars.ContainsKey("source") && arguments.string_vars["source"] is VarString) { newSignal.source = (string)(VarString)arguments.string_vars["source"]; } else if (arguments.number_vars.ContainsKey(2) && arguments.number_vars[1] is VarString) { newSignal.source = (string)(VarString)arguments.number_vars[1]; } if (arguments.string_vars.ContainsKey("job") && arguments.string_vars["job"] is VarString) { newSignal.job = (string)(VarString)arguments.string_vars["job"]; } else if (arguments.number_vars.ContainsKey(3) && arguments.number_vars[2] is VarString) { newSignal.job = (string)(VarString)arguments.number_vars[2]; } if (arguments.string_vars.ContainsKey("freq") && arguments.string_vars["freq"] is VarString) { newSignal.freq = (string)(VarString)arguments.string_vars["freq"]; } else if (arguments.number_vars.ContainsKey(3) && arguments.number_vars[3] is VarString) { newSignal.freq = (string)(VarString)arguments.number_vars[3]; } if (arguments.string_vars.ContainsKey("pass") && arguments.string_vars["pass"] is VarString) { newSignal.pass = (string)(VarString)arguments.string_vars["pass"]; } else if (arguments.number_vars.ContainsKey(4) && arguments.number_vars[4] is VarString) { newSignal.pass = (string)(VarString)arguments.number_vars[4]; } if (arguments.string_vars.ContainsKey("ref") && arguments.string_vars["ref"] is VarString) { newSignal.reference = (string)(VarString)arguments.string_vars["ref"]; } else if (arguments.number_vars.ContainsKey(5) && arguments.number_vars[5] is VarString) { newSignal.reference = (string)(VarString)arguments.number_vars[5]; } if (arguments.string_vars.ContainsKey("verb") && arguments.string_vars["verb"] is VarString) { newSignal.verb = (string)(VarString)arguments.string_vars["verb"]; } else if (arguments.number_vars.ContainsKey(6) && arguments.number_vars[6] is VarString) { newSignal.verb = (string)(VarString)arguments.number_vars[6]; } if (arguments.string_vars.ContainsKey("language") && arguments.string_vars["language"] is VarString) { newSignal.language = (string)(VarString)arguments.string_vars["verb"]; } else if (arguments.number_vars.ContainsKey(7) && arguments.number_vars[7] is VarString) { newSignal.language = (string)(VarString)arguments.number_vars[7]; } scope.program.signals.Enqueue(newSignal); }); return(tcomm_VAR); }
public static VarList Generate() { globals = new VarList(); globals.string_vars["print"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ State state = new State(); DoLater looping_func = null; looping_func = new DoLater(delegate { foreach (KeyValuePair <double, Var> arg in arguments.number_vars) { if (arg.Key % 1 == 0) { if (!state.returns.ContainsKey((int)arg.Key)) { scope.callstack.Push(looping_func); arg.Value.ToString(scope, state.returns, (int)arg.Key); return; } } } string Output = ""; string joiner = ""; foreach (KeyValuePair <double, Var> arg in arguments.number_vars) { if (arg.Key % 1 == 0) { if (state.returns[(int)arg.Key] is VarString) { Output += joiner; Output += ((VarString)state.returns[(int)arg.Key]).data; joiner = "\t"; } } } scope.program.terminal.Write(Output + "\r\n"); returnTarget[returnID] = Output; }); scope.callstack.Push(looping_func); }); globals.string_vars["write"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ State state = new State(); DoLater looping_func = null; looping_func = new DoLater(delegate { foreach (KeyValuePair <double, Var> arg in arguments.number_vars) { if (arg.Key % 1 == 0) { if (!state.returns.ContainsKey((int)arg.Key)) { scope.callstack.Push(looping_func); arg.Value.ToString(scope, state.returns, (int)arg.Key); return; } } } string Output = ""; string joiner = ""; foreach (KeyValuePair <double, Var> arg in arguments.number_vars) { if (arg.Key % 1 == 0) { if (state.returns[(int)arg.Key] is VarString) { Output += joiner; Output += ((VarString)state.returns[(int)arg.Key]).data; joiner = "\t"; } } } scope.program.terminal.Write(Output); returnTarget[returnID] = Output; }); scope.callstack.Push(looping_func); }); globals.string_vars["event"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = new VarEvent(); }); globals.string_vars["type"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = arguments.number_vars[0].type; }); globals.string_vars["table"] = LibTable.Generate(globals); globals.string_vars["term"] = LibTerm.Generate(globals); globals.string_vars["string"] = LibString.Generate(globals); globals.string_vars["math"] = LibMath.Generate(globals); globals.string_vars["tcomm"] = LibTComm.Generate(globals); globals.string_vars["net"] = LibNet.Generate(globals); globals.string_vars["tostring"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ arguments.number_vars[0].ToString(scope, returnTarget, returnID); }); globals.string_vars["tonumber"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ arguments.number_vars[0].ToNumber(scope, returnTarget, returnID); }); return(globals); }
public static VarList Generate(VarList globals) { VarList term_VAR = new VarList(); Dictionary <string, Var> term = term_VAR.string_vars; term["topic"] = new VarEvent(); term["set_foreground"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ if (arguments.number_vars.ContainsKey(0) && arguments.number_vars.ContainsKey(1) && arguments.number_vars.ContainsKey(2)) { var red = arguments.number_vars[0]; var green = arguments.number_vars[1]; var blue = arguments.number_vars[2]; if (red is VarNumber && green is VarNumber && blue is VarNumber) { scope.program.terminal.foreground = new Color((float)((VarNumber)red).data, (float)((VarNumber)green).data, (float)((VarNumber)blue).data); } } returnTarget[returnID] = Var.nil; }); term["get_foreground"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = new VarList(scope.program.terminal.foreground.r, scope.program.terminal.foreground.g, scope.program.terminal.foreground.b); }); term["set_background"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ if (arguments.number_vars.ContainsKey(0) && arguments.number_vars.ContainsKey(1) && arguments.number_vars.ContainsKey(2)) { var red = arguments.number_vars[0]; var green = arguments.number_vars[1]; var blue = arguments.number_vars[2]; if (red is VarNumber && green is VarNumber && blue is VarNumber) { scope.program.terminal.background = new Color((float)((VarNumber)red).data, (float)((VarNumber)green).data, (float)((VarNumber)blue).data); } } returnTarget[returnID] = Var.nil; }); term["get_background"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = new VarList(scope.program.terminal.background.r, scope.program.terminal.background.g, scope.program.terminal.background.b); }); term["set_cursor"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ if (arguments.number_vars.ContainsKey(0) && arguments.number_vars.ContainsKey(1)) { var x = arguments.number_vars[0]; var y = arguments.number_vars[1]; if (x is VarNumber && y is VarNumber) { scope.program.terminal.cursor_x = (int)(VarNumber)x; scope.program.terminal.cursor_y = (int)(VarNumber)y; } } returnTarget[returnID] = Var.nil; }); term["set_cursor_x"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ if (arguments.number_vars.ContainsKey(0)) { var x = arguments.number_vars[0]; if (x is VarNumber) { scope.program.terminal.cursor_x = (int)(VarNumber)x; } } returnTarget[returnID] = Var.nil; }); term["set_cursor_y"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ if (arguments.number_vars.ContainsKey(0)) { var y = arguments.number_vars[0]; if (y is VarNumber) { scope.program.terminal.cursor_y = (int)(VarNumber)y; } } returnTarget[returnID] = Var.nil; }); term["get_cursor"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = new VarList(scope.program.terminal.cursor_x, scope.program.terminal.cursor_y); }); term["get_cursor_x"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = scope.program.terminal.cursor_x; }); term["get_cursor_y"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = scope.program.terminal.cursor_y; }); term["clear"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ scope.program.terminal.Clear(); returnTarget[returnID] = Var.nil; }); term["write"] = globals.string_vars["write"]; term["get_size"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = new VarList(scope.program.terminal.cursor_x, scope.program.terminal.cursor_y); }); term["get_width"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = scope.program.terminal.width; }); term["get_height"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = scope.program.terminal.height; }); term["set_topic"] = new VarFunction(delegate(Scope scope, Dictionary <int, Var> returnTarget, int returnID, VarList arguments){ returnTarget[returnID] = arguments.number_vars[4]; scope.program.terminal.SetTopic((int)(double)(VarNumber)arguments.number_vars[0], (int)(double)(VarNumber)arguments.number_vars[1], (int)(double)(VarNumber)arguments.number_vars[2], (int)(double)(VarNumber)arguments.number_vars[3], (string)(VarString)arguments.number_vars[4]); }); return(term_VAR); }