/* 
 * Tactic is the legal property of its developers, whose names are too numerous 
 * to list here.  Please refer to the COPYRIGHT file distributed with this 
 * source distribution. 
 * 
 * This library is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU Lesser General Public 
 * License as published by the Free Software Foundation; either 
 * version 2.1 of the License, or (at your option) any later version. 
 * 
 * This library 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 
 * Lesser General Public License for more details. 
 * 
 * You should have received a copy of the GNU Lesser General Public 
 * License along with this library; if not, write to the Free Software 
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
 *
 * See README for more informations
 *
 * Flee.cpp
 *
 * ...
 * Date 22/02/06
 *
 */

#include "Evaluation.h"
#include "Fight.h"
#include "Flee.h"
#include "Move.h"
#include "Obey.h"
#include "ErrorState.h"

Flee::Flee(GroupAI* groupAI, std::vector<FuzzyRule>* rules) : State(groupAI, rules) {
	DebugAI::trace('a', "Creating Flee State");

	evaluationState = NULL;
	fightState = NULL;
	moveState = NULL;
	obeyState = NULL;
	errorState = NULL;
	type = FLEE;
}

Flee::~Flee()
{
	DebugAI::trace('a', "Destructing Flee State");
}

State* Flee::change (Order* order)
{
	State* newState;

	switch (order->getType())
	{
		case ORDER_EVALUATION:
			DebugAI::trace('a', "Transition Flee -> Evaluation");
			newState = evaluationState;
			break;

		case ORDER_FLEE:
		case ORDER_REGROUP:
			DebugAI::trace('a', "Transition Flee -> Flee");
			newState = this;
			break;

		default:
			DebugAI::trace('a', "Transition Flee -> ErrorState");
			newState = errorState;
	}

	return newState;
}

std::string Flee::toString ()
{
	std::string thisState;

	// The type of the state
	thisState = "Flee";

	return thisState;
}

void Flee::setStates (Evaluation* evaluation, Fight* fight,
							Move* move, Obey* obey, ErrorState* error) {
	DebugAI::trace('a', "Setting States of Flee State");
	evaluationState = evaluation;
	fightState = fight;
	moveState = move;
	obeyState = obey;
	errorState = error;
}
