Exemplo n.º 1
0
        public void CanGetIndex()
        {
            var list = new ListValue();

            var zedObject = ScalarIntValue.Zero;

            InvokeDelegate(list, "ADD", zedObject);
            var firstObject = ScalarIntValue.One;

            InvokeDelegate(list, "ADD", firstObject);
            var secondObject = ScalarIntValue.Two;

            InvokeDelegate(list, "ADD", secondObject);
            var thirdObject = new ScalarIntValue(4);

            InvokeDelegate(list, "ADD", thirdObject);

            var length = InvokeDelegate(list, "LENGTH");

            Assert.AreEqual(new ScalarIntValue(4), length);

            Assert.AreSame(zedObject, list[0]);
            Assert.AreSame(firstObject, list[1]);
            Assert.AreSame(secondObject, list[2]);
            Assert.AreSame(thirdObject, list[3]);
            Assert.AreNotSame(list[0], list[1]);
            Assert.AreNotSame(list[0], list[2]);
            Assert.AreNotSame(list[0], list[3]);
            Assert.AreNotSame(list[1], list[2]);
            Assert.AreNotSame(list[1], list[3]);
            Assert.AreNotSame(list[2], list[3]);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Make a new trigger for insertion into the trigger list, which is a callback from C# code.
 /// </summary>
 /// <param name="context">The ProgramContext under which this Trigger is meant to run.</param>
 /// <param name="entryPoint">Address within the program context where the routine starts that
 /// needs to be called when the trigger needs to be invoked.</param>
 /// <param name="closure">If not-null, this is the closure the trigger should be called with.
 /// If null, the trigger will only reliably be able to see global variables.</param>
 /// <param name="args">list of the arguments to pass in to the function.  Note, the existence of
 /// arguments mandates that this is a callback trigger.</param>
 public TriggerInfo(IProgramContext context, int entryPoint, List <VariableScope> closure, List <Structure> args)
 {
     EntryPoint       = entryPoint;
     IsCSharpCallback = true;
     ReturnValue      = new ScalarIntValue(0);
     CallbackFinished = false;
     Args             = args;
     ContextId        = context.ContextId;
     Closure          = closure;
 }
Exemplo n.º 3
0
 private void SetButtonLabel(ScalarIntValue index, StringValue value)
 {
     if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
     {
         return;
     }
     if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
     {
         return;
     }
     kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonLabels[monitor][index] = value;
 }
Exemplo n.º 4
0
 private void SetFlagState(ScalarIntValue index, BooleanValue value)
 {
     if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
     {
         return;
     }
     if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
     {
         return;
     }
     kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).flagStates[monitor][index] = value;
 }
Exemplo n.º 5
0
 /// <summary>
 /// Make a new trigger for insertion into the trigger list, which is a callback from C# code.
 /// </summary>
 /// <param name="context">The ProgramContext under which this Trigger is meant to run.</param>
 /// <param name="entryPoint">Address within the program context where the routine starts that
 /// needs to be called when the trigger needs to be invoked.</param>
 /// <param name="instanceCount">If you want it to be allowed to make more than one instance of
 /// a trigger at this EntryPoint, then pass in a call to TriggerInfo.NextInstance here, else
 /// pass in zero to mean that multiple instances from the same entry point aren't allowed.</param>
 /// <param name="closure">If not-null, this is the closure the trigger should be called with.
 /// If null, the trigger will only reliably be able to see global variables.</param>
 /// <param name="args">list of the arguments to pass in to the function.  Note, the existence of
 /// arguments mandates that this is a callback trigger.</param>
 public TriggerInfo(IProgramContext context, int entryPoint, InterruptPriority priority, int instanceCount, List <VariableScope> closure, List <Structure> args)
 {
     EntryPoint       = entryPoint;
     Priority         = priority;
     InstanceCount    = instanceCount;
     IsCSharpCallback = true;
     ReturnValue      = new ScalarIntValue(0);
     CallbackFinished = false;
     Args             = args ?? new List <Structure>();
     ContextId        = context.ContextId;
     Closure          = closure;
 }
Exemplo n.º 6
0
 StringValue GetRndID(ScalarIntValue _base, ScalarIntValue _chars)
 {
     if (_chars < 0)
     {
         return("error: " + _chars + " it's not a valid number of characters");
     }
     if (_base == 36)
     {
         return(utils.GetBase36(_chars));
     }
     if (_base == 62)
     {
         return(utils.GetBase62(_chars));
     }
     return("error: " + _base + " is not a valid base (use 36 or 62)");
 }
