/* * Created on 31 mars 2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.myrobotlab.mapper.demo; import javax.vecmath.Color3f; import javax.vecmath.Vector3d; import javax.vecmath.Vector3f; import org.myrobotlab.mapper.sim.Agent; import org.myrobotlab.mapper.sim.Box; import org.myrobotlab.mapper.sim.CherryAgent; import org.myrobotlab.mapper.sim.SimpleAgent; /** * This demo show a robot picking cherries. When touched, the cherries are * either removed or repaint. */ public class PickCherriesDemo extends Demo { /** The robot used in the demo. */ public class Robot extends Agent { Color3f yellow = new Color3f(0.9f, 0.7f, 0.1f); public Robot(Vector3d position, String name) { super(position, name); } /** Initialize Agent's Behavior */ @Override public void initBehavior() { setTranslationalVelocity(0.5); } /** Perform one step of Agent's Behavior */ @Override public void performBehavior() { if (collisionDetected()) moveToStartPosition(); if ((getCounter() % 80) == 0) { setRotationalVelocity(Math.PI / 2 * (0.5 - Math.random())); setTranslationalVelocity(0.5); } // Test if there is an agent near . */ if (anOtherAgentIsVeryNear()) { SimpleAgent agent = getVeryNearAgent(); if (agent instanceof CherryAgent) { // detach it from te scene graph so it is no more visible. agent.detach(); System.out.println("cherry picked !"); } // or change the color of the agent. // ((CherryAgent) agent).setColor(yellow); } } } public PickCherriesDemo() { showAxis(false); setWorldSize(12); boxColor = new Color3f(0.6f, 0.5f, .3f); // add the four walls add(new Box(new Vector3d(-5, 0, 0), new Vector3f(0.1f, 1, 10), this, new Color3f(.8f, 0.2f, 0.2f))); add(new Box(new Vector3d(0, 0, -5), new Vector3f(10, 1, 0.1f), this, new Color3f(0.2f, 0.8f, 0.2f))); add(new Box(new Vector3d(5, 0, 0), new Vector3f(0.1f, 1, 10), this, new Color3f(0f, 0.2f, 0.8f))); add(new Box(new Vector3d(0, 0, 5), new Vector3f(10, 1, 0.1f), this, new Color3f(0.2f, 0.2f, 0.8f))); // add the robot add(new Robot(new Vector3d(0, 0, 0), "R1")); // add cherries randomly . for (int n = 0; n < 30; n++) { double x = (Math.random() * 10 - 5); double z = (Math.random() * 10 - 5); add(new CherryAgent(new Vector3d(x, 0, z), "cherry", 0.15f)); } } }