From 753829677515d78348f8739db8a3a7f528064075 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 15 Feb 2024 11:45:50 +0100 Subject: [PATCH] Refactor `PhysicalMaterial` usage to utilize `JsonAssetReference` struct --- .../Engine/Physics/Colliders/CharacterController.cpp | 2 +- Source/Engine/Physics/Colliders/Collider.cpp | 4 ++-- Source/Engine/Physics/Colliders/Collider.h | 6 +++--- Source/Engine/Physics/PhysicalMaterial.h | 10 +--------- Source/Engine/Physics/Physics.cpp | 5 ----- Source/Engine/Terrain/Terrain.cpp | 2 +- Source/Engine/Terrain/Terrain.h | 6 +++--- Source/Engine/Terrain/TerrainPatch.cpp | 2 +- 8 files changed, 12 insertions(+), 25 deletions(-) diff --git a/Source/Engine/Physics/Colliders/CharacterController.cpp b/Source/Engine/Physics/Colliders/CharacterController.cpp index 9b36a92ff..38ab0394d 100644 --- a/Source/Engine/Physics/Colliders/CharacterController.cpp +++ b/Source/Engine/Physics/Colliders/CharacterController.cpp @@ -206,7 +206,7 @@ void CharacterController::CreateController() _cachedScale = GetScale(); const float scaling = _cachedScale.GetAbsolute().MaxValue(); const Vector3 position = _transform.LocalToWorld(_center); - _controller = PhysicsBackend::CreateController(GetPhysicsScene()->GetPhysicsScene(), this, this, _contactOffset, position, _slopeLimit, (int32)_nonWalkableMode, Material.Get(), Math::Abs(_radius) * scaling, Math::Abs(_height) * scaling, _stepOffset, _shape); + _controller = PhysicsBackend::CreateController(GetPhysicsScene()->GetPhysicsScene(), this, this, _contactOffset, position, _slopeLimit, (int32)_nonWalkableMode, Material, Math::Abs(_radius) * scaling, Math::Abs(_height) * scaling, _stepOffset, _shape); // Setup PhysicsBackend::SetControllerUpDirection(_controller, _upDirection); diff --git a/Source/Engine/Physics/Colliders/Collider.cpp b/Source/Engine/Physics/Colliders/Collider.cpp index 4326a033d..e354057d2 100644 --- a/Source/Engine/Physics/Colliders/Collider.cpp +++ b/Source/Engine/Physics/Colliders/Collider.cpp @@ -201,7 +201,7 @@ void Collider::CreateShape() // Create shape const bool isTrigger = _isTrigger && CanBeTrigger(); - _shape = PhysicsBackend::CreateShape(this, shape, Material.Get(), IsActiveInHierarchy(), isTrigger); + _shape = PhysicsBackend::CreateShape(this, shape, Material, IsActiveInHierarchy(), isTrigger); PhysicsBackend::SetShapeContactOffset(_shape, _contactOffset); UpdateLayerBits(); } @@ -288,7 +288,7 @@ void Collider::OnMaterialChanged() { // Update the shape material if (_shape) - PhysicsBackend::SetShapeMaterial(_shape, Material.Get()); + PhysicsBackend::SetShapeMaterial(_shape, Material); } void Collider::BeginPlay(SceneBeginData* data) diff --git a/Source/Engine/Physics/Colliders/Collider.h b/Source/Engine/Physics/Colliders/Collider.h index bd17aa27a..cbbb7e522 100644 --- a/Source/Engine/Physics/Colliders/Collider.h +++ b/Source/Engine/Physics/Colliders/Collider.h @@ -4,7 +4,7 @@ #include "Engine/Physics/Types.h" #include "Engine/Content/JsonAsset.h" -#include "Engine/Content/AssetReference.h" +#include "Engine/Content/JsonAssetReference.h" #include "Engine/Physics/Actors/PhysicsColliderActor.h" struct RayCastHit; @@ -80,8 +80,8 @@ public: /// /// The physical material used to define the collider physical properties. /// - API_FIELD(Attributes="EditorOrder(2), DefaultValue(null), AssetReference(typeof(PhysicalMaterial), true), EditorDisplay(\"Collider\")") - AssetReference Material; + API_FIELD(Attributes="EditorOrder(2), DefaultValue(null), EditorDisplay(\"Collider\")") + JsonAssetReference Material; public: /// diff --git a/Source/Engine/Physics/PhysicalMaterial.h b/Source/Engine/Physics/PhysicalMaterial.h index ff27437e8..f1aa0c1fd 100644 --- a/Source/Engine/Physics/PhysicalMaterial.h +++ b/Source/Engine/Physics/PhysicalMaterial.h @@ -15,17 +15,9 @@ class FLAXENGINE_API PhysicalMaterial final : public ISerializable API_AUTO_SERIALIZATION(); DECLARE_SCRIPTING_TYPE_MINIMAL(PhysicalMaterial); private: - void* _material; + void* _material = nullptr; public: - /// - /// Initializes a new instance of the class. - /// - PhysicalMaterial(); - - /// - /// Finalizes an instance of the class. - /// ~PhysicalMaterial(); public: diff --git a/Source/Engine/Physics/Physics.cpp b/Source/Engine/Physics/Physics.cpp index 5d9b218ec..942f1b79b 100644 --- a/Source/Engine/Physics/Physics.cpp +++ b/Source/Engine/Physics/Physics.cpp @@ -78,11 +78,6 @@ void PhysicsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* } } -PhysicalMaterial::PhysicalMaterial() - : _material(nullptr) -{ -} - PhysicalMaterial::~PhysicalMaterial() { if (_material) diff --git a/Source/Engine/Terrain/Terrain.cpp b/Source/Engine/Terrain/Terrain.cpp index f347e3732..772abf4d3 100644 --- a/Source/Engine/Terrain/Terrain.cpp +++ b/Source/Engine/Terrain/Terrain.cpp @@ -239,7 +239,7 @@ void Terrain::OnPhysicalMaterialChanged() const auto patch = _patches[pathIndex]; if (patch->HasCollision()) { - PhysicsBackend::SetShapeMaterial(patch->_physicsShape, PhysicalMaterial.Get()); + PhysicsBackend::SetShapeMaterial(patch->_physicsShape, PhysicalMaterial); } } } diff --git a/Source/Engine/Terrain/Terrain.h b/Source/Engine/Terrain/Terrain.h index 636f30206..1f495c5ab 100644 --- a/Source/Engine/Terrain/Terrain.h +++ b/Source/Engine/Terrain/Terrain.h @@ -2,7 +2,7 @@ #pragma once -#include "Engine/Content/JsonAsset.h" +#include "Engine/Content/JsonAssetReference.h" #include "Engine/Content/Assets/MaterialBase.h" #include "Engine/Physics/Actors/PhysicsColliderActor.h" @@ -79,8 +79,8 @@ public: /// /// The physical material used to define the terrain collider physical properties. /// - API_FIELD(Attributes="EditorOrder(520), DefaultValue(null), Limit(-1, 100, 0.1f), EditorDisplay(\"Collision\"), AssetReference(typeof(PhysicalMaterial), true)") - AssetReference PhysicalMaterial; + API_FIELD(Attributes="EditorOrder(520), DefaultValue(null), Limit(-1, 100, 0.1f), EditorDisplay(\"Collision\")") + JsonAssetReference<::PhysicalMaterial> PhysicalMaterial; /// /// The draw passes to use for rendering this object. diff --git a/Source/Engine/Terrain/TerrainPatch.cpp b/Source/Engine/Terrain/TerrainPatch.cpp index 8e05062c8..7fa449601 100644 --- a/Source/Engine/Terrain/TerrainPatch.cpp +++ b/Source/Engine/Terrain/TerrainPatch.cpp @@ -2125,7 +2125,7 @@ void TerrainPatch::CreateCollision() shape.SetHeightField(_physicsHeightField, heightScale, rowScale, columnScale); // Create shape - _physicsShape = PhysicsBackend::CreateShape(_terrain, shape, _terrain->PhysicalMaterial.Get(), _terrain->IsActiveInHierarchy(), false); + _physicsShape = PhysicsBackend::CreateShape(_terrain, shape, _terrain->PhysicalMaterial, _terrain->IsActiveInHierarchy(), false); PhysicsBackend::SetShapeLocalPose(_physicsShape, Vector3(0, _yOffset * terrainTransform.Scale.Y, 0), Quaternion::Identity); // Create static actor