Merge branch 'rot-colliders' of https://github.com/Tryibion/FlaxEngine into Tryibion-rot-colliders
# Conflicts: # Source/Engine/Physics/Colliders/CapsuleCollider.cpp # Source/Engine/Physics/Colliders/Collider.cpp
This commit is contained in:
@@ -6,7 +6,9 @@ CapsuleCollider::CapsuleCollider(const SpawnParams& params)
|
||||
: Collider(params)
|
||||
, _radius(20.0f)
|
||||
, _height(100.0f)
|
||||
, _direction(ColliderOrientationDirection::YAxis)
|
||||
{
|
||||
SetColliderDirection(_direction);
|
||||
}
|
||||
|
||||
void CapsuleCollider::SetRadius(const float value)
|
||||
@@ -31,6 +33,24 @@ void CapsuleCollider::SetHeight(const float value)
|
||||
UpdateBounds();
|
||||
}
|
||||
|
||||
void CapsuleCollider::SetColliderDirection(ColliderOrientationDirection value)
|
||||
{
|
||||
_direction = value;
|
||||
switch (value)
|
||||
{
|
||||
case ColliderOrientationDirection::XAxis:
|
||||
SetColliderOrientation(Quaternion::Identity);
|
||||
break;
|
||||
case ColliderOrientationDirection::YAxis:
|
||||
SetColliderOrientation(Quaternion::Euler(0, 0, 90));
|
||||
break;
|
||||
case ColliderOrientationDirection::ZAxis:
|
||||
SetColliderOrientation(Quaternion::Euler(0, 90, 0));
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
|
||||
#if USE_EDITOR
|
||||
|
||||
#include "Engine/Debug/DebugDraw.h"
|
||||
@@ -41,8 +61,10 @@ void CapsuleCollider::DrawPhysicsDebug(RenderView& view)
|
||||
const BoundingSphere sphere(_sphere.Center - view.Origin, _sphere.Radius);
|
||||
if (!view.CullingFrustum.Intersects(sphere))
|
||||
return;
|
||||
Quaternion collRot;
|
||||
Quaternion::Multiply( _colliderOrientation, Quaternion::Euler(0, 90, 0), collRot);
|
||||
Quaternion rotation;
|
||||
Quaternion::Multiply(_transform.Orientation, Quaternion::Euler(0, 90, 0), rotation);
|
||||
Quaternion::Multiply(_transform.Orientation, collRot, rotation);
|
||||
const float scaling = _cachedScale.GetAbsolute().MaxValue();
|
||||
const float minSize = 0.001f;
|
||||
const float radius = Math::Max(Math::Abs(_radius) * scaling, minSize);
|
||||
@@ -55,8 +77,10 @@ void CapsuleCollider::DrawPhysicsDebug(RenderView& view)
|
||||
|
||||
void CapsuleCollider::OnDebugDrawSelected()
|
||||
{
|
||||
Quaternion collRot;
|
||||
Quaternion::Multiply( _colliderOrientation, Quaternion::Euler(0, 90, 0), collRot);
|
||||
Quaternion rotation;
|
||||
Quaternion::Multiply(_transform.Orientation, Quaternion::Euler(0, 90, 0), rotation);
|
||||
Quaternion::Multiply(_transform.Orientation, collRot, rotation);
|
||||
const float scaling = _cachedScale.GetAbsolute().MaxValue();
|
||||
const float minSize = 0.001f;
|
||||
const float radius = Math::Max(Math::Abs(_radius) * scaling, minSize);
|
||||
@@ -85,7 +109,11 @@ void CapsuleCollider::UpdateBounds()
|
||||
// Cache bounds
|
||||
const float radiusTwice = _radius * 2.0f;
|
||||
OrientedBoundingBox::CreateCentered(_center, Vector3(_height + radiusTwice, radiusTwice, radiusTwice), _orientedBox);
|
||||
_orientedBox.Transform(_transform);
|
||||
Transform transform = _transform;
|
||||
Quaternion rot;
|
||||
Quaternion::Multiply(transform.Orientation, _colliderOrientation, rot);
|
||||
transform.Orientation = rot;
|
||||
_orientedBox.Transform(transform);
|
||||
_orientedBox.GetBoundingBox(_box);
|
||||
BoundingSphere::FromBox(_box, _sphere);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user