Пример #1
0
        private void OpenPartPicker()
        {
            var pawn = innerContainer.First() as Pawn;

            if (pawn == null)
            {
                Log.Error("unable to find pawn to open part picker for");
            }

            var dialogue = new Dialog_PartPicker(pawn);

            dialogue.WindowClosed += WindowClosed;
            Find.WindowStack.Add(dialogue);
        }
Пример #2
0
        private void WindowClosed(Dialog_PartPicker sender, IReadOnlyAddedMutations addedmutations)
        {
            sender.WindowClosed -= WindowClosed;

            if (_innerState != ChamberState.Idle)
            {
                Log.Message("state is not idle!");

                return;
            }

            if (addedmutations?.Any() != true)
            {
                return;
            }


            _addedMutationData = new AddedMutations(addedmutations);
            _timer             = GetMutationDuration(addedmutations);
            _currentUse        = ChamberUse.Mutation;
            _innerState        = ChamberState.Active;
            SetActive();
            _lastTotal = _timer;
            sender.Reset();

            //remove any mutations left over
            var pawn = innerContainer.FirstOrDefault() as Pawn;

            if (pawn == null)
            {
                return;
            }
            foreach (IReadOnlyMutationData mData in _addedMutationData.Where(m => !m.Removing))
            {
                var hediff =
                    pawn.health?.hediffSet?.hediffs?.FirstOrDefault(h => h.def == mData.Mutation && h.Part == mData.Part) as
                    Hediff_AddedMutation;
                hediff?.MarkForRemoval();
            }

            SelectorComp.Enabled = false;
        }
Пример #3
0
        private void WindowClosed(Dialog_PartPicker sender, IReadOnlyAddedMutations addedmutations)
        {
            sender.WindowClosed -= WindowClosed;

            if (_innerState != ChamberState.Idle)
            {
                Log.Message("state is not idle!");

                return;
            }

            if (addedmutations?.Any() != true)
            {
                return;
            }

            //TODO get wait time based on number of mutations added/removed
            _timer      = Mathf.RoundToInt(TF_ANIMAL_DURATION * 60000);
            _currentUse = ChamberUse.Mutation;
            _innerState = ChamberState.Active;
            _lastTotal  = _timer;
        }