private GeoRock GetClosestRock(GeoControl geo) { //This isn't efficient at all but it's fine because the value is cached in rockChasers List <GeoRock> validRocks = rocks.Where(rockPair => !rockChasers.ContainsKey(rockPair.Key)).Select(rockPair => rockPair.Key).ToList(); if (validRocks.Count == 0) { return(null); } GeoRock closest = validRocks[0]; float closestDist = DistBetween(validRocks[0].transform.position, geo.transform.position); foreach (GeoRock rock in validRocks) { float newDist = DistBetween(rock.transform.position, geo.transform.position); if (newDist < closestDist) { closestDist = newDist; closest = rock; } } return(closest); }
private void UnRegisterGeoRock(On.GeoRock.orig_OnDisable orig, GeoRock self) { orig(self); if (rocks.ContainsKey(self)) { rocks.Remove(self); } if (rockChasers.ContainsKey(self)) { rockChasersReverseLookup.Remove(rockChasers[self]); rockChasers.Remove(self); } }
private void RegisterGeoRock(On.GeoRock.orig_OnEnable orig, GeoRock self) { orig(self); rocks.Add(self, self.gameObject.GetComponent <PlayMakerFSM>()); }