The-Simpsons-Hit-and-Run/game/code/worldsim/character/charactertarget.cpp

313 lines
8.8 KiB
C++

//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved.
//
// File:
//
// Description: Implementation of class CharacterTarget
//
// History: 5/13/2002 + Created -- NAME
//
//=============================================================================
//========================================
// System Includes
//========================================
// Foundation Tech
#include <raddebug.hpp>
//========================================
// Project Includes
//========================================
#include <worldsim/character/charactertarget.h>
#include <worldsim/character/character.h>
//******************************************************************************
//
// Global Data, Local Data, Local Classes
//
//******************************************************************************
//******************************************************************************
//
// Public Member Functions
//
//******************************************************************************
/*
==============================================================================
CharacterTarget::CharacterTarget
==============================================================================
Description: Comment
Parameters: ( Character* pCharacter )
Return: CharacterTarget
=============================================================================
*/
CharacterTarget::CharacterTarget( Character* pCharacter ) :
mWalkerID( CharacterEnum::INVALID )
{
mpCharacter = pCharacter;
}
/*
==============================================================================
CharacterTarget::~CharacterTarget
==============================================================================
Description: Comment
Parameters: ()
Return: CharacterTarget
=============================================================================
*/
CharacterTarget::~CharacterTarget()
{
}
/*
==============================================================================
CharacterTarget::GetPosition
==============================================================================
Description: Comment
Parameters: ( rmt::Vector* position )
Return: void
=============================================================================
*/
void CharacterTarget::GetPosition( rmt::Vector* position )
{
mpCharacter->GetPosition( *position );
}
/*
==============================================================================
CharacterTarget::GetHeading
==============================================================================
Description: Comment
Parameters: ( rmt::Vector* heading )
Return: void
=============================================================================
*/
void CharacterTarget::GetHeading( rmt::Vector* heading )
{
mpCharacter->GetFacing( *heading );
}
/*
==============================================================================
CharacterTarget::GetVUP
==============================================================================
Description: Comment
Parameters: ( rmt::Vector* vup )
Return: void
=============================================================================
*/
void CharacterTarget::GetVUP( rmt::Vector* vup )
{
vup->Set( 0.0f, 1.0f, 0.0f );
}
/*
==============================================================================
CharacterTarget::GetVelocity
==============================================================================
Description: Comment
Parameters: ( rmt::Vector* velocity )
Return: void
=============================================================================
*/
void CharacterTarget::GetVelocity( rmt::Vector* velocity )
{
mpCharacter->GetVelocity( *velocity );
}
//=============================================================================
// CharacterTarget::GetID
//=============================================================================
// Description: Comment
//
// Parameters: ()
//
// Return: unsigned
//
//=============================================================================
unsigned int CharacterTarget::GetID()
{
return mWalkerID;
}
/*
==============================================================================
CharacterTarget::IsCar
==============================================================================
Description: Comment
Parameters: ()
Return: bool
=============================================================================
*/
bool CharacterTarget::IsCar() const
{
return false;
}
/*
==============================================================================
CharacterTarget::IsAirborn
==============================================================================
Description: Comment
Parameters: ()
Return: bool
=============================================================================
*/
bool CharacterTarget::IsAirborn()
{
return !mpCharacter->IsStanding();
}
/*
==============================================================================
CharacterTarget::IsUnstable
==============================================================================
Description: Comment
Parameters: ()
Return: bool
=============================================================================
*/
bool CharacterTarget::IsUnstable()
{
return false;
/*
return( !mpCharacter->IsNPC() &&
mpCharacter->GetSimState()->GetControl() == sim::simSimulationCtrl );
*/
}
/*
==============================================================================
CharacterTarget::IsQuickTurn
==============================================================================
Description: Comment
Parameters: ()
Return: bool
=============================================================================
*/
bool CharacterTarget::IsQuickTurn()
{
return false;
}
//=============================================================================
// CharacterTarget::GetFirstPersonPosition
//=============================================================================
// Description: Comment
//
// Parameters: ( rmt::Vector* position )
//
// Return: void
//
//=============================================================================
void CharacterTarget::GetFirstPersonPosition( rmt::Vector* position )
{
poser::Pose* pose = mpCharacter->GetPuppet()->GetPose();
rmt::Vector pos;
pos = pose->GetJoint(17)->GetWorldMatrix().Row(3); // 17 is the head (should be looking it up by name, but what the hell)
pos -= pose->GetJoint(0)->GetWorldMatrix().Row(3); // 0 is the motion root
pos.y += 0.05f; // bump it up a little, the head joint actually a little too low
//Find the eye spot on the character and return that position.
position->Set( 0.0f, pos.y, 0.0f );
}
/*
==============================================================================
CharacterTarget::GetName
==============================================================================
Description: This is only for debugging, so in the implementation go ahead and
make this return NULL in release.
Parameters: ()
Return: const
=============================================================================
*/
const char* const CharacterTarget::GetName()
{
return 0;
}
//=============================================================================
// CharacterTarget::SetID
//=============================================================================
// Description: Comment
//
// Parameters: ( CharacterEnum::WalkerID id )
//
// Return: void
//
//=============================================================================
void CharacterTarget::SetID( CharacterEnum::WalkerID id )
{
mWalkerID = id;
}
//=============================================================================
// CharacterTarget::IsInReverse
//=============================================================================
// Description: Comment
//
// Parameters: ()
//
// Return: bool
//
//=============================================================================
bool CharacterTarget::IsInReverse()
{
return false;
}
//=============================================================================
// CharacterTarget::GetTerrainIntersect
//=============================================================================
// Description: Comment
//
// Parameters: ( rmt::Vector& pos, rmt::Vector& normal )
//
// Return: void
//
//=============================================================================
void CharacterTarget::GetTerrainIntersect( rmt::Vector& pos, rmt::Vector& normal ) const
{
mpCharacter->GetTerrainIntersect( pos, normal );
}
//******************************************************************************
//
// Private Member Functions
//
//******************************************************************************