Exemple #1
0
 public override void CompTick()
 {
     if (!toggling)
     {
         return;
     }
     if (progressBar != null)
     {
         if (progressBar.ticksLeft <= 0)
         {
             progressBar.ticksLeft = 1;
         }
         var progress = locksToToggle.Where(t => t.State.IsState(assignedState)).Count();
         progressBar.EffectTick(parent, keyHolder?.Pawn ?? TargetInfo.Invalid);
         var mote = ((SubEffecter_ProgressBar)progressBar.children[0]).mote;
         if (mote != null)
         {
             mote.progress = Mathf.Clamp01((float)progress / locksToToggle.Count);
             mote.offsetZ  = CompProp.progressBarOffset;
         }
     }
     if (assignedState.IsLocked() && Door.Open)
     {
         return;
     }
     if (currLock == null)
     {
         currLock = GetNextLockToToggle();
     }
     if (currLock != null)
     {
         if (currLock.Toggling)
         {
             return;
         }
         currLock = GetNextLockToToggle();
         currLock?.StartToggle(keyHolder, progressBar != null);
         return;
     }
     else if (!LockComps.Any(t => t.Toggling))
     {
         if (progressBar != null)
         {
             progressBar.Cleanup();
             progressBar = null;
         }
         toggling = false;
         locksToToggle.Clear();
     }
 }
Exemple #2
0
 public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
 {
     yield return(new FloatMenuOption("Lockpick", delegate
     {
         var job = JobMaker.MakeJob(JobDefOf.Lockpick, parent);
         foreach (var lockComp in LockComps.Where(t => t.State.IsLocked()))
         {
             job.AddQueuedTarget(TargetIndex.B, lockComp.parent);
         }
         if (job.GetTargetQueue(TargetIndex.B).NullOrEmpty())
         {
             return;
         }
         selPawn.jobs.StartJob(job, JobCondition.InterruptForced);
     }));
 }
Exemple #3
0
 public LockComp GetNextLockToToggle(bool includeAutomatic = false)
 => LockComps.FirstOrFallback(t => !t.Toggling && !t.State.IsBroken() && !t.State.IsState(assignedState) && (includeAutomatic || !t.State.IsAutomatic()));