internal static bool Prefix(LG_Door_Sync __instance, pDoorState oldState, pDoorState newState, bool isDropinState) { if (CustomReplicatorManager.TryInvokeStateChange(__instance.gameObject.name, oldState, newState, isDropinState)) { return(false); //Skip the original code } return(true); }
private void OnStateChange_Cast(pDoorState oldState, pDoorState newState, bool isRecall) { _OldStateBuffer.FromOriginal(oldState); State.FromOriginal(newState); OnStateChange(_OldStateBuffer, State, isRecall); OnStateChange(_OldStateBuffer, State); OnStateChange(isRecall); OnStateChange(); }
public static void Invoke(LG_SecurityDoor __instance, pDoorState state) { bool valid; EventListenerType validListenerType; switch (state.status) { case eDoorStatus.Open: valid = true; validListenerType = EventListenerType.SecurityDoorOpen; break; case eDoorStatus.Unlocked: valid = true; validListenerType = EventListenerType.SecurityDoorUnlock; break; case eDoorStatus.ChainedPuzzleActivated: valid = true; validListenerType = EventListenerType.SecurityDoorActivateChainedPuzzle; break; default: valid = false; validListenerType = (EventListenerType)0; break; } if (valid) { var blocks = EventListenerDataBlock.GetAllBlocks(); var exp = RundownManager.GetActiveExpeditionData(); foreach (var block in blocks) { if (block.Type == validListenerType) { foreach (var expedition in block.ForExpeditions) { if (expedition.ExpeditionIndex == exp.expeditionIndex && expedition.Tier == exp.tier) { var data = __instance.LinkedToZoneData; if (__instance.LinksToLayerType == block.SecurityDoor_Layer && data.LocalIndex == block.SecurityDoor_ZoneIndex && data.BuildFromLocalIndex == block.SecurityDoor_BuildFromIndex) { EventSequenceManager.StartSequence(block.EventSequenceOnActivate); } break; } } } } } }
public static bool TryInvokeStateChange(string guid, pDoorState oldState, pDoorState newState, bool recall) { try { var info = Replicators.Single(i => i.Value.GUID.Equals(guid)).Value; info.OnStateChanged?.Invoke(oldState, newState, recall); return(true); } catch { return(false); } }
public void FromOriginal(pDoorState state) { Value1.FloatValue = state.animProgress; Value2.FloatValue = state.damageTaken; Value3.FloatValue = state.glueRel; Flag1 = state.hasBeenOpenedDuringGame; Flag2 = state.markedOnMap; Flag3 = state.sourcePosZ; Flag4 = state.triggerTryOpenBroken; Flag5 = state.triggerTryOpenStuckInGlue; Status = (byte)state.status; }