jsuarez/NPCHandler.py (23 lines of code) (raw):

#Defines various handlers for correctly spawning/updating NPCs from sim.handler.Handler import Handler import numpy as np from pdb import set_trace as T class MaterialHandler(Handler): def __init__(self, env, entityType, material, maxSpawn=None): self.material= material super().__init__(env, entityType, maxSpawn=maxSpawn) def initSpawn(self, env): R, C = env.shape self.spawns = [] for r in range(R): for c in range(C): if type(env[r, c].mat) == self.material.value: self.spawns += [(r, c)] def spawnPos(self): ind = np.random.randint(0, len(self.spawns)) return self.spawns[ind] def stepAction(self, world, entity, ind): ret = self.entities[ind].act(world) if not self.entities[ind].isAlive(): self.entities[ind].yieldDrops() self.removeIfDead(world, ind) return ret