Exemplo n.º 7
0
        private StringValue GetButtonLabel(ScalarIntValue value)
        {
            if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
            {
                return("");
            }
            if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
            {
                return("");
            }
            if (!kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonLabels[monitor].ContainsKey(value))
            {
                throw new KOSException("Cannot get button status, input out of range.");
            }

            return(kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonLabels[monitor][value]);
        }
Exemplo n.º 8
0
        private BooleanValue GetFlagState(ScalarIntValue value)
        {
            if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
            {
                return(false);
            }
            if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
            {
                return(false);
            }
            if (!kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).flagStates[monitor].ContainsKey(value))
            {
                throw new KOSException("Cannot get button status, input out of range.");
            }

            return(kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).flagStates[monitor][value]);
        }
Exemplo n.º 9
0
        private StringValue GetGUID(ScalarIntValue index, bool shortGuid)
        {
            if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
            {
                return("");
            }
            if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= index)
            {
                throw new KOSException("Cannot get monitor guid, input out of range.");
            }

            if (shortGuid)
            {
                return(kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[index].ToString().Substring(0, 8));
            }
            return(kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[index].ToString());
        }
Exemplo n.º 10
0
        public void SetWarp(ScalarIntValue newIndex)
        {
            int newRate = newIndex;

            switch (TimeWarp.WarpMode)
            {
            case TimeWarp.Modes.HIGH:
                SetWarpRate(newRate, TimeWarp.fetch.warpRates.Length - 1);
                break;

            case TimeWarp.Modes.LOW:
                SetWarpRate(newRate, TimeWarp.fetch.physicsWarpRates.Length - 1);
                break;

            default:
                throw new Exception(string.Format("WARP MODE {0} unknown to kOS - did KSP's API change?", TimeWarp.WarpMode.ToString()));
            }
        }
Exemplo n.º 11
0
        public void CanSerializeLexicons()
        {
            var lex    = new Lexicon();
            var nested = new Lexicon();

            lex[new StringValue("key1")] = new StringValue("value1");
            lex[new StringValue("2")]    = new ScalarIntValue(10);
            lex[new ScalarIntValue(2)]   = new ScalarIntValue(11); // make sure int 2 is different than string "2"
            lex[new StringValue("key3")] = nested;

            nested[new StringValue("nested1")] = new StringValue("nested1value");
            nested[new StringValue("nested2")] = new StringValue("nested2value");

            var lines = new string[] { "LEXICON of 4 items:", "[\"key1\"] = \"value1\"", "[\"2\"] = 10", "[2] = 11", "[\"key3\"] = LEXICON of 2 items:",
                                       "  [\"nested1\"] = \"nested1value\"", "  [\"nested2\"] = \"nested2value\"" };

            Assert.AreEqual(string.Join(Environment.NewLine, lines), Serialize(lex));
        }
Exemplo n.º 12
0
        public void CanSerializeLexicons()
        {
            var lex    = new Lexicon();
            var nested = new Lexicon();

            lex[new StringValue("key1")] = new StringValue("value1");
            lex[new StringValue("key2")] = new ScalarIntValue(1);
            lex[new StringValue("key3")] = nested;

            nested[new StringValue("nested1")] = new StringValue("nested1value");
            nested[new StringValue("nested2")] = new StringValue("nested2value");

            Lexicon deserialized = Deserialize(Serialize(lex)) as Lexicon;

            Assert.AreEqual(new StringValue("value1"), deserialized[new StringValue("key1")]);
            Assert.AreEqual(new ScalarIntValue(1), deserialized[new StringValue("key2")]);
            Assert.IsTrue(deserialized[new StringValue("key3")] is Lexicon);
            Assert.AreEqual(new StringValue("nested1value"), (deserialized[new StringValue("key3")] as Lexicon)[new StringValue("nested1")]);
        }
Exemplo n.º 13
0
        public void CanLetInstanceTakePrecedenceOverStatic()
        {
            var testStructure = new TestStructure();
            var suffixName    = Guid.NewGuid().ToString();

            var testObject = Substitute.For <ISuffixResult>();
            var testSuffix = Substitute.For <ISuffix>();

            testSuffix.Get().ReturnsForAnyArgs(info => testObject);
            testStructure.TestAddInstanceSuffix(suffixName, testSuffix);

            var testSuffixStatic = Substitute.For <ISuffix>();

            testSuffixStatic.Get().ReturnsForAnyArgs(new SuffixResult(ScalarIntValue.MaxValue()));
            TestStructure.TestAddGlobal <object>(suffixName, testSuffixStatic);

            Assert.IsNotNull(testStructure.GetSuffix(suffixName));
            Assert.AreSame(testObject, testStructure.GetSuffix(suffixName));
        }
