/* * Simbad - Robot Simulator * Copyright (C) 2004 Louis Hugues * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ----------------------------------------------------------------------------- * $Author: sioulseuguh $ * $Date: 2005/04/25 17:54:59 $ * $Revision: 1.12 $ * $Source: /cvsroot/simbad/src/simbad/sim/EnvironmentDescription.java,v $ */ package org.myrobotlab.mapper.sim; import java.util.ArrayList; import javax.vecmath.Color3f; import javax.vecmath.Vector3d; import javax.vecmath.Vector3f; /** * This class is intend to describe easily a the world and its components. It is * only used during the building process of the World and the Simulator. The * user may specific colors and rendering attributes and add object which should * be settled in the World (Arch,Box, Wall ..) It also adds the agent(s) which * should be simulated. * * @author Louis Hugues */ public class EnvironmentDescription { ArrayList<Object> objects; public Color3f white, black, red, green, blue, ligthgray, gray, darkgray; // configurable values public Color3f ambientLightColor; public boolean light1IsOn; public Color3f light1Color; public Vector3d light1Position; public Color3f light2Color; public boolean light2IsOn; public Vector3d light2Position; public Color3f wallColor; public Color3f archColor; public Color3f boxColor; public Color3f floorColor; public Color3f backgroundColor; public int worldViewPoint; public boolean hasAxis; public int normalsStyle; public final static int NORMALS_SIMPLE = 1; public final static int NORMALS_REALISTIC = 2; /** if true the simulator uses physical laws. */ public boolean usePhysics; /** The size of the square containing the world */ public float worldSize; public EnvironmentDescription() { worldSize = 20; objects = new ArrayList<Object>(); white = new Color3f(1, 1, 1); black = new Color3f(0, 0, 0); green = new Color3f(0, 1, 0); red = new Color3f(1, 0, 0); blue = new Color3f(0, 0, 1); ligthgray = new Color3f(0.8f, 0.8f, 0.8f); gray = new Color3f(0.8f, 0.8f, 0.8f); darkgray = new Color3f(0.2f, 0.2f, 0.2f); light1Position = new Vector3d(0, worldSize / 4, worldSize); light2Position = new Vector3d(worldSize, worldSize / 4, 0); defaultSettings(); } /** Add a object (Agent or BlockWorldObject). */ public void add(Object object) { objects.add(object); } public void addMap(String[] map) { int sx = map[0].length(); int sy = map.length; int cx = sx / 2; int cy = sy / 2; for (int y = 0; y < sy; y++) { for (int x = 0; x < map[y].length(); x++) { if (map[y].charAt(x) == '#') { add(new Box(new Vector3d(x - cx, 0, y - cy), new Vector3f(1, 1, 1), this)); } } } } void defaultSettings() { light1IsOn = true; light2IsOn = false; ambientLightColor = white; light1Color = white; light2Color = white; wallColor = blue; archColor = green; boxColor = red; floorColor = ligthgray; backgroundColor = ligthgray; hasAxis = true; normalsStyle = NORMALS_SIMPLE; worldViewPoint = World.VIEW_FROM_EAST; usePhysics = false; } public void light1SetPosition(double x, double y, double z) { light1Position.set(x, y, z); } public void light2SetPosition(double x, double y, double z) { light2Position.set(x, y, z); } /** Use physics in simulation. */ public void setUsePhysics(boolean use) { usePhysics = use; } /** * Sets the size of the world. * * @param size * in meters. */ public void setWorldSize(float size) { worldSize = size; } /** Shows or hide the X,Y and Z axis. */ public void showAxis(boolean show) { hasAxis = show; } }