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

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

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

	evaluationState = NULL;
	fightState = NULL;
	fleeState = NULL;
	moveState = NULL;
	errorState = NULL;
}

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

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

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

	return newState;
}

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

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

	return thisState;
}

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