public void CratePlacementUpdate(Colony colony, PlacementEventType eventType, Vector3Int position) { if (eventType == PlacementEventType.Removed) { foreach (var goalType in ActiveGoalsByType.Values) { foreach (var goal in goalType) { if (goal.ClosestCrate == position) { goal.ClosestCrate = StorageFactory.GetClosestCrateLocation(goal.GetCrateSearchPosition(), colony); } } } } else { foreach (var goalType in ActiveGoalsByType.Values) { foreach (var goal in goalType) { goal.ClosestCrate = StorageFactory.GetClosestCrateLocation(goal.GetCrateSearchPosition(), colony); } } } }
public void OnTryChangeBlock(ModLoader.OnTryChangeBlockData tryChangeBlockData) { if (tryChangeBlockData.PlayerClickedData != null && tryChangeBlockData.PlayerClickedData.HitType != Shared.PlayerClickedData.EHitType.Block) { return; } var colony = tryChangeBlockData?.RequestOrigin.AsPlayer?.ActiveColony; if (colony == null) { colony = tryChangeBlockData.RequestOrigin.AsColony; } if (colony != null && StorageFactory.CrateLocations.TryGetValue(colony, out var crateLocs)) { PlacementEventType placementEventType = PlacementEventType.Placed; if (StorageFactory.CrateTypes.ContainsKey(tryChangeBlockData.TypeOld.Name)) { placementEventType = PlacementEventType.Removed; } if (crateLocs.ContainsKey(tryChangeBlockData.Position)) { foreach (var s in callbacks) { s.CratePlacementUpdate(colony, placementEventType, tryChangeBlockData.Position); } } } }