Example #1
0
        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);
        }
Example #2
0
        // 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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }