public void Start() { AGXPresent = AGXInstalled(); if (KSPit.Config.Verbose) { Debug.Log(String.Format("KerbalSimpit: ActionGroupsExtended installed: {0}", AGXPresent)); } enableChannel = GameEvents.FindEvent <EventData <byte, object> >("onSerialReceived" + InboundPackets.CAGEnable); if (enableChannel != null) { enableChannel.Add(enableCAGCallback); } disableChannel = GameEvents.FindEvent <EventData <byte, object> >("onSerialReceived" + InboundPackets.CAGDisable); if (disableChannel != null) { disableChannel.Add(disableCAGCallback); } toggleChannel = GameEvents.FindEvent <EventData <byte, object> >("onSerialReceived" + InboundPackets.CAGToggle); if (toggleChannel != null) { toggleChannel.Add(toggleCAGCallback); } CAGStateChannel = GameEvents.FindEvent <EventData <byte, object> >("toSerial" + OutboundPackets.CustomActionGroups); GameEvents.FindEvent <EventData <byte, object> >("onSerialChannelSubscribed" + OutboundPackets.CustomActionGroups).Add(resendActionGroup); lastCAGStatus = new CAGStatusStruct(); }
private CAGStatusStruct getCAGState() { CAGStatusStruct result = new CAGStatusStruct(); for (int i = 1; i < ActionGroupIDs.Length; i++) //Ignoring 0 since there is no Action Group 0 { if (FlightGlobals.ActiveVessel.ActionGroups[ActionGroupIDs[i]]) { result.status[i / 8] |= (byte)(1 << (i % 8)); //Set the selected bit to 1 } } if (AGXPresent) { for (int group = 11; group <= 250; group++) // Only call AGExt for additionnal actions { bool activated = (bool)AGXExternal.InvokeMember("AGXGroupState", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new System.Object[] { group }); if (activated) { result.status[group / 8] |= (byte)(1 << group % 8); //Set the selected bit to 1 } } } return(result); }
public bool Equals(CAGStatusStruct obj) { if (status.Length != obj.status.Length) { return(false); } for (int i = 0; i < status.Length; i++) { if (status[i] != obj.status[i]) { return(false); } } return(true); }
private bool UpdateCurrentState() { CAGStatusStruct newState = getCAGState(); if (!newState.Equals(lastCAGStatus) || resendState) { resendState = false; if (CAGStateChannel != null) { //Debug.Log(String.Format("Sending CAG status : (" + newState.status[0] + ") (" + newState.status[1] + ") ")); CAGStateChannel.Fire(OutboundPackets.CustomActionGroups, newState); lastCAGStatus = newState; } return(true); } else { return(false); } }