FS#109 - Fix sf::Listener's target being actually a relative direction

git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1176 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
LaurentGom 2009-07-12 19:33:56 +00:00
parent 374af05d5f
commit ac773e8161
8 changed files with 54 additions and 63 deletions

View File

@ -4,8 +4,8 @@ EXPORTS
sfListener_GetGlobalVolume
sfListener_SetPosition
sfListener_GetPosition
sfListener_SetTarget
sfListener_GetTarget
sfListener_SetDirection
sfListener_GetDirection
sfMusic_CreateFromFile
sfMusic_CreateFromMemory
sfMusic_Destroy

View File

@ -4,8 +4,8 @@ EXPORTS
sfListener_GetGlobalVolume
sfListener_SetPosition
sfListener_GetPosition
sfListener_SetTarget
sfListener_GetTarget
sfListener_SetDirection
sfListener_GetDirection
sfMusic_CreateFromFile
sfMusic_CreateFromMemory
sfMusic_Destroy

View File

@ -68,26 +68,24 @@ CSFML_API void sfListener_SetPosition(float x, float y, float z);
CSFML_API void sfListener_GetPosition(float* x, float* y, float* z);
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at)
/// Change the orientation of the listener
///
/// \param x : X position of the point the listener must look at
/// \param y : X position of the point the listener must look at
/// \param z : X position of the point the listener must look at
/// \param x : X component of the listener's direction
/// \param y : Y component of the listener's direction
/// \param z : Z component of the listener's direction
///
////////////////////////////////////////////////////////////
CSFML_API void sfListener_SetTarget(float x, float y, float z);
CSFML_API void sfListener_SetDirection(float x, float y, float z);
////////////////////////////////////////////////////////////
/// Get the current orientation of the listener (the point
/// he's looking at)
/// Get the current orientation of the listener
///
/// \param x : X position of the point the listener is looking at
/// \param y : X position of the point the listener is looking at
/// \param z : X position of the point the listener is looking at
/// \param x : X component of the listener's direction
/// \param y : Y component of the listener's direction
/// \param z : Z component of the listener's direction
///
////////////////////////////////////////////////////////////
CSFML_API void sfListener_GetTarget(float* x, float* y, float* z);
CSFML_API void sfListener_GetDirection(float* x, float* y, float* z);
#endif // SFML_LISTENER_H

View File

@ -51,9 +51,9 @@ float sfListener_GetGlobalVolume()
////////////////////////////////////////////////////////////
/// Change the position of the listener
////////////////////////////////////////////////////////////
void sfListener_SetPosition(float x, float y, float PosZ)
void sfListener_SetPosition(float x, float y, float z)
{
sf::Listener::SetPosition(sf::Vector3f(x, y, PosZ));
sf::Listener::SetPosition(x, y, z);
}
@ -73,26 +73,24 @@ void sfListener_GetPosition(float* x, float* y, float* z)
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at)
/// Change the orientation of the listener
////////////////////////////////////////////////////////////
void sfListener_SetTarget(float x, float y, float z)
void sfListener_SetDirection(float x, float y, float z)
{
sf::Listener::SetTarget(sf::Vector3f(x, y, z));
sf::Listener::SetDirection(x, y, z);
}
////////////////////////////////////////////////////////////
/// Get the current orientation of the listener (the point
/// he's looking at)
/// Get the current orientation of the listener
////////////////////////////////////////////////////////////
void sfListener_GetTarget(float* x, float* y, float* z)
void sfListener_GetDirection(float* x, float* y, float* z)
{
if (x && y && z)
{
sf::Vector3f target = sf::Listener::GetTarget();
*x = target.x;
*y = target.y;
*z = target.z;
sf::Vector3f direction = sf::Listener::GetDirection();
*x = direction.x;
*y = direction.y;
*z = direction.z;
}
}

View File

