From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Dynamics/DeformableMesh.h | 146 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 Runtime/Dynamics/DeformableMesh.h (limited to 'Runtime/Dynamics/DeformableMesh.h') diff --git a/Runtime/Dynamics/DeformableMesh.h b/Runtime/Dynamics/DeformableMesh.h new file mode 100644 index 0000000..ba5c78e --- /dev/null +++ b/Runtime/Dynamics/DeformableMesh.h @@ -0,0 +1,146 @@ +#ifndef DEFORMABLEMESH_H +#define DEFORMABLEMESH_H + +#include "Configuration/UnityConfigure.h" +#if ENABLE_CLOTH || DOXYGEN + +#include "Runtime/GameCode/Behaviour.h" +#include "Runtime/Math/Vector2.h" +#include "Runtime/Math/Vector3.h" +#include "Runtime/Math/Vector4.h" +#include "Runtime/Math/Color.h" +#include "Runtime/Utilities/dynamic_array.h" + +class Mesh; +class ClothRenderer; +class NxMeshData; +class NxScene; + +class NxClothMesh; +class NxCloth; +class NxClothDesc; + +namespace Unity { + +class Cloth : public Behaviour +{ +public: + REGISTER_DERIVED_ABSTRACT_CLASS (Cloth, Behaviour) + DECLARE_OBJECT_SERIALIZE (Cloth) + + Cloth (MemLabelId label, ObjectCreationMode mode); + + bool GetSuspended() { return m_SuspendCount != 0; } + void SetSuspended(bool suspended); + virtual void SetEnabled (bool enab); + virtual void Reset (); + + + virtual void FixedUpdate (); + virtual void Deactivate (DeactivateOperation operation); + virtual void AwakeFromLoad(AwakeFromLoadMode mode); + virtual void AddToManager (); + virtual void RemoveFromManager (); + virtual void ProcessMeshForRenderer (); + + static void InitializeClass(); + static void CleanupClass (); + +#if UNITY_EDITOR + void TransformChanged( int changeMask ); + void BecameVisible(); + void BecameInvisible(); +#endif + + float GetBendingStiffness () const { return m_BendingStiffness; } + void SetBendingStiffness (float value); + + float GetStretchingStiffness () const { return m_StretchingStiffness; } + void SetStretchingStiffness (float value); + + float GetDamping () const { return m_Damping; } + void SetDamping (float value); + + bool GetUseGravity () const { return m_UseGravity; } + void SetUseGravity (bool value); + + Vector3f GetExternalAcceleration () const { return m_ExternalAcceleration; } + void SetExternalAcceleration (const Vector3f &value); + + Vector3f GetRandomAcceleration () const { return m_RandomAcceleration; } + void SetRandomAcceleration (const Vector3f &value); + + bool GetSelfCollision () { return m_SelfCollision; } + void SetSelfCollision (bool value); + + float GetThickness () const { return m_Thickness; } + void SetThickness (float value); + + dynamic_array &GetVertices () { return m_Vertices; } + dynamic_array &GetNormals () { return m_Normals; } +protected: + + virtual void PauseSimulation (); + virtual void ResumeSimulation (); + + virtual void Create () = 0; + virtual void Cleanup (); + bool SetupMeshData (bool transformToWorldSpace, bool externalVertexTranlation, int tearMemoryFactor); + void SetupMeshBuffers (NxMeshData &meshData); + + void SetupClothDesc (NxClothDesc &clothDesc, bool tearable); + NxClothMesh *CookClothMesh (bool tearable); + + // configuration + PPtr m_Mesh; + float m_BendingStiffness; /// m_Vertices; + dynamic_array m_TranslatedVertices; + dynamic_array *m_VerticesForRendering; + dynamic_array m_Normals; + dynamic_array m_TranslatedNormals; + dynamic_array *m_NormalsForRendering; + dynamic_array m_Indices; + dynamic_array m_TranslatedIndices; + dynamic_array *m_IndicesForRendering; + dynamic_array m_Tangents; + dynamic_array m_UVs; + dynamic_array m_UV1s; + dynamic_array m_Colors; + UInt32 m_NumParentIndices; + dynamic_array m_ParentIndices; + dynamic_array m_VertexTranslationTable; + + BehaviourListNode m_FixedUpdateNode; + + friend class ::ClothRenderer; +}; +} + +#endif // ENABLE_CLOTH || DOXYGEN +#endif // DEFORMABLEMESH_H -- cgit v1.1-26-g67d0