/**
* =============================================================================
* Source Python
* Copyright (C) 2012-2016 Source Python Development Team. All rights reserved.
* =============================================================================
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, version 3.0, as published by the
* Free Software Foundation.
*
* 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, see .
*
* As a special exception, the Source Python Team gives you permission
* to link the code of this program (as well as its derivative works) to
* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
* by the Valve Corporation. You must obey the GNU General Public License in
* all respects for all other code used. Additionally, the Source.Python
* Development Team grants this exception to all derivative works.
*/
//-----------------------------------------------------------------------------
// Includes.
//-----------------------------------------------------------------------------
// Source.Python
#include "utilities/conversions.h"
#include "physics.h"
using namespace boost::python;
//-----------------------------------------------------------------------------
// IPhysicsObject
//-----------------------------------------------------------------------------
bool IPhysicsObjectWrapper::IsStatic()
{ return GetWrapped()->IsStatic(); }
bool IPhysicsObjectWrapper::IsAsleep()
{ return GetWrapped()->IsAsleep(); }
bool IPhysicsObjectWrapper::IsTrigger()
{ return GetWrapped()->IsTrigger(); }
bool IPhysicsObjectWrapper::IsFluid()
{ return GetWrapped()->IsFluid(); }
bool IPhysicsObjectWrapper::IsHinged()
{ return GetWrapped()->IsHinged(); }
bool IPhysicsObjectWrapper::IsCollisionEnabled()
{ return GetWrapped()->IsCollisionEnabled(); }
bool IPhysicsObjectWrapper::IsGravityEnabled()
{ return GetWrapped()->IsGravityEnabled(); }
bool IPhysicsObjectWrapper::IsDragEnabled()
{ return GetWrapped()->IsDragEnabled(); }
bool IPhysicsObjectWrapper::IsMotionEnabled()
{ return GetWrapped()->IsMotionEnabled(); }
bool IPhysicsObjectWrapper::IsMoveable()
{ return GetWrapped()->IsMoveable(); }
bool IPhysicsObjectWrapper::IsAttachedToConstraint(bool external_only)
{ return GetWrapped()->IsAttachedToConstraint(external_only); }
void IPhysicsObjectWrapper::EnableCollisions(bool enable)
{ GetWrapped()->EnableCollisions(enable); }
void IPhysicsObjectWrapper::EnableGravity(bool enable)
{ GetWrapped()->EnableGravity(enable); }
void IPhysicsObjectWrapper::EnableDrag(bool enable)
{ GetWrapped()->EnableDrag(enable); }
void IPhysicsObjectWrapper::EnableMotion(bool enable)
{ GetWrapped()->EnableMotion(enable); }
void IPhysicsObjectWrapper::EnableSleep(bool enable)
{
if (enable)
GetWrapped()->Sleep();
else
GetWrapped()->Wake();
}
void* IPhysicsObjectWrapper::GetGameData()
{ return GetWrapped()->GetGameData(); }
void IPhysicsObjectWrapper::SetGameData(void* game_data)
{ GetWrapped()->SetGameData(game_data); }
unsigned short IPhysicsObjectWrapper::GetGameFlags()
{ return GetWrapped()->GetGameFlags(); }
void IPhysicsObjectWrapper::SetGameFlags(unsigned short game_flags)
{ GetWrapped()->SetGameFlags(game_flags); }
unsigned short IPhysicsObjectWrapper::GetGameIndex()
{ return GetWrapped()->GetGameIndex(); }
void IPhysicsObjectWrapper::SetGameIndex(unsigned short game_index)
{ GetWrapped()->SetGameIndex(game_index); }
unsigned short IPhysicsObjectWrapper::GetCallbackFlags()
{ return GetWrapped()->GetCallbackFlags(); }
void IPhysicsObjectWrapper::SetCallbackFlags(unsigned short callback_flags)
{ GetWrapped()->SetCallbackFlags(callback_flags); }
float IPhysicsObjectWrapper::GetMass()
{ return GetWrapped()->GetMass(); }
void IPhysicsObjectWrapper::SetMass(float mass)
{ GetWrapped()->SetMass(mass); }
void IPhysicsObjectWrapper::RecheckCollisionFilter()
{ GetWrapped()->RecheckCollisionFilter(); }
void IPhysicsObjectWrapper::RecheckContactPoints()
{ GetWrapped()->RecheckContactPoints(); }
Vector IPhysicsObjectWrapper::GetInertia()
{ return GetWrapped()->GetInertia(); }
void IPhysicsObjectWrapper::SetInertia(Vector& inertia)
{ GetWrapped()->SetInertia(inertia); }
int IPhysicsObjectWrapper::GetMaterialIndex()
{ return GetWrapped()->GetMaterialIndex(); }
void IPhysicsObjectWrapper::SetMaterialIndex(int index)
{ GetWrapped()->SetMaterialIndex(index); }
unsigned int IPhysicsObjectWrapper::GetContents()
{ return GetWrapped()->GetContents(); }
void IPhysicsObjectWrapper::SetContents(unsigned int contents)
{ GetWrapped()->SetContents(contents); }
float IPhysicsObjectWrapper::GetSphereRadius()
{ return GetWrapped()->GetSphereRadius(); }
float IPhysicsObjectWrapper::GetEnergy()
{ return GetWrapped()->GetEnergy(); }
Vector IPhysicsObjectWrapper::GetMassCenterLocalSpace()
{ return GetWrapped()->GetMassCenterLocalSpace(); }
tuple IPhysicsObjectWrapper::GetPosition()
{
Vector position;
QAngle angles;
GetWrapped()->GetPosition(&position, &angles);
return make_tuple(position, angles);
}
void IPhysicsObjectWrapper::SetPosition(Vector& position, QAngle& angles, bool teleport)
{ GetWrapped()->SetPosition(position, angles, teleport); }
tuple IPhysicsObjectWrapper::GetVelocity()
{
Vector velocity;
AngularImpulse angular_velocity;
GetWrapped()->GetVelocity(&velocity, &angular_velocity);
return make_tuple(velocity, angular_velocity);
}
void IPhysicsObjectWrapper::SetVelocity(Vector* velocity, AngularImpulse* angular_velocity)
{ GetWrapped()->SetVelocity(velocity, angular_velocity); }
void IPhysicsObjectWrapper::SetVelocityInstantaneous(Vector* velocity, AngularImpulse* angular_velocity)
{ GetWrapped()->SetVelocityInstantaneous(velocity, angular_velocity); }
void IPhysicsObjectWrapper::ApplyForceCenter(Vector& vec)
{ GetWrapped()->ApplyForceCenter(vec); }
const char* IPhysicsObjectWrapper::GetName()
{ return GetWrapped()->GetName(); }
void IPhysicsObjectWrapper::OutputDebugInfo()
{ GetWrapped()->OutputDebugInfo(); }
//-----------------------------------------------------------------------------
// IPhysicsEnvironment
//-----------------------------------------------------------------------------
Vector* IPhysicsEnvironmentWrapper::GetGravity()
{
Vector* result = new Vector;
GetWrapped()->GetGravity(result);
return result;
}
void IPhysicsEnvironmentWrapper::SetGravity(Vector& vec)
{
GetWrapped()->SetGravity(vec);
}
void IPhysicsEnvironmentWrapper::SetAirDensity(float density)
{
GetWrapped()->SetAirDensity(density);
}
float IPhysicsEnvironmentWrapper::GetAirDensity()
{
return GetWrapped()->GetAirDensity();
}
IPhysicsObjectWrapper* IPhysicsEnvironmentWrapper::GetActiveObjectByIndex(int index)
{
int count = GetWrapped()->GetActiveObjectCount();
if (count == 0)
return NULL;
IPhysicsObject** ppObjects = new IPhysicsObject*[count];
GetWrapped()->GetActiveObjects(ppObjects);
for (int i=0; i < count; ++i)
{
IPhysicsObject* current_object = ppObjects[i];
unsigned int current_index;
if (!IndexFromBaseEntity((CBaseEntity*) current_object->GetGameData(), current_index))
continue;
if (current_index == index)
{
delete[] ppObjects;
return Wrap(current_object);
}
}
delete[] ppObjects;
return NULL;
}
//-----------------------------------------------------------------------------
// IPhysics
//-----------------------------------------------------------------------------
IPhysicsEnvironmentWrapper* IPhysicsWrapper::GetActiveEnvironmentByIndex(int index)
{
return Wrap(GetWrapped()->GetActiveEnvironmentByIndex(index));
}