@ -39,14 +39,13 @@ namespace SFML
////////////////////////////////////////////////////////////
/// <summary>
/// 3D position of the target, ie. the point the listener is looking at
/// (default is (0, 0, -1))
/// 3D direction of the listener (default is (0, 0, -1))
/// </summary>
////////////////////////////////////////////////////////////
public static Vector3 Target
public static Vector3 Direction
{
get {Vector3 v; sfListener_GetTarget(out v.X, out v.Y, out v.Z); return v;}
set {sfListener_SetTarget(value.X, value.Y, value.Z);}
get {Vector3 v; sfListener_GetDirection(out v.X, out v.Y, out v.Z); return v;}
set {sfListener_SetDirection(value.X, value.Y, value.Z);}
}
#region Imports
@ -57,16 +56,16 @@ namespace SFML
static extern float sfListener_GetGlobalVolume();
[DllImport("csfml-audio"), SuppressUnmanagedCodeSecurity]
static extern void sfListener_SetPosition(float PosX, float PosY, float PosZ);
static extern void sfListener_SetPosition(float X, float Y, float Z);
[DllImport("csfml-audio"), SuppressUnmanagedCodeSecurity]
static extern void sfListener_GetPosition(out float PosX, out float PosY, out float PosZ);
static extern void sfListener_GetPosition(out float X, out float Y, out float Z);
[DllImport("csfml-audio"), SuppressUnmanagedCodeSecurity]
static extern void sfListener_SetTarget(float TargetX, float TargetY, float TargetZ);
static extern void sfListener_GetDirection(float X, float Y, float Z);
[DllImport("csfml-audio"), SuppressUnmanagedCodeSecurity]
static extern void sfListener_GetTarget(out float TargetX, out float TargetY, out float TargetZ);
static extern void sfListener_SetDirection(out float X, out float Y, out float Z);
#endregion
}
}

View File

@ -87,33 +87,32 @@ public :
static Vector3f GetPosition();
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at) (take 3 values).
/// The default target is (0, 0, -1)
/// Change the orientation of the listener (take 3 values);
/// the direction does not need to be normalized.
/// The default direction is (0, 0, -1)
///
/// \param x, y, z : Position of the point the listener must look at
/// \param x, y, z : Orientation of the listener
///
////////////////////////////////////////////////////////////
static void SetTarget(float x, float y, float z);
static void SetDirection(float x, float y, float z);
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at) (take a 3D vector).
/// The default target is (0, 0, -1)
/// Change the orientation of the listener (take a 3D vector);
/// the direction does not need to be normalized.
/// The default direction is (0, 0, -1)
///
/// \param target : Position of the point the listener must look at
/// \param direction : Orientation of the listener
///
////////////////////////////////////////////////////////////
static void SetTarget(const Vector3f& target);
static void SetDirection(const Vector3f& direction);
////////////////////////////////////////////////////////////
/// Get the current orientation of the listener (the point
/// he's looking at)
/// Get the current orientation of the listener.
///
/// \return : Position of the point the listener is looking at
/// \return Current direction of the listener
///
////////////////////////////////////////////////////////////
static Vector3f GetTarget();
static Vector3f GetDirection();
};
} // namespace sf

View File

@ -65,7 +65,7 @@ AudioDevice::AudioDevice()
// Initialize the listener, located at the origin and looking along the Z axis
Listener::SetPosition(0.f, 0.f, 0.f);
Listener::SetTarget(0.f, 0.f, -1.f);
Listener::SetDirection(0.f, 0.f, -1.f);
}
else
{

View File

@ -83,10 +83,9 @@ Vector3f Listener::GetPosition()
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at) (take 3 values)
/// Change the orientation of the listener (take 3 values)
////////////////////////////////////////////////////////////
void Listener::SetTarget(float x, float y, float z)
void Listener::SetDirection(float x, float y, float z)
{
float orientation[] = {x, y, z, 0.f, 1.f, 0.f};
ALCheck(alListenerfv(AL_ORIENTATION, orientation));
@ -94,20 +93,18 @@ void Listener::SetTarget(float x, float y, float z)
////////////////////////////////////////////////////////////
/// Change the orientation of the listener (the point
/// he must look at) (take a 3D vector)
/// Change the orientation of the listener (take a 3D vector)
////////////////////////////////////////////////////////////
void Listener::SetTarget(const Vector3f& target)
void Listener::SetDirection(const Vector3f& direction)
{
SetTarget(target.x, target.y, target.z);
SetDirection(direction.x, direction.y, direction.z);
}
////////////////////////////////////////////////////////////
/// Get the current orientation of the listener (the point
/// he's looking at)
/// Get the current orientation of the listener.
////////////////////////////////////////////////////////////
Vector3f Listener::GetTarget()
Vector3f Listener::GetDirection()
{
float orientation[6];
ALCheck(alGetListenerfv(AL_ORIENTATION, orientation));