aboutsummaryrefslogtreecommitdiff
path: root/src/3rdparty/Box2D/Rope/b2Rope.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-09-13 15:32:29 +0800
committerchai <chaifix@163.com>2019-09-13 15:32:29 +0800
commite095043485d1d298571af6d9eca7f0db9009ea7a (patch)
tree8e60ba581f031ac293301515408f185dedd92149 /src/3rdparty/Box2D/Rope/b2Rope.h
parent20535cb86266d7a4828009f3ddca42e35269b9e2 (diff)
+box2d
Diffstat (limited to 'src/3rdparty/Box2D/Rope/b2Rope.h')
-rw-r--r--src/3rdparty/Box2D/Rope/b2Rope.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/3rdparty/Box2D/Rope/b2Rope.h b/src/3rdparty/Box2D/Rope/b2Rope.h
new file mode 100644
index 0000000..40be9e7
--- /dev/null
+++ b/src/3rdparty/Box2D/Rope/b2Rope.h
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2011 Erin Catto http://www.box2d.org
+*
+* This software is provided 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages
+* arising from the use of this software.
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef B2_ROPE_H
+#define B2_ROPE_H
+
+#include "Box2D/Common/b2Math.h"
+
+class b2Draw;
+
+///
+struct b2RopeDef
+{
+ b2RopeDef()
+ {
+ vertices = nullptr;
+ count = 0;
+ masses = nullptr;
+ gravity.SetZero();
+ damping = 0.1f;
+ k2 = 0.9f;
+ k3 = 0.1f;
+ }
+
+ ///
+ b2Vec2* vertices;
+
+ ///
+ int32 count;
+
+ ///
+ float32* masses;
+
+ ///
+ b2Vec2 gravity;
+
+ ///
+ float32 damping;
+
+ /// Stretching stiffness
+ float32 k2;
+
+ /// Bending stiffness. Values above 0.5 can make the simulation blow up.
+ float32 k3;
+};
+
+///
+class b2Rope
+{
+public:
+ b2Rope();
+ ~b2Rope();
+
+ ///
+ void Initialize(const b2RopeDef* def);
+
+ ///
+ void Step(float32 timeStep, int32 iterations);
+
+ ///
+ int32 GetVertexCount() const
+ {
+ return m_count;
+ }
+
+ ///
+ const b2Vec2* GetVertices() const
+ {
+ return m_ps;
+ }
+
+ ///
+ void Draw(b2Draw* draw) const;
+
+ ///
+ void SetAngle(float32 angle);
+
+private:
+
+ void SolveC2();
+ void SolveC3();
+
+ int32 m_count;
+ b2Vec2* m_ps;
+ b2Vec2* m_p0s;
+ b2Vec2* m_vs;
+
+ float32* m_ims;
+
+ float32* m_Ls;
+ float32* m_as;
+
+ b2Vec2 m_gravity;
+ float32 m_damping;
+
+ float32 m_k2;
+ float32 m_k3;
+};
+
+#endif