Merge branch 'tweak-camera-projectpoint' of git://github.com/stefnotch/FlaxEngine into stefnotch-tweak-camera-projectpoint
This commit is contained in:
@@ -413,24 +413,6 @@ bool Engine::HasGameViewportFocus()
|
||||
#endif
|
||||
}
|
||||
|
||||
Vector2 Engine::ScreenToGameViewport(const Vector2& screenPos)
|
||||
{
|
||||
#if USE_EDITOR
|
||||
return Editor::Managed->ScreenToGameViewport(screenPos);
|
||||
#else
|
||||
return MainWindow ? MainWindow->ScreenToClient(screenPos) : Vector2::Minimum;
|
||||
#endif
|
||||
}
|
||||
|
||||
Vector2 Engine::GameViewportToScreen(const Vector2& viewportPos)
|
||||
{
|
||||
#if USE_EDITOR
|
||||
return Editor::Managed->GameViewportToScreen(viewportPos);
|
||||
#else
|
||||
return MainWindow ? MainWindow->ClientToScreen(viewportPos) : Vector2::Minimum;
|
||||
#endif
|
||||
}
|
||||
|
||||
void Engine::OnPause()
|
||||
{
|
||||
LOG(Info, "App paused");
|
||||
|
||||
@@ -153,20 +153,6 @@ public:
|
||||
/// <returns>True if game viewport is focused, otherwise false.</returns>
|
||||
static bool HasGameViewportFocus();
|
||||
|
||||
/// <summary>
|
||||
/// Converts the screen-space position to the game viewport position.
|
||||
/// </summary>
|
||||
/// <param name="screenPos">The screen-space position.</param>
|
||||
/// <returns>The game viewport position.</returns>
|
||||
static Vector2 ScreenToGameViewport(const Vector2& screenPos);
|
||||
|
||||
/// <summary>
|
||||
/// Converts the game viewport position to the screen-space position.
|
||||
/// </summary>
|
||||
/// <param name="viewportPos">The game viewport position.</param>
|
||||
/// <returns>The screen-space position.</returns>
|
||||
static Vector2 GameViewportToScreen(const Vector2& viewportPos);
|
||||
|
||||
private:
|
||||
|
||||
static void OnPause();
|
||||
|
||||
@@ -66,6 +66,26 @@ void Screen::SetSize(const Vector2& value)
|
||||
Size = value;
|
||||
}
|
||||
|
||||
Vector2 Screen::ScreenToGameViewport(const Vector2& screenPos)
|
||||
{
|
||||
#if USE_EDITOR
|
||||
return Editor::Managed->ScreenToGameViewport(screenPos);
|
||||
#else
|
||||
auto win = Engine::MainWindow;
|
||||
return win ? win->ScreenToClient(screenPos) : Vector2::Minimum;
|
||||
#endif
|
||||
}
|
||||
|
||||
Vector2 Screen::GameViewportToScreen(const Vector2& viewportPos)
|
||||
{
|
||||
#if USE_EDITOR
|
||||
return Editor::Managed->GameViewportToScreen(viewportPos);
|
||||
#else
|
||||
auto win = Engine::MainWindow;
|
||||
return win ? win->ClientToScreen(viewportPos) : Vector2::Minimum;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Screen::GetCursorVisible()
|
||||
{
|
||||
#if USE_EDITOR
|
||||
|
||||
@@ -33,6 +33,20 @@ DECLARE_SCRIPTING_TYPE_NO_SPAWN(Screen);
|
||||
/// <returns>The value</returns>
|
||||
API_PROPERTY() static Vector2 GetSize();
|
||||
|
||||
/// <summary>
|
||||
/// Converts the screen-space position to the game viewport position.
|
||||
/// </summary>
|
||||
/// <param name="screenPos">The screen-space position.</param>
|
||||
/// <returns>The game viewport position.</returns>
|
||||
API_FUNCTION() static Vector2 ScreenToGameViewport(const Vector2& screenPos);
|
||||
|
||||
/// <summary>
|
||||
/// Converts the game viewport position to the screen-space position.
|
||||
/// </summary>
|
||||
/// <param name="viewportPos">The game viewport position.</param>
|
||||
/// <returns>The screen-space position.</returns>
|
||||
API_FUNCTION() static Vector2 GameViewportToScreen(const Vector2& viewportPos);
|
||||
|
||||
/// <summary>
|
||||
/// Sets the window size.
|
||||
/// </summary>
|
||||
|
||||
@@ -339,14 +339,14 @@ bool Input::GetKeyUp(const KeyboardKeys key)
|
||||
|
||||
Vector2 Input::GetMousePosition()
|
||||
{
|
||||
return Mouse ? Engine::ScreenToGameViewport(Mouse->GetPosition()) : Vector2::Minimum;
|
||||
return Mouse ? Screen::ScreenToGameViewport(Mouse->GetPosition()) : Vector2::Minimum;
|
||||
}
|
||||
|
||||
void Input::SetMousePosition(const Vector2& position)
|
||||
{
|
||||
if (Mouse && Engine::HasGameViewportFocus())
|
||||
{
|
||||
const auto pos = Engine::GameViewportToScreen(position);
|
||||
const auto pos = Screen::GameViewportToScreen(position);
|
||||
if (pos > Vector2::Minimum)
|
||||
Mouse->SetMousePosition(pos);
|
||||
}
|
||||
|
||||
@@ -101,12 +101,12 @@ void Camera::SetOrthographicScale(float value)
|
||||
}
|
||||
}
|
||||
|
||||
void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Vector2& screenSpaceLocation) const
|
||||
void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Vector2& gameWindowSpaceLocation) const
|
||||
{
|
||||
ProjectPoint(worldSpaceLocation, screenSpaceLocation, GetViewport());
|
||||
ProjectPoint(worldSpaceLocation, gameWindowSpaceLocation, GetViewport());
|
||||
}
|
||||
|
||||
void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Vector2& screenSpaceLocation, const Viewport& viewport) const
|
||||
void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Vector2& cameraViewportSpaceLocation, const Viewport& viewport) const
|
||||
{
|
||||
Matrix v, p, vp;
|
||||
GetMatrices(v, p, viewport);
|
||||
@@ -114,7 +114,7 @@ void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Vector2& screenSpac
|
||||
Vector3 clipSpaceLocation;
|
||||
Vector3::Transform(worldSpaceLocation, vp, clipSpaceLocation);
|
||||
viewport.Project(worldSpaceLocation, vp, clipSpaceLocation);
|
||||
screenSpaceLocation = Vector2(clipSpaceLocation);
|
||||
cameraViewportSpaceLocation = Vector2(clipSpaceLocation);
|
||||
}
|
||||
|
||||
Ray Camera::ConvertMouseToRay(const Vector2& mousePosition) const
|
||||
|
||||
@@ -174,19 +174,19 @@ public:
|
||||
public:
|
||||
|
||||
/// <summary>
|
||||
/// Projects the point from 3D world-space to the camera screen-space (in screen pixels for default viewport calculated from <see cref="Viewport"/>).
|
||||
/// Projects the point from 3D world-space to game window coordinates (in screen pixels for default viewport calculated from <see cref="Viewport"/>).
|
||||
/// </summary>
|
||||
/// <param name="worldSpaceLocation">The input world-space location (XYZ in world).</param>
|
||||
/// <param name="screenSpaceLocation">The output screen-space location (XY in screen pixels).</param>
|
||||
API_FUNCTION() void ProjectPoint(const Vector3& worldSpaceLocation, API_PARAM(Out) Vector2& screenSpaceLocation) const;
|
||||
/// <param name="gameWindowSpaceLocation">The output game window coordinates (XY in screen pixels).</param>
|
||||
API_FUNCTION() void ProjectPoint(const Vector3& worldSpaceLocation, API_PARAM(Out) Vector2& gameWindowSpaceLocation) const;
|
||||
|
||||
/// <summary>
|
||||
/// Projects the point from 3D world-space to the camera screen-space (in screen pixels for given viewport).
|
||||
/// Projects the point from 3D world-space to the camera viewport-space (in screen pixels for given viewport).
|
||||
/// </summary>
|
||||
/// <param name="worldSpaceLocation">The input world-space location (XYZ in world).</param>
|
||||
/// <param name="screenSpaceLocation">The output screen-space location (XY in screen pixels).</param>
|
||||
/// <param name="cameraViewportSpaceLocation">The output camera viewport-space location (XY in screen pixels).</param>
|
||||
/// <param name="viewport">The viewport.</param>
|
||||
API_FUNCTION() void ProjectPoint(const Vector3& worldSpaceLocation, API_PARAM(Out) Vector2& screenSpaceLocation, API_PARAM(Ref) const Viewport& viewport) const;
|
||||
API_FUNCTION() void ProjectPoint(const Vector3& worldSpaceLocation, API_PARAM(Out) Vector2& cameraViewportSpaceLocation, API_PARAM(Ref) const Viewport& viewport) const;
|
||||
|
||||
/// <summary>
|
||||
/// Converts the mouse position to 3D ray.
|
||||
|
||||
Reference in New Issue
Block a user