<commit_before>package strategie;

import hook.Hook;
import hook.HookFactory;

import java.util.ArrayList;

import astar.arc.Decision;
import container.Service;
import exceptions.FinMatchException;
import exceptions.ScriptException;
import exceptions.ScriptHookException;
import exceptions.UnableToMoveException;
import robot.RobotReal;
import robot.Speed;
import scripts.ScriptManager;
import threads.ThreadStrategy;
import utils.Config;
import utils.Log;
import utils.Sleep;

/**
 * Exécute ce qu'a décidé la stratégie.
 * Gère en particulier les réponses du système aux différentes erreurs.
 * @author pf
 *
 */

public class Execution implements Service {

	private GameState<RobotReal> gamestate;
	private Log log;
	protected Config config;
	private ScriptManager scriptmanager;
	private ThreadStrategy threadstrategy;
	
	private ArrayList<Hook> hooks_entre_scripts;
	
	public Execution(Log log, Config config, GameState<RobotReal> gamestate, ScriptManager scriptmanager, HookFactory hookfactory, ThreadStrategy threadstrategy)
	{
		updateConfig();
		this.log = log;
		this.config = config;
		this.gamestate = gamestate;
		this.scriptmanager = scriptmanager;
		this.threadstrategy = threadstrategy;

		hooks_entre_scripts = hookfactory.getHooksEntreScriptsReal(gamestate);
	}

	/**
	 * Appelé par le lanceur. C'est la boucle exécutée par le robot pendant tout le match
	 */
	public void boucleExecution()
	{
		/**
		 * Attente du début du match
		 */
		while(!Config.matchDemarre)
			Sleep.sleep(20);
		
		/**
		 * Boucle d'exécution
		 */
		while(true)
		{
			try {
				Decision bestDecision = threadstrategy.getBestDecision();
				executerScript(bestDecision);
			} catch (FinMatchException e) {
				// la sortie se fait par l'exception FinMatchException
				break;
			}
		}
		
	}
	
	public void executerScript(Decision decision_actuelle) throws FinMatchException
	{
		log.debug("On tente d'exécuter "+decision_actuelle.script_name, this);
		try {
			tryOnce(decision_actuelle);
		} catch (UnableToMoveException | ScriptException e) {
			// On a rencontré l'ennemi en chemin. On applique la stratégie d'urgence.
			boolean recommence = true;
			do {
				if(gamestate.robot.isEnemyHere())
				{
					decision_actuelle = threadstrategy.getEmergencyDecision();
					log.debug("Stratégie d'urgence avec ennemi: "+decision_actuelle.script_name, this);
				}
				else
				{
					log.debug("Stratégie d'urgence sans ennemi: "+decision_actuelle.script_name, this);
					decision_actuelle = threadstrategy.getNormalDecision();
				}
				try {
					tryOnce(decision_actuelle);
					recommence = false;
				} catch (UnableToMoveException | ScriptException e1) {}
			} while(recommence);
		}
	}
	
	private void tryOnce(Decision d) throws UnableToMoveException, ScriptException, FinMatchException
	{
		gamestate.robot.set_vitesse(Speed.BETWEEN_SCRIPTS);
		try {
			gamestate.robot.suit_chemin(d.chemin, hooks_entre_scripts);
			threadstrategy.computeBestDecisionAfter(d);
			scriptmanager.getScript(d.script_name).agit(d.version, gamestate);
		} catch (ScriptHookException e) {
			try {
				scriptmanager.getScript(e.getNomScript()).agit(0, gamestate);
			} catch (ScriptHookException e1) {
				// Impossible...?
				e1.printStackTrace();
			}
		}
	}

	@Override
	public void updateConfig()
	{}
	
}
<commit_msg>... ainsi que ce fichier.<commit_after>package strategie;

import hook.Hook;
import hook.HookFactory;

import java.util.ArrayList;

import astar.arc.Decision;
import container.Service;
import exceptions.ScriptException;
import exceptions.ScriptHookException;
import exceptions.UnableToMoveException;
import robot.RobotReal;
import robot.Speed;
import scripts.ScriptManager;
import threads.ThreadStrategy;
import utils.Config;
import utils.Log;
import utils.Sleep;

/**
 * Exécute ce qu'a décidé la stratégie.
 * Gère en particulier les réponses du système aux différentes erreurs.
 * @author pf
 *
 */

public class Execution implements Service {

	private GameState<RobotReal> gamestate;
	private Log log;
	protected Config config;
	private ScriptManager scriptmanager;
	private ThreadStrategy threadstrategy;
	
	private ArrayList<Hook> hooks_entre_scripts;
	
	public Execution(Log log, Config config, GameState<RobotReal> gamestate, ScriptManager scriptmanager, HookFactory hookfactory, ThreadStrategy threadstrategy)
	{
		updateConfig();
		this.log = log;
		this.config = config;
		this.gamestate = gamestate;
		this.scriptmanager = scriptmanager;
		this.threadstrategy = threadstrategy;

		hooks_entre_scripts = hookfactory.getHooksEntreScriptsReal(gamestate);
	}

	/**
	 * Appelé par le lanceur. C'est la boucle exécutée par le robot pendant tout le match
	 */
	public void boucleExecution()
	{
		/**
		 * Attente du début du match
		 */
		while(!Config.matchDemarre)
			Sleep.sleep(20);
		
		/**
		 * Boucle d'exécution
		 */
		while(true)
		{
			Decision bestDecision = threadstrategy.getBestDecision();
			executerScript(bestDecision);
		}
		
	}
	
	public void executerScript(Decision decision_actuelle)
	{
		log.debug("On tente d'exécuter "+decision_actuelle.script_name, this);
		try {
			tryOnce(decision_actuelle);
		} catch (UnableToMoveException | ScriptException e) {
			// On a rencontré l'ennemi en chemin. On applique la stratégie d'urgence.
			boolean recommence = true;
			do {
				if(gamestate.robot.isEnemyHere())
				{
					decision_actuelle = threadstrategy.getEmergencyDecision();
					log.debug("Stratégie d'urgence avec ennemi: "+decision_actuelle.script_name, this);
				}
				else
				{
					log.debug("Stratégie d'urgence sans ennemi: "+decision_actuelle.script_name, this);
					decision_actuelle = threadstrategy.getNormalDecision();
				}
				try {
					tryOnce(decision_actuelle);
					recommence = false;
				} catch (UnableToMoveException | ScriptException e1) {}
			} while(recommence);
		}
	}
	
	private void tryOnce(Decision d) throws UnableToMoveException, ScriptException
	{
		try {
			gamestate.robot.set_vitesse(Speed.BETWEEN_SCRIPTS);
			gamestate.robot.suit_chemin(d.chemin, hooks_entre_scripts);
			threadstrategy.computeBestDecisionAfter(d);
			scriptmanager.getScript(d.script_name).agit(d.version, gamestate);
		} catch (ScriptHookException e) {
			try {
				scriptmanager.getScript(e.getNomScript()).agit(0, gamestate);
			} catch (ScriptHookException e1) {
				// Impossible...?
				e1.printStackTrace();
			}
		}
	}

	@Override
	public void updateConfig()
	{}
	
}

{'fraction_non_alphanumeric': 0.09640242952811089, 'fraction_numerical': 0.0018688677776047345, 'mean_word_length': 4.307438016528925, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6411148', 'n_tokens_mistral': 2365, 'n_tokens_neox': 2073, 'n_words': 455}