Exemplo n.º 14
0
 private BooleanValue GetButtonState(ScalarIntValue value)
 {
     if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
     {
         return(false);
     }
     if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
     {
         return(false);
     }
     if (value < 0)
     {
         if (value == -1)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].enterButtonState);
         }
         else if (value == -2)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].cancelButtonState);
         }
         else if (value == -3)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].upButtonState);
         }
         else if (value == -4)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].downButtonState);
         }
         else if (value == -5)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].leftButtonState);
         }
         else if (value == -6)
         {
             return(kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].rightButtonState);
         }
     }
     if (!kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonStates[monitor].ContainsKey(value))
     {
         throw new KOSException("Cannot get button status, input out of range.");
     }
     return(kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonStates[monitor][value]);
 }
Exemplo n.º 15
0
 private void SetButtonDelegate(ScalarIntValue index, UserDelegate value)
 {
     if (!kPMCore.fetch.vessel_register.ContainsKey(shared.Vessel.id))
     {
         return;
     }
     if (kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count == 0 || kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors.Count <= monitor)
     {
         return;
     }
     if (index < 0)
     {
         if (index == -1)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].enterButtonDelegate = value;
         }
         else if (index == -2)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].cancelButtonDelegate = value;
         }
         else if (index == -3)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].upButtonDelegate = value;
         }
         else if (index == -4)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].downButtonDelegate = value;
         }
         else if (index == -5)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].leftButtonDelegate = value;
         }
         else if (index == -6)
         {
             kPMCore.fetch.monitor_register[kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).monitors[monitor]].rightButtonDelegate = value;
         }
         return;
     }
     kPMCore.fetch.GetVesselMonitors(shared.Vessel.id).buttonDelegates[monitor][index] = value;
 }
Exemplo n.º 16
0
        public void CanTestContains()
        {
            var stack = new StackValue();

            var zedObject = new StringValue("abc");

            InvokeDelegate(stack, "PUSH", zedObject);
            var firstObject = ScalarIntValue.One;

            InvokeDelegate(stack, "PUSH", firstObject);
            var secondObject = ScalarIntValue.Two;
            var thirdObject  = new ScalarIntValue(4);

            var length = InvokeDelegate(stack, "LENGTH");

            Assert.AreEqual(ScalarIntValue.Two, length);

            Assert.IsTrue((BooleanValue)InvokeDelegate(stack, "CONTAINS", zedObject));
            Assert.IsTrue((BooleanValue)InvokeDelegate(stack, "CONTAINS", firstObject));
            Assert.IsFalse((BooleanValue)InvokeDelegate(stack, "CONTAINS", secondObject));
            Assert.IsFalse((BooleanValue)InvokeDelegate(stack, "CONTAINS", thirdObject));
        }
Exemplo n.º 17
0
        public void CanTestContains()
        {
            var list = new ListValue();

            var zedObject = ScalarIntValue.Zero;

            InvokeDelegate(list, "ADD", zedObject);
            var firstObject = ScalarIntValue.One;

            InvokeDelegate(list, "ADD", firstObject);
            var secondObject = ScalarIntValue.Two;
            var thirdObject  = new ScalarIntValue(4);

            var length = InvokeDelegate(list, "LENGTH");

            Assert.AreEqual(ScalarIntValue.Two, length);


            Assert.IsTrue((BooleanValue)InvokeDelegate(list, "CONTAINS", zedObject));
            Assert.IsTrue((BooleanValue)InvokeDelegate(list, "CONTAINS", firstObject));
            Assert.IsFalse((BooleanValue)InvokeDelegate(list, "CONTAINS", secondObject));
            Assert.IsFalse((BooleanValue)InvokeDelegate(list, "CONTAINS", thirdObject));
        }
Exemplo n.º 18
0
        public void CopyIsACopy()
        {
            var list = new ListValue();

            var zedObject = ScalarIntValue.Zero;

            InvokeDelegate(list, "ADD", zedObject);
            var firstObject = ScalarIntValue.One;

            InvokeDelegate(list, "ADD", firstObject);
            var secondObject = ScalarIntValue.Two;

            InvokeDelegate(list, "ADD", secondObject);
            var thirdObject = new ScalarIntValue(4);

            InvokeDelegate(list, "ADD", thirdObject);

            var length = InvokeDelegate(list, "LENGTH");

            Assert.AreEqual(new ScalarIntValue(4), length);

            var copy = InvokeDelegate(list, "COPY") as ListValue;

            Assert.AreNotSame(list, copy);

            var copyLength = InvokeDelegate(copy, "LENGTH");

            Assert.AreEqual(new ScalarIntValue(4), copyLength);

            InvokeDelegate(copy, "CLEAR");

            copyLength = InvokeDelegate(copy, "LENGTH");
            Assert.AreEqual(ScalarIntValue.Zero, copyLength);

            length = InvokeDelegate(list, "LENGTH");
            Assert.AreEqual(new ScalarIntValue(4), length);
        }
