def set_mob_position(self, mob) -> "MobNode": r = self._db_read_one("SELECT uuid FROM Mobs WHERE eid=?", mob.entityId) if r: self._db_write( "UPDATE Mobs SET x=?, y=?, z=? WHERE eid=?", mob.pos.x, mob.pos.y, mob.pos.z, mob.entityId, ) (memid,) = r else: memid = MobNode.create(self, mob) return self.get_mob_by_id(memid)
def set_mob_position(self, mob) -> "MobNode": r = self._db_read_one("SELECT uuid FROM ReferenceObjects WHERE eid=?", mob.entityId) if r: self._db_write( "UPDATE ReferenceObjects SET x=?, y=?, z=?, yaw=?, pitch=? WHERE eid=?", mob.pos.x, mob.pos.y, mob.pos.z, mob.look.yaw, mob.look.pitch, mob.entityId, ) (memid,) = r else: memid = MobNode.create(self, mob) return self.get_mem_by_id(memid)
def step(self, agent): super().step(agent) if self.finished: return # wait certain amount of ticks until issuing next step # while not (agent.memory.get_time() - self.last_stepped_time) > self.throttling_tick: # pass if manhat_dist(agent.pos, self.pos) > self.PLACE_REACH: task = Move(agent, { "target": self.pos, "approx": self.PLACE_REACH }) self.add_child_task(task, agent) else: agent.set_held_item(self.object_idm) if np.equal(self.pos, agent.pos).all(): agent.step_neg_z() x, y, z = self.pos y = y + 1 agent.place_block(x, y, z) time.sleep(0.1) mindist, placed_mob = self.find_nearby_new_mob(agent) if mindist < 3: memid = MobNode.create(agent.memory, placed_mob, agent_placed=True) mobmem = agent.memory.get_mem_by_id(memid) agent.memory.update_recent_entities(mems=[mobmem]) if self.memid is not None: agent.memory.add_triple(subj=self.memid, pred_text="task_effect_", obj=mobmem.memid) # the chat_effect_ triple was already made when the task is added if there was a chat... # but it points to the task memory. link the chat to the mob memory: chat_mem_triples = agent.memory.get_triples( subj=None, pred_text="chat_effect_", obj=self.memid) if len(chat_mem_triples) > 0: chat_memid = chat_mem_triples[0][0] agent.memory.add_triple(subj=chat_memid, pred_text="chat_effect_", obj=mobmem.memid) self.finished = True
def get_mob_by_eid(self, eid) -> Optional["MobNode"]: r = self._db_read_one("SELECT uuid FROM Mobs WHERE eid=?", eid) if r: return MobNode(self, r[0]) else: return None
def get_mob_by_id(self, memid) -> "MobNode": return MobNode(self, memid)