public void StartToggle(bool locked, KeyHolderComp keyComp = null, bool withProgressBar = true) { var ticksToToggle = 0; var waitTime = 0; locksToToggle.Clear(); foreach (var lockComp in LockComps) { var lockState = lockComp.State; if (lockState.IsLocked() == locked || lockState.IsBroken()) { continue; } locksToToggle.Add(lockComp); if (lockState.IsAutomatic()) { lockComp.StartToggle(withProgressBar: withProgressBar); waitTime = Math.Max(waitTime, lockComp.CompProp.unlockTime); } else { ticksToToggle += lockComp.CompProp.unlockTime; } } waitTime = Math.Max(waitTime, ticksToToggle); if (keyHolder != null && keyHolder.Pawn.stances.curStance is Stance_ToggleDoor stance) { stance.Interrupt(); } if (waitTime == 0) { return; } assignedState = locked ? LockComp.LockState.Locked : LockComp.LockState.Default; keyHolder = keyComp; if (keyHolder != null) { keyHolder.Pawn.stances.SetStance(new Stance_ToggleDoor(waitTime, parent, null)); } if (withProgressBar) { progressBar = EffecterDefOf.ProgressBar.Spawn(); progressBar.ticksLeft = waitTime; } toggling = true; }
public void StartUnlock(KeyHolderComp keyComp = null, bool withProgressBar = true) => StartToggle(false, keyComp, withProgressBar);
public static Toil LockUnlockLock(KeyHolderComp keyHolder, LockComp lockComp) => Toils_General.Do(delegate { lockComp.StartToggle(false, keyHolder, true); keyHolder.Pawn.stances.SetStance(new Stance_ToggleLock(lockComp.CompProp.unlockTime, lockComp.parent, null)); });
public virtual void StartToggle(KeyHolderComp keyComp = null, bool withProgressBar = true) => StartToggle(!State.IsLocked(), keyComp, withProgressBar);
public static Toil LockUnlockDoor(KeyHolderComp keyHolder, Building_Door door, DoorLockComp doorLock) => Toils_General.Do(delegate { doorLock.StartToggle(doorLock.assignedState.IsLocked(), keyHolder, true); SoundDefOf.FlickSwitch.PlayOneShot(door); });