From 1f9d3d176c3c8257ce2c3e3c53b0860b020c1211 Mon Sep 17 00:00:00 2001 From: Eli White Date: Thu, 28 Jul 2016 00:24:55 -0700 Subject: [PATCH] Refactoring code into a SpinNearestFortWorker (#1351) --- pokemongo_bot/cell_workers/__init__.py | 1 + .../cell_workers/spin_nearest_fort_worker.py | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 pokemongo_bot/cell_workers/spin_nearest_fort_worker.py diff --git a/pokemongo_bot/cell_workers/__init__.py b/pokemongo_bot/cell_workers/__init__.py index ab69be4b2a..858f54d7c2 100644 --- a/pokemongo_bot/cell_workers/__init__.py +++ b/pokemongo_bot/cell_workers/__init__.py @@ -7,3 +7,4 @@ from evolve_all_worker import EvolveAllWorker from catch_visible_pokmeon_worker import CatchVisiblePokemonWorker from recycle_items_worker import RecycleItemsWorker +from spin_nearest_fort_worker import SpinNearestFortWorker diff --git a/pokemongo_bot/cell_workers/spin_nearest_fort_worker.py b/pokemongo_bot/cell_workers/spin_nearest_fort_worker.py new file mode 100644 index 0000000000..b241acf830 --- /dev/null +++ b/pokemongo_bot/cell_workers/spin_nearest_fort_worker.py @@ -0,0 +1,57 @@ +from pokemongo_bot import logger +from pokemongo_bot.worker_result import WorkerResult +from pokemongo_bot.cell_workers import MoveToFortWorker, SeenFortWorker +from utils import distance + +class SpinNearestFortWorker(object): + + def __init__(self, bot): + self.bot = bot + self.config = bot.config + + self.cell = bot.cell + self.fort_timeouts = bot.fort_timeouts + self.position = bot.position + + def work(self): + if not self.should_run(): + return WorkerResult.SUCCESS + + nearest_fort = self.get_nearest_fort() + + if nearest_fort: + # Move to and spin the nearest stop. + if MoveToFortWorker(nearest_fort, self.bot).work() == WorkerResult.RUNNING: + return WorkerResult.RUNNING + if SeenFortWorker(nearest_fort, self.bot).work() == WorkerResult.RUNNING: + return WorkerResult.RUNNING + + return WorkerResult.SUCCESS + + def should_run(self): + number_of_things_gained_by_stop = 5 + + enough_space = self.bot.get_inventory_count('item') < self.bot._player['max_item_storage'] - number_of_things_gained_by_stop + + return self.config.spin_forts and enough_space + + def get_nearest_fort(self): + if 'forts' in self.cell: + # Only include those with a lat/long + forts = [fort + for fort in self.cell['forts'] + if 'latitude' in fort and 'type' in fort] + gyms = [gym for gym in self.cell['forts'] if 'gym_points' in gym] + + # Remove stops that are still on timeout + forts = filter(lambda x: x["id"] not in self.fort_timeouts, forts) + + # Sort all by distance from current pos- eventually this should + # build graph & A* it + forts.sort(key=lambda x: distance(self.position[ + 0], self.position[1], x['latitude'], x['longitude'])) + + if len(forts) > 0: + return forts[0] + else: + return None \ No newline at end of file