jsuarez/PCHandler.py (45 lines of code) (raw):

#Handler for PCs. Unlike NPCs, the NPC handler must manage environment #updates, including food/water levels. Also handles reproduction. from pdb import set_trace as T from collections import defaultdict from sim.handler.Handler import Handler from sim.lib import Enums, AI, Actions from sim.entity.PC import PC from sim.modules import Skill, ItemHook from sim.lib.Enums import Material class PCHandler(Handler): def __init__(self, env, cpu): super().__init__(env, cpu.ann) self.cpu = cpu #Const for now. Better later def initSpawn(self, env): self.spawnCent = 13 def spawnPos(self): return self.spawnCent, self.spawnCent def stepEnv(self, env, entity): r, c = entity.pos tile = env.tiles[r, c] ''' if tile.mat.harvestable: for drop in env.harvest(r, c): entity.inv.add(*drop) ''' #if (type(env.tiles[r, c].mat) in [Material.FOREST.value]): if (entity.food < entity.maxFood and type(env.tiles[r, c].mat) in [Material.FOREST.value]): if env.harvest(r, c): entity.food += 1 if (entity.water < entity.maxWater and Material.WATER.value in AI.adjacentMats(env, entity.pos)): entity.water += 1 def stepAction(self, world, entity, ind): actions = Actions.ActionTree(world, entity) ret = self.entities[ind].act(world, actions) self.removeIfDead(world, ind) ''' if ret not in (-1, None): pos = AI.randAdjacent(*self.entities[ind].pos) entity = PC(ret, pos) self.addEntity(entity, world.ent) ''' def spawn(self, ent): pos = self.spawnPos() entity = self.cpu.spawn() entityWrapper = PC(entity, self.spawnPos()) self.addEntity(entityWrapper, ent)