/** 
 * @file lllocalanimationobject.cpp
 * @brief LLHUDLocalAnimationObject class implementation
 *
 * Copyright (c) 2006-2007, Linden Research, Inc.
 * 
 * The source code in this file ("Source Code") is provided by Linden Lab
 * to you under the terms of the GNU General Public License, version 2.0
 * ("GPL"), unless you have obtained a separate licensing agreement
 * ("Other License"), formally executed by you and Linden Lab.  Terms of
 * the GPL can be found in doc/GPL-license.txt in this distribution, or
 * online at http://secondlife.com/developers/opensource/gplv2
 * 
 * There are special exceptions to the terms and conditions of the GPL as
 * it is applied to this Source Code. View the full text of the exception
 * in the file doc/FLOSS-exception.txt in this software distribution, or
 * online at http://secondlife.com/developers/opensource/flossexception
 * 
 * By copying, modifying or distributing this software, you acknowledge
 * that you have read and understood your obligations described above,
 * and agree to abide by those obligations.
 * 
 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 * COMPLETENESS OR PERFORMANCE.
 */

#include "llviewerprecompiledheaders.h"

#include "lllocalanimationobject.h"
#include "llglheaders.h"
#include "llsphere.h"
#include "llrand.h"
#include "llviewerobject.h"

const F32 OPACITY		= 1.0f;
const int _X_			= 0;
const int _Y_			= 1;
const int _Z_			= 2;
const F32 BODY_RADIUS	= 0.2f;
const F32 HEAD_RADIUS	= 0.1f;
const F32 ONE_HALF		= 0.5f;

