/* 
 * 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
 *
 * Evaluation.cpp
 *
 * ...
 * Date 22/02/06
 *
 */

#include "Evaluation.h"
#include "GroupAI.h"

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

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

	fightState = NULL;
	fleeState = NULL;
	moveState = NULL;
	obeyState = NULL;
	errorState = NULL;
	type = EVALUATION;
}

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

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

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

		case ORDER_ATTACK:
			DebugAI::trace('a', "Transition Evaluation -> Fight");
			newState = fightState;
			break;

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

		case ORDER_RECONNAISSANCE:
			DebugAI::trace('a', "Transition Evaluation -> Move");
			newState = moveState;
			break;

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

	return newState;
}

std::string Evaluation::toString() {

	std::string thisState;

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

	return thisState;
}

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