/// <summary> /// tries to accept a new thing into this chamber /// </summary> /// <param name="thing"></param> /// <param name="allowSpecialEffects"></param> /// <returns></returns> public override bool TryAcceptThing(Thing thing, bool allowSpecialEffects = true) { if (base.TryAcceptThing(thing, allowSpecialEffects)) { // ReSharper disable once SwitchStatementMissingSomeCases switch (_innerState) { case ChamberState.WaitingForPawn: _innerState = ChamberState.Idle; SelectorComp.Enabled = true; break; case ChamberState.WaitingForPawnMerging: _innerState = ChamberState.Active; StartMerging(); break; default: throw new ArgumentOutOfRangeException(nameof(_innerState), _innerState.ToString()); } return(true); } return(false); }
/// <summary> /// tries to accept a new thing into this chamber /// </summary> /// <param name="thing"></param> /// <param name="allowSpecialEffects"></param> /// <returns></returns> public override bool TryAcceptThing(Thing thing, bool allowSpecialEffects = true) { if (base.TryAcceptThing(thing, allowSpecialEffects)) { var p = thing as Pawn; if (p == null) { Log.Error($"{ThingID} accepted non pawn {p.ThingID}/{p.GetType().Name}! this should never happen"); return(true); } var food = p.needs?.food; if (food != null) { food.CurLevel = food.MaxLevel; } // ReSharper disable once SwitchStatementMissingSomeCases switch (_innerState) { case ChamberState.WaitingForPawn: _innerState = ChamberState.Idle; SelectorComp.Enabled = true; break; case ChamberState.WaitingForPawnMerging: _innerState = ChamberState.Active; SetActive(); StartMerging(); break; default: throw new ArgumentOutOfRangeException(nameof(_innerState), _innerState.ToString()); } return(true); } return(false); }
/// <summary> /// Gets the inspect string. /// </summary> /// <returns></returns> public override string GetInspectString() { base.GetInspectString(); var stringBuilder = new StringBuilder(); string inspectString = base.GetInspectString(); stringBuilder.Append(_innerState.ToString()); stringBuilder.AppendLine(inspectString); if (_innerState == ChamberState.Active) { float pDone = 1f - (float)_timer / _lastTotal; var pawn = (Pawn)innerContainer.First(); string insString = "MutagenChamberProgress".Translate() + ": " + pDone.ToStringPercent() + " "; switch (_currentUse) { case ChamberUse.Mutation: insString += "PMChamberAddingMutations".Translate(); break; case ChamberUse.Merge: case ChamberUse.Tf: insString += "PMChamberTransforming".Translate(pawn, _targetAnimal); break; default: throw new ArgumentOutOfRangeException(); } stringBuilder.AppendLine(insString); } return(stringBuilder.ToString().TrimEndNewlines()); }