/*
 * Copyright (C) 2013-2018 Pierre-François Gimenez
 * Distributed under the MIT License.
 */

package pfg.kraken;


import java.util.ArrayList;
import java.util.List;

/**
 * Informations accessibles par la config
 * Les informations de config.ini surchargent celles-ci
 * Certaines valeurs sont constantes, ce qui signifie qu'elles ne peuvent être
 * modifiées dynamiquement au cours d'un match.
 * Chaque variable a une valeur par défaut, afin de pouvoir lancer le programme
 * sans config.ini.
 * 
 * @author pf
 *
 */

import pfg.config.ConfigInfo;

/**
 * The configuration keys
 * @author pf
 *
 */

public enum ConfigInfoKraken implements ConfigInfo
{
	/**
	 * Config du navmesh
	 */
	NAVMESH_OBSTACLE_DILATATION(100), // dilatation des obstacles dans le D* Lite.
									// Comme c'est une heuristique, on peut
									// prendre plus petit que la vraie valeur
	LARGEST_TRIANGLE_AREA_IN_NAVMESH(20000), // in mm²
	LONGEST_EDGE_IN_NAVMESH(200), // in mm
	NAVMESH_FILENAME("navmesh.krk"), // the filename of the navmesh
	
	/**
	 * Research and mechanical parameter
	 */
	MAX_CURVATURE_DERIVATIVE(5), // maximal curvature derivative, in m⁻¹s⁻¹
	MAX_LATERAL_ACCELERATION(3), // maximal lateral acceleration, in m/s²
	MAX_LINEAR_ACCELERATION(2), // maximal linear acceleration, in m/s²
	DEFAULT_MAX_SPEED(1), // in m/s (or mm/ms)
	MINIMAL_SPEED(0), // in m/s
	MAX_CURVATURE(5), // in m⁻¹
	STOP_DURATION(800), // temps qu'il faut au robot pour s'arrêter et repartir
						// (par exemple à cause d'un rebroussement) in ms
	SEARCH_TIMEOUT(10000), // in ms
	THREAD_NUMBER(1), // the number of threads for the tentacle computing. Recommended value for highest performance : nb cores + 1
//	ALLOW_SPINNING(false), // can the robot spin ?
	
	/**
	 * Paramètres du traitement des capteurs
	 */
//	SUPPRESSION_AUTO_OBSTACLES_FIXES(true), // si on démarre dans un obstacle
											// fixe, est-ce qu'on le vire ?

	ENABLE_DEBUG_MODE(false), // enable the debug mode
	
	/**
	 * Paramètres sur la gestion de la mémoire
	 */
	NODE_MEMORY_POOL_SIZE(20000),
	OBSTACLES_MEMORY_POOL_SIZE(50000), // nombre d'instances pour les obstacles
			
	/**
	 * Interface graphique
	 */
	ENABLE_CONSOLE(true), // enable the console
	GRAPHIC_HEURISTIC(false), // affichage des orientations heuristiques
								// données par le D* Lite
	GRAPHIC_ENABLE(false), // désactive tout affichage si faux (empêche le
							// thread d'affichage de se lancer)
	GRAPHIC_SERVER(false), // active le serveur d'affichage
	GRAPHIC_D_STAR_LITE(false), // affiche les calculs du D* Lite
	GRAPHIC_TENTACLES(false), // affiche les trajectoires temporaires
	GRAPHIC_FIXED_OBSTACLES(false), // affiche les obstacles fixes
//	GRAPHIC_TRAJECTORY_FINAL(true), // affiche les trajectoires
	GRAPHIC_ROBOT_COLLISION(false), // affiche les obstacles du robot lors de la
									// vérification des collisions
//	GRAPHIC_ROBOT_AND_SENSORS(true), // affiche le robot et ses capteurs
	GRAPHIC_NAVMESH(false), // show the navmesh ?
	REFRESH_FREQUENCY(5), // in Hertz, 0 to disable
	ALLOW_BACKWARD_MOTION(true), // allow the pathfinding to find a path with backward motion by default
	
//	SIZE_X_WINDOW(900), // taille par défaut (sans image) de la fenêtre
//	SIZE_Y_WINDOW(600), // taille par défaut (sans image) de la fenêtre
//	SIZE_X_WITH_UNITARY_ZOOM(50), // taille en mm de la zone à afficher (sur l'axe X)
//	SIZE_Y_WITH_UNITARY_ZOOM(50), // taille en mm de la zone à afficher (sur l'axe Y)
	GRAPHIC_SERVER_PORT_NUMBER(13370); // port number of the graphic server

	private Object defaultValue;
	public volatile boolean uptodate;

	public static List<ConfigInfo> getGraphicConfigInfo()
	{
		List<ConfigInfo> out = new ArrayList<ConfigInfo>();
		for(ConfigInfoKraken c : values())
			if(c.toString().startsWith("GRAPHIC_"))
				out.add(c);
		return out;
	}
	
	/**
	 * Par défaut, une valeur est constante
	 * 
	 * @param defaultValue
	 */
	private ConfigInfoKraken(Object defaultValue)
	{
		this.defaultValue = defaultValue;
	}

	public Object getDefaultValue()
	{
		return defaultValue;
	}
}

@@ -1740,181 +1740,8 @@
 ?%0A%09%0A
-%09/**%0A%09 * Param%C3%A8tres du traitement des capteurs%0A%09 */%0A//%09SUPPRESSION_AUTO_OBSTACLES_FIXES(true), // si on d%C3%A9marre dans un obstacle%0A%09%09%09%09%09%09%09%09%09%09%09// fixe, est-ce qu'on le vire ?%0A%0A
 %09ENA
@@ -1788,16 +1788,16 @@
 ug mode%0A
+
 %09%0A%09/**%0A%09
@@ -1994,53 +1994,8 @@
  */%0A
-%09ENABLE_CONSOLE(true), // enable the console%0A
 %09GRA
@@ -2464,71 +2464,8 @@
 xes%0A
-//%09GRAPHIC_TRAJECTORY_FINAL(true), // affiche les trajectoires%0A
 %09GRA
@@ -2701,56 +2701,8 @@
 h ?%0A
-%09REFRESH_FREQUENCY(5), // in Hertz, 0 to disable
 %0A%09AL
@@ -2722,25 +2722,25 @@
 MOTION(true)
-,
+;
  // allow th
@@ -2803,395 +2803,8 @@
 ault
-%0A%09%0A//%09SIZE_X_WINDOW(900), // taille par d%C3%A9faut (sans image) de la fen%C3%AAtre%0A//%09SIZE_Y_WINDOW(600), // taille par d%C3%A9faut (sans image) de la fen%C3%AAtre%0A//%09SIZE_X_WITH_UNITARY_ZOOM(50), // taille en mm de la zone %C3%A0 afficher (sur l'axe X)%0A//%09SIZE_Y_WITH_UNITARY_ZOOM(50), // taille en mm de la zone %C3%A0 afficher (sur l'axe Y)%0A%09GRAPHIC_SERVER_PORT_NUMBER(13370); // port number of the graphic server
 %0A%0A%09p

Remove useless config keys