/***************************************************************************
 *   Copyright (C) 2004-2005 by                                            *
 *     Paolo Sacconier   <axa1981@tin.it>                                  *
 *     Francesco Tamagni <minchiahead@hacari.org>                          *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program 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 General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include "cameraball.h"

namespace gillo {

CameraBall::CameraBall(Entity& e1, Entity& e2)
 : entityFrom(e1), entityTo(e2)
{
}


CameraBall::~CameraBall()
{
}

void CameraBall::update(float dt)
{
	sgVec3 fromPos, toPos, hpr, direction, upVector, displace;
	this->entityFrom.getPos(fromPos);
	this->entityTo.getPos(toPos);
	this->entityFrom.getUpVector(upVector);

	sgSubVec3(direction, toPos, fromPos);
	float distance = sgLengthVec3(direction);
	sgScaleVec3(displace, direction, -0.5/distance);
	sgScaleVec3(upVector, 0.15);
	
	sgAddVec3(fromPos, displace);
	sgAddVec3(fromPos, upVector);
	
	sgSubVec3(direction, toPos, fromPos);
	sgNormalizeVec3(direction);
	sgHPRfromVec3 ( hpr, direction );
	hpr[1] = -hpr[1]; // plib bug ???? my brain bug ????
	sgSetCoord ( &this->pos , fromPos, hpr ) ;
}

};
