123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #pragma once
- #include <AzCore/Component/Component.h>
- #include <AzCore/Component/EntityBus.h>
- #include <AzCore/Component/TransformBus.h>
- #include <AzFramework/Physics/Components/SimulatedBodyComponentBus.h>
- #include <AzFramework/Physics/RigidBodyBus.h>
- #include <PhysX/ComponentTypeIds.h>
- namespace AzPhysics
- {
- struct SimulatedBody;
- }
- namespace PhysX
- {
- class StaticRigidBody;
- class StaticRigidBodyComponent final
- : public AZ::Component
- , public AZ::EntityBus::Handler
- , public AzPhysics::SimulatedBodyComponentRequestsBus::Handler
- , public Physics::RigidBodyRequestBus::Handler
- , private AZ::TransformNotificationBus::Handler
- {
- public:
- AZ_COMPONENT(StaticRigidBodyComponent, StaticRigidBodyComponentTypeId);
- StaticRigidBodyComponent();
- explicit StaticRigidBodyComponent(AzPhysics::SceneHandle sceneHandle);
- ~StaticRigidBodyComponent();
- static void Reflect(AZ::ReflectContext* context);
- static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
- static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
- static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
- static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
- // RigidBodyRequests + SimulatedBodyComponentRequests overrides ...
- void EnablePhysics() override;
- void DisablePhysics() override;
- bool IsPhysicsEnabled() const override;
- AzPhysics::SceneQueryHit RayCast(const AzPhysics::RayCastRequest& request) override;
- AZ::Aabb GetAabb() const override;
- // AzPhysics::SimulatedBodyComponentRequests overrides ...
- AzPhysics::SimulatedBodyHandle GetSimulatedBodyHandle() const override;
- AzPhysics::SimulatedBody* GetSimulatedBody() override;
- private:
- void CreateRigidBody();
- void DestroyRigidBody();
- // AZ::Component
- void Activate() override;
- void Deactivate() override;
- // AZ::EntityBus overrides ...
- void OnEntityActivated(const AZ::EntityId& entityId) override;
- // AZ::TransformNotificationsBus
- void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override;
- // -------------------------------------------
- // Unimplemented part of RigidBodyRequests overrides ...
- // In the future RigidBodyRequests can be split more to avoid
- // having to override these functions.
- AZ::Vector3 GetCenterOfMassWorld() const override;
- AZ::Vector3 GetCenterOfMassLocal() const override;
- AZ::Matrix3x3 GetInertiaWorld() const override;
- AZ::Matrix3x3 GetInertiaLocal() const override;
- AZ::Matrix3x3 GetInverseInertiaWorld() const override;
- AZ::Matrix3x3 GetInverseInertiaLocal() const override;
- float GetMass() const override;
- float GetInverseMass() const override;
- void SetMass(float mass) override;
- void SetCenterOfMassOffset(const AZ::Vector3& comOffset) override;
- AZ::Vector3 GetLinearVelocity() const override;
- void SetLinearVelocity(const AZ::Vector3& velocity) override;
- AZ::Vector3 GetAngularVelocity() const override;
- void SetAngularVelocity(const AZ::Vector3& angularVelocity) override;
- AZ::Vector3 GetLinearVelocityAtWorldPoint(const AZ::Vector3& worldPoint) const override;
- void ApplyLinearImpulse(const AZ::Vector3& impulse) override;
- void ApplyLinearImpulseAtWorldPoint(const AZ::Vector3& impulse, const AZ::Vector3& worldPoint) override;
- void ApplyAngularImpulse(const AZ::Vector3& angularImpulse) override;
- float GetLinearDamping() const override;
- void SetLinearDamping(float damping) override;
- float GetAngularDamping() const override;
- void SetAngularDamping(float damping) override;
- bool IsAwake() const override;
- void ForceAsleep() override;
- void ForceAwake() override;
- bool IsKinematic() const override;
- void SetKinematic(bool kinematic) override;
- void SetKinematicTarget(const AZ::Transform& targetPosition) override;
- bool IsGravityEnabled() const override;
- void SetGravityEnabled(bool enabled) override;
- void SetSimulationEnabled(bool enabled) override;
- float GetSleepThreshold() const override;
- void SetSleepThreshold(float threshold) override;
- AzPhysics::RigidBody* GetRigidBody() override;
- // -------------------------------------------
- AzPhysics::SimulatedBodyHandle m_staticRigidBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
- AzPhysics::SceneHandle m_attachedSceneHandle = AzPhysics::InvalidSceneHandle;
- };
- } // namespace PhysX
|