Exemplo n.º 19
0
 private void ButtonTrigger(ScalarIntValue index, UserDelegate value)
 {
 }
Exemplo n.º 20
0
        public override void AddTo(SharedObjects shared)
        {
            shared.BindingMgr.AddGetter("KUNIVERSE", () => new KUniverseValue(shared));

            shared.BindingMgr.AddGetter("WARPMODE", () => TimeWarpValue.Instance.GetModeAsString());
            shared.BindingMgr.AddSetter("WARPMODE", val => TimeWarpValue.Instance.SetModeAsString((StringValue)StringValue.FromPrimitive(val.ToString())));
            shared.BindingMgr.AddGetter("WARP", () => TimeWarpValue.Instance.GetWarp());
            shared.BindingMgr.AddSetter("WARP", val => TimeWarpValue.Instance.SetWarp((ScalarIntValue)ScalarIntValue.FromPrimitive(val)));
            shared.BindingMgr.AddGetter("MAPVIEW", () => MapView.MapIsEnabled);
            shared.BindingMgr.AddSetter("MAPVIEW", val =>
            {
                if (Convert.ToBoolean(val))
                {
                    MapView.EnterMapView();
                }
                else
                {
                    MapView.ExitMapView();
                }
            });
            shared.BindingMgr.AddGetter("CONSTANT", () => new ConstantValue());
            foreach (var body in FlightGlobals.fetch.bodies)
            {
                var cBody = body;
                shared.BindingMgr.AddGetter(body.name, () => new BodyTarget(cBody, shared));
            }

            shared.BindingMgr.AddGetter("VERSION", () => Core.VersionInfo);
            shared.BindingMgr.AddGetter("SOLARPRIMEVECTOR", () => new Vector(Planetarium.right));
            shared.BindingMgr.AddGetter("ARCHIVE", () => shared.VolumeMgr.GetVolume(Archive.ArchiveName));
        }
Exemplo n.º 21
0
        public override void AddTo(SharedObjects shared)
        {
            shared.BindingMgr.AddGetter("KUNIVERSE", () => new KUniverseValue(shared));
            shared.BindingMgr.AddGetter("HOMECONNECTION", () => homeConnection ?? (homeConnection = new HomeConnection(shared)));
            shared.BindingMgr.AddGetter("CONTROLCONNECTION", () => controlConnection ?? (controlConnection = new ControlConnection(shared)));
            shared.BindingMgr.AddGetter("WARPMODE", () => TimeWarpValue.Instance.GetModeAsString());
            shared.BindingMgr.AddSetter("WARPMODE", val => TimeWarpValue.Instance.SetModeAsString((StringValue)StringValue.FromPrimitive(val.ToString())));
            shared.BindingMgr.AddGetter("WARP", () => TimeWarpValue.Instance.GetWarp());
            shared.BindingMgr.AddSetter("WARP", val => TimeWarpValue.Instance.SetWarp((ScalarIntValue)ScalarIntValue.FromPrimitive(val)));
            shared.BindingMgr.AddGetter("MAPVIEW", () => MapView.MapIsEnabled);
            shared.BindingMgr.AddSetter("MAPVIEW", val =>
            {
                if (Convert.ToBoolean(val))
                {
                    MapView.EnterMapView();
                }
                else
                {
                    MapView.ExitMapView();
                }
            });
            shared.BindingMgr.AddGetter("CONSTANT", () => new ConstantValue());
            shared.BindingMgr.AddGetter("VERSION", () => Core.VersionInfo);
            shared.BindingMgr.AddGetter("SOLARPRIMEVECTOR", () => new Vector(Planetarium.right));
            shared.BindingMgr.AddGetter("ARCHIVE", () => shared.VolumeMgr.GetVolume(Archive.ArchiveName));

            foreach (var body in FlightGlobals.fetch.bodies)
            {
                var cBody = body;

                // We refuse to override other bound identifiers with body names.  Body names
                // are of "weakest" priority when their names clash with other bound variables
                // in the language.  (This has to be here because planet packs can rename the
                // bodies and we can't control the body names we might have.  A body name could
                // be something like "Eta" or "Stage" or something along those lines.)

                if (!shared.BindingMgr.HasGetter(body.name))
                {
                    shared.BindingMgr.AddGetter(body.name, () => BodyTarget.CreateOrGetExisting(cBody, shared));
                }
            }
        }