23#include <kiwano-physics/Global.h>
30KGE_DECLARE_SMART_PTR(Fixture);
47 float friction = 0.2f;
48 float restitution = 0.0f;
49 bool is_sensor =
false;
53 Param(
float density,
float friction = 0.2f,
float restitution = 0.f,
bool is_sensor =
false)
56 , restitution(restitution)
57 , is_sensor(is_sensor)
67 static FixturePtr CreateCircle(
const Param& param,
float radius,
const Point& offset =
Point());
75 static FixturePtr CreateRect(
const Param& param,
const Size& size,
const Point& offset =
Point(),
76 float rotation = 0.f);
82 static FixturePtr CreatePolygon(
const Param& param,
const Vector<Point>& vertexs);
89 static FixturePtr CreateEdge(
const Param& param,
const Point& p1,
const Point& p2);
96 static FixturePtr CreateChain(
const Param& param,
const Vector<Point>& vertices,
bool loop =
false);
104 bool Init(PhysicBodyPtr body);
108 bool Init(PhysicBody* body);
112 PhysicBody* GetBody()
const;
116 bool IsSensor()
const;
121 void SetSensor(
bool sensor);
125 void GetMassData(
float* mass,
Point* center,
float* inertia)
const;
129 float GetDensity()
const;
133 void SetDensity(
float density);
137 float GetFriction()
const;
141 void SetFriction(
float friction);
145 float GetRestitution()
const;
149 void SetRestitution(
float restitution);
153 bool TestPoint(
const Point& p)
const;
161 b2Fixture* GetB2Fixture()
const;
165 void SetB2Fixture(b2Fixture* fixture);
167 bool operator==(
const Fixture& rhs)
const;
168 bool operator!=(
const Fixture& rhs)
const;
172 std::unique_ptr<b2Shape> shape_;
173 Fixture::Param param_;
180 template <
typename _Ty>
184 using iterator_category = std::forward_iterator_tag;
188 using difference_type = ptrdiff_t;
200 inline pointer operator->()
const
202 return std::pointer_traits<pointer>::pointer_to(**
this);
205 inline IteratorImpl& operator++()
207 b2Fixture* next = elem_->GetB2Fixture()->GetNext();
209 elem_ =
static_cast<Fixture*
>(next->GetUserData());
213 inline IteratorImpl operator++(
int)
215 IteratorImpl old = *
this;
220 inline bool operator==(
const IteratorImpl& rhs)
const
222 return elem_ == rhs.elem_;
225 inline bool operator!=(
const IteratorImpl& rhs)
const
227 return !operator==(rhs);
238 using iterator = IteratorImpl<value_type>;
239 using const_iterator = IteratorImpl<const value_type>;
261 inline iterator begin()
263 return iterator(first_);
266 inline const_iterator begin()
const
271 inline const_iterator cbegin()
const
273 return const_iterator(first_);
276 inline iterator end()
278 return iterator(
nullptr);
281 inline const_iterator end()
const
286 inline const_iterator cend()
const
288 return const_iterator(
nullptr);
309 fixture_->SetSensor(sensor);
326 fixture_->SetDensity(density);
343 fixture_->SetFriction(friction);
360 fixture_->SetRestitution(restitution);
375 fixture->SetUserData(
this);
379inline bool Fixture::operator==(
const Fixture& rhs)
const
381 return fixture_ == rhs.fixture_;
384inline bool Fixture::operator!=(
const Fixture& rhs)
const
386 return fixture_ != rhs.fixture_;
基础对象
Definition: ObjectBase.h:137
物理夹具列表
Definition: Fixture.h:179
物理夹具
Definition: Fixture.h:40
b2Fixture * GetB2Fixture() const
获取b2Fixture
Definition: Fixture.h:365
void SetB2Fixture(b2Fixture *fixture)
设置b2Fixture
Definition: Fixture.h:370
void SetDensity(float density)
设置密度
Definition: Fixture.h:319
void SetSensor(bool sensor)
设置夹具是否是接触传感器
Definition: Fixture.h:302
bool IsSensor() const
是否是接触传感器
Definition: Fixture.h:297
void SetFriction(float friction)
设置摩擦力 [N]
Definition: Fixture.h:336
float GetRestitution() const
获取弹性恢复
Definition: Fixture.h:348
void SetRestitution(float restitution)
设置弹性恢复
Definition: Fixture.h:353
float GetDensity() const
获取密度
Definition: Fixture.h:314
float GetFriction() const
获取摩擦力 [N]
Definition: Fixture.h:331
夹具参数
Definition: Fixture.h:45
float density
密度
Definition: Fixture.h:46
float restitution
弹性恢复
Definition: Fixture.h:48
bool is_sensor
是否是接触传感器
Definition: Fixture.h:49
float friction
摩擦力
Definition: Fixture.h:47