/*
//-----------------------------------------------
// constructor
//-----------------------------------------------
LLHUDLocalAnimationObject::LLHUDLocalAnimationObject()
: LLHUDObject( LL_HUD_LOCAL_ANIMATION_OBJECT )// cal the base class and pass this in, K?
{
	mParentObject = NULL;

	F32 windSensitivity = 0.04f;

	//----------------------------------------------
	// trunk
	//----------------------------------------------
	LLFlexibleObjectAttributes trunkAttributes;
	trunkAttributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, -0.2f );
	trunkAttributes.mAnchorDirection.setVec( 0.0f, 0.0f, 1.0f );
	trunkAttributes.mColor = LLColor4( 0.4f, 0.3f, 0.2f, 1.0f );
	trunkAttributes.mAnchorDirection.normVec();
	trunkAttributes.mAnchorRadius		= 0.3f;
	trunkAttributes.mNumSections		= 3;
	trunkAttributes.mGravity			= 1.2f;
	trunkAttributes.mLength				= 9.0f;
	trunkAttributes.mTension			= 10.0f;
	trunkAttributes.mEndRadius			= 0.2f;
	trunkAttributes.mTextureFileName	= "JVTestTreeTrunk.tga";
	trunkAttributes.mRenderStyle		= "tube";

	mTrunk.setAttributes( trunkAttributes );



	//---------------------------------------------
	// frond 1
	//---------------------------------------------
	LLFlexibleObjectAttributes frond1Attributes;

	frond1Attributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, 0.0f );
	frond1Attributes.mAnchorDirection.setVec( 1.0f, 0.0f, 1.0f );
	frond1Attributes.mAnchorDirection.normVec();
	frond1Attributes.mColor				= LLColor4( 0.15f, 0.25f, 0.0f, 1.0f );
	frond1Attributes.mAnchorRadius		= 0.5f;
	frond1Attributes.mTension			= 2.0f;
	frond1Attributes.mNumSections		= 2;
	frond1Attributes.mGravity			= 2.0f;
	frond1Attributes.mLength			= 5.0f;
	frond1Attributes.mEndRadius			= 0.0f;
	frond1Attributes.mTextureFileName	= "JVTestPalmFrond.tga";
	frond1Attributes.mRenderStyle		= "billboard_tube";
	frond1Attributes.mWindSensitivity	= windSensitivity;

	mFrond1.setAttributes( frond1Attributes );

	//---------------------------------------------
	// frond 2
	//---------------------------------------------
	LLFlexibleObjectAttributes frond2Attributes;

	frond2Attributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, 0.0f );
	frond2Attributes.mAnchorDirection.setVec( 1.0f, 0.7f, 0.7f );
	frond2Attributes.mAnchorDirection.normVec();
	frond2Attributes.mColor				= LLColor4( 0.15f, 0.25f, 0.0f, 1.0f );
	frond2Attributes.mAnchorRadius		= 0.5f;
	frond2Attributes.mTension			= 2.0f;
	frond2Attributes.mNumSections		= 2;
	frond2Attributes.mGravity			= 2.0f;
	frond2Attributes.mLength			= 6.0f;
	frond2Attributes.mEndRadius			= 0.0f;
	frond2Attributes.mTextureFileName	= "JVTestPalmFrond.tga";
	frond2Attributes.mRenderStyle		= "billboard_tube";
	frond2Attributes.mWindSensitivity	= windSensitivity;

	mFrond2.setAttributes( frond2Attributes );

	//---------------------------------------------
	// frond 3
	//---------------------------------------------
	LLFlexibleObjectAttributes frond3Attributes;

	frond3Attributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, 0.0f );
	frond3Attributes.mAnchorDirection.setVec( 1.0f, 0.7f, -0.7f );
	frond3Attributes.mAnchorDirection.normVec();
	frond3Attributes.mColor				= LLColor4( 0.15f, 0.25f, 0.0f, 1.0f );
	frond3Attributes.mAnchorRadius		= 0.3f;
	frond3Attributes.mTension			= 2.0f;
	frond3Attributes.mNumSections		= 2;
	frond3Attributes.mGravity			= 2.0f;
	frond3Attributes.mLength			= 6.0f;
	frond3Attributes.mEndRadius			= 0.0f;
	frond3Attributes.mTextureFileName	= "JVTestPalmFrond.tga";
	frond3Attributes.mRenderStyle		= "billboard_tube";
	frond3Attributes.mWindSensitivity	= windSensitivity;

	mFrond3.setAttributes( frond3Attributes );


	//---------------------------------------------
	// frond 4
	//---------------------------------------------
	LLFlexibleObjectAttributes frond4Attributes;

	frond4Attributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, 0.0f );
	frond4Attributes.mAnchorDirection.setVec( 1.0f, -0.8f, 0.3f );
	frond4Attributes.mAnchorDirection.normVec();
	frond4Attributes.mColor				= LLColor4( 0.15f, 0.25f, 0.0f, 1.0f );
	frond4Attributes.mAnchorRadius		= 0.5f;
	frond4Attributes.mTension			= 2.0f;
	frond4Attributes.mNumSections		= 2;
	frond4Attributes.mGravity			= 2.0f;
	frond4Attributes.mLength			= 6.0f;
	frond4Attributes.mEndRadius			= 0.0f;
	frond4Attributes.mTextureFileName	= "JVTestPalmFrond.tga";
	frond4Attributes.mRenderStyle		= "billboard_tube";
	frond4Attributes.mWindSensitivity	= windSensitivity;


	mFrond4.setAttributes( frond4Attributes );


	//---------------------------------------------
	// frond 5
	//---------------------------------------------
	LLFlexibleObjectAttributes frond5Attributes;

	frond5Attributes.mAnchorPositionOffset.setVec( 0.0f, 0.0f, 0.0f );
	frond5Attributes.mAnchorDirection.setVec( 1.0f, -0.8f, -0.3f );
	frond5Attributes.mAnchorDirection.normVec();
	frond5Attributes.mColor			= LLColor4( 0.15f, 0.25f, 0.0f, 1.0f );
	frond5Attributes.mAnchorRadius	= 0.5f;
	frond5Attributes.mTension		= 2.0f;
	frond5Attributes.mNumSections	= 2;
	frond5Attributes.mGravity		= 2.0f;
	frond5Attributes.mLength		= 5.0f;
	frond5Attributes.mEndRadius		= 0.0f;
	frond5Attributes.mTextureFileName = "JVTestPalmFrond.tga";
	frond5Attributes.mRenderStyle		= "billboard_tube";
	frond5Attributes.mWindSensitivity	= windSensitivity;

	mFrond5.setAttributes( frond5Attributes );

}//------------------------------------------------------------------------------



//---------------------------------------------------------------------------------
void LLHUDLocalAnimationObject::update()
{
	if ( ! mParentObject )
	{
		return;
	}

	//--------------------------------------------------------------------------------------------------
	// now, setting the trunk position and orientation, and updating it...
	//--------------------------------------------------------------------------------------------------
	mTrunk.setParentPositionAndRotationDirectly( mParentObject->getRenderPosition(), mParentObject->getRenderRotation() );
	mTrunk.update();


	//--------------------------------------------------------------------------------------------------
	// now, setting the frond positions and orientations, and updating them...
	//--------------------------------------------------------------------------------------------------
	mFrond1.setParentPositionAndRotationDirectly( mTrunk.getEndPosition(), mTrunk.getEndRotation() );
	mFrond2.setParentPositionAndRotationDirectly( mTrunk.getEndPosition(), mTrunk.getEndRotation() );
	mFrond3.setParentPositionAndRotationDirectly( mTrunk.getEndPosition(), mTrunk.getEndRotation() );
	mFrond4.setParentPositionAndRotationDirectly( mTrunk.getEndPosition(), mTrunk.getEndRotation() );
	mFrond5.setParentPositionAndRotationDirectly( mTrunk.getEndPosition(), mTrunk.getEndRotation() );
	
	mFrond1.update();
	mFrond2.update();
	mFrond3.update();
	mFrond4.update();
	mFrond5.update();

}//------------------------------------------------------------------







//------------------------------------------------------------------
void LLHUDLocalAnimationObject::render()
{
	mTrunk.render();

	mFrond1.render();
	mFrond2.render();
	mFrond3.render();
	mFrond4.render();
	mFrond5.render();

}//------------------------------------------------------------------





//------------------------------------------------------------------
void LLHUDLocalAnimationObject::setAttributes( LLLocalAnimationObjectAttributes a )
{
	//mAttributes = a; // ???? // how do I do this?

	//mAttributes.mAnchorPositionOffset	= a.mAnchorPositionOffset;
	//mAttributes.mAnchorDirection		= a.mAnchorDirection;
	//mAttributes.mAnchorRadius			= a.mAnchorRadius;	
	//mAttributes.mNumSections			= a.mNumSections;			
	//mAttributes.mLength					= a.mLength;			
	//mAttributes.mGravity				= a.mGravity;			
	//mAttributes.mAirFriction			= a.mAirFriction;		
	//mAttributes.mTension				= a.mTension;			
	//mAttributes.mRadiusChange			= a.mRadiusChange;	

}//------------------------------------------------------------------



//------------------------------------------------------------------
void LLHUDLocalAnimationObject::setParentObject( LLViewerObject * p )
{
	printf( "Setting parent of localAnimationObject controls %x to object %x \n", this, p );
	mParentObject = p;

}//------------------------------------------------------------------


//------------------------------------------------------------------
LLViewerObject * LLHUDLocalAnimationObject::getParentObject()
{
 return mParentObject;

}//------------------------------------------------------------------



//------------------------------------------------------------------
void LLHUDLocalAnimationObject::markAsDead()
{
	mDead = TRUE;
	mParentObject = NULL;

}//------------------------------------------------------------------

*/