コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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;
                            }
                        }
                    }
                }
            }
        }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        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;
        }