I'm trying to sort functions into their appropriate classes by turning them into methods (it is possible to leave a function outside of the class if it seems appropriate). But I'm not sure what to do with this particular function (shown below).
First, here is my class:
class OreBlobAction:
def __init__(self, entity, image_store):
self.entity = entity
self.image_store = image_store
def ore_blob_action(self, world, action, ticks):
entity = self.entity
entity_pt = entities.get_position(self.entity)
vein = find_nearest(world, entity_pt, entities.Vein)
(tiles, found) = blob_to_vein(world, self.entity, vein)
next_time = ticks + entities.get_rate(entity)
if found:
quake = create_quake(world, tiles[0], ticks, self.image_store)
worldmodel.add_entity(world, quake)
next_time = ticks + entities.get_rate(entity) * 2
schedule_action(world, self.entity,
OreBlobAction(self.entity, self.image_store), next_time)
return tiles
And now, here is the function:
def take_action(world, action, ticks):
entities.remove_pending_action(action.entity, action)
if isinstance(action, VeinAction):
return vein_action(world, action, ticks)
elif isinstance(action, MinerNotFullAction):
return miner_not_full_action(world, action, ticks)
elif isinstance(action, MinerFullAction):
return miner_full_action(world, action, ticks)
elif isinstance(action, OreBlobAction):
return ore_blob_action(world, action, ticks)
elif isinstance(action, OreTransformAction):
return ore_transform_action(world, action, ticks)
elif isinstance(action, EntityDeathAction):
return entity_death_action(world, action, ticks)
elif isinstance(action, WyvernSpawnAction):
return wyvern_spawn_action(world, action, ticks)
elif isinstance(action, WyvernAction):
return wyvern_action(world, action, ticks)
elif isinstance(action, VeinSpawnAction):
return vein_spawn_action(world, action, ticks)
elif isinstance(action, AnimationAction):
return animation_action(world, action, ticks)
return []
As you can see, this function accounts for the actions of not only the OreBlobAction class, but also multiple others. Would it be better to leave this function outside of the OreBlobAction class? Or is there a better way to do this?
NOTE: If I leave this function out of the OreBlobAction class, and I try to run the program, I get this error:
NameError: global name 'ore_blob_action' is not defined