public CapturableIterator(Instance capture_point, CavityInfo capture_cavity_info, int capture_cell) { capturePoint = capture_point; captureCavityInfo = capture_cavity_info; captureCell = capture_cell; result = null; }
public void Iterate(object target_obj) { KMonoBehaviour kMonoBehaviour = target_obj as KMonoBehaviour; if (!((UnityEngine.Object)kMonoBehaviour == (UnityEngine.Object)null)) { FixedCapturableMonitor.Instance sMI = kMonoBehaviour.GetSMI <FixedCapturableMonitor.Instance>(); if (sMI != null && CanCapturableBeCapturedAtCapturePoint(sMI, capturePoint, captureCavityInfo, captureCell)) { result = sMI; } } }
private static bool CanCapturableBeCapturedAtCapturePoint(FixedCapturableMonitor.Instance capturable, Instance capture_point, CavityInfo capture_cavity_info, int capture_cell) { if (!capturable.IsRunning()) { return(false); } if (capturable.HasTag(GameTags.Creatures.Bagged)) { return(false); } if (capturable.targetCapturePoint != capture_point && !capturable.targetCapturePoint.IsNullOrStopped()) { return(false); } if (capture_point.def.isCreatureEligibleToBeCapturedCb != null && !capture_point.def.isCreatureEligibleToBeCapturedCb(capturable.gameObject, capture_point)) { return(false); } if (!capturable.GetComponent <ChoreConsumer>().IsChoreEqualOrAboveCurrentChorePriority <FixedCaptureStates>()) { return(false); } int cell = Grid.PosToCell(capturable.transform.GetPosition()); CavityInfo cavityForCell = Game.Instance.roomProber.GetCavityForCell(cell); if (cavityForCell == null || cavityForCell != capture_cavity_info) { return(false); } int navigationCost = capturable.GetComponent <Navigator>().GetNavigationCost(capture_cell); if (navigationCost == -1) { return(false); } TreeFilterable component = capture_point.GetComponent <TreeFilterable>(); IUserControlledCapacity component2 = capture_point.GetComponent <IUserControlledCapacity>(); if (component.ContainsTag(capturable.GetComponent <KPrefabID>().PrefabTag) && component2.AmountStored <= component2.UserMaxCapacity) { return(false); } return(true); }