@Override public void logic() throws PogamutException { super.logic(); myInitialize(); double levelTime = this.game.getTime(); double speed = this.bot.getVelocity().size(); double skipTime = 0; if (lastTime > 0) { skipTime = levelTime - lastTime; } double distance_estimate = skipTime * speed; if (sequence != null && sequence.hasNext()) { Point pose; if (distance_estimate > 0) { pose = sequence.nextByDistance(distance_estimate); } else { pose = sequence.nextByTime(skipTime); } Location current = this.getAgentMemory().getAgentLocation().getLocation(); Location next = pose.getLocation(); if (next.getDistance(current) > SPACE_DISCONTINUITY) { System.out.println("RESPAWN: space discontinuity"); this.body.getAction().respawn(pose.getLocation(), pose.getRotation()); } else { this.move.moveTo(pose.getLocation()); } System.out.println("current: " + current + " next: " + next); System.out.println("level: " + levelTime + " data: " + pose.getT() + " skip: " + skipTime); } else { if (sequenceIter == null) { sequenceIter = sequences.iterator(); } if (sequenceIter.hasNext()) { sequence = sequenceIter.next(); if (sequence.hasNext()) { Point pose = sequence.nextByTime(skipTime); this.body.getAction().respawn(pose.getLocation(), pose.getRotation()); } } } lastTime = levelTime; }
private void myInitialize() { if (initialized) return; else initialized = true; // reading pose sequences File traceHome = new File(Constants.HUMAN_DATA_PATH.get()); if (this.game == null || this.game.getMapName() == null) { this.getLog().severe("Could not find level-specific pose data"); return; } File levelSpecificTraceHome = new File(traceHome, this.game.getMapName()); if (!levelSpecificTraceHome.exists()) { this.getLog() .log( Level.SEVERE, "Could not find level-specific pose data for " + this.game.getMapName()); return; } File[] subdirs = levelSpecificTraceHome.listFiles( new FileFilter() { public boolean accept(File pathname) { return pathname.isDirectory(); } }); if (subdirs == null) return; for (File subdir : subdirs) { File[] dataFiles = subdir.listFiles( new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".dat"); } }); if (dataFiles != null) { for (File dataFile : dataFiles) { System.out.println(dataFile.getName()); try { BufferedReader reader = new BufferedReader(new FileReader(dataFile)); sequences.addAll(PoseSequence.readSequences(reader)); } catch (FileNotFoundException ex) { this.getLog().log(Level.SEVERE, "Data file not found", ex); } catch (IOException ioe) { this.getLog().log(Level.SEVERE, "Error while reading pose data file", ioe); } } } System.out.println("done reading sequences: " + sequences.size() + " in subdir " + subdir); } }