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]); }
/// <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; }
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; }
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; }
/// <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; }
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)"); }
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]); }
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]); }
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()); }
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())); } }
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)); }
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")]); }
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)); }
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]); }
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; }
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)); }
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)); }
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); }
private void ButtonTrigger(ScalarIntValue index, UserDelegate value) { }
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)); }
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)); } } }