// This demonstrates how you might guide a bot with the Pathfinder import ai.pathfinder.*; Pathfinder finder; PathBot bot; int w = 10; int h = 10; int spacing; int mNode = 0; PFont font; void setup(){ size(400, 400); font = loadFont("ArialMT-10.vlw"); textFont(font, 10); spacing = width / w; smooth(); rectMode(CENTER); initMap(); } void draw(){ background(80); drawNodes(); drawBot(); } void initMap(){ finder = new Pathfinder(); finder.offsetX = spacing/2; finder.offsetY = spacing/2; finder.setCuboidNodes(w, h, spacing); for(int i = 0; i < 20; i++){ Node temp = getRandomNode(); temp.walkable = false; } bot = new PathBot(finder, getRandomNode(), 5.5); finder.radialDisconnectUnwalkables(); } Node getRandomNode(){ Node n = null; while(true){ n = (Node)finder.nodes.get((int)random(finder.nodes.size())); if(n.walkable) break; } return n; } void mousePressed(){ mNode = mouseNode(); Node target = (Node)finder.nodes.get(mNode); if(target.walkable){ bot.getPath(target); } } void keyPressed(){ initMap(); } int mouseNode(){ int x = mouseX / spacing; int y = mouseY / spacing; return x + y * w; } void drawNodes(){ stroke(10); fill(255); strokeWeight(1); for(int i = 0; i < finder.nodes.size(); i++){ Node temp = (Node)finder.nodes.get(i); if(temp.walkable){ if(i == mNode){ fill(255,40,40); } else{ fill(240); } rect(temp.x, temp.y, spacing, spacing); } } } void drawBot(){ bot.move(); noStroke(); fill(40, 40, 240); ellipse(bot.x, bot.y, spacing, spacing); if(bot.path.size() > 1){ for(int i = 0; i < bot.path.size(); i++){ strokeWeight(5); stroke(40,230,40,200); noFill(); Node n = (Node)bot.path.get(i); ellipse(n.x, n.y, spacing * 0.5, spacing * 0.5); if(n.parent != null){ line(n.x, n.y, lerp(n.x, n.parent.x, 0.6), lerp(n.y, n.parent.y, 0.6)); } fill(0); text(i, n.x, n.y); } } }