mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 09:16:01 +08:00
[cpp] Port physics translation and rotation methods.
This commit is contained in:
parent
73cb252bef
commit
922ac2bec9
@ -154,6 +154,10 @@ namespace spine {
|
|||||||
|
|
||||||
virtual void update(Physics physics);
|
virtual void update(Physics physics);
|
||||||
|
|
||||||
|
void translate(float x, float y);
|
||||||
|
|
||||||
|
void rotate(float x, float y, float degrees);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PhysicsConstraintData& _data;
|
PhysicsConstraintData& _data;
|
||||||
Bone* _bone;
|
Bone* _bone;
|
||||||
|
|||||||
@ -237,6 +237,13 @@ namespace spine {
|
|||||||
|
|
||||||
void update(float delta);
|
void update(float delta);
|
||||||
|
|
||||||
|
/// Rotates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone rotated around the
|
||||||
|
/// specified point in world space.
|
||||||
|
void physicsTranslate(float x, float y);
|
||||||
|
|
||||||
|
/// Calls {@link PhysicsConstraint#rotate(float, float, float)} for each physics constraint. */
|
||||||
|
void physicsRotate(float x, float y, float degrees);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SkeletonData *_data;
|
SkeletonData *_data;
|
||||||
Vector<Bone *> _bones;
|
Vector<Bone *> _bones;
|
||||||
|
|||||||
@ -464,3 +464,19 @@ void PhysicsConstraint::update(Physics physics) {
|
|||||||
}
|
}
|
||||||
bone->updateAppliedTransform();
|
bone->updateAppliedTransform();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PhysicsConstraint::rotate(float x, float y, float degrees) {
|
||||||
|
float r = degrees * MathUtil::Deg_Rad, cos = MathUtil::cos(r), sin = MathUtil::sin(r);
|
||||||
|
r = _tx * cos - _ty * sin;
|
||||||
|
_ty = _tx * sin + _ty * cos;
|
||||||
|
_tx = r;
|
||||||
|
float dx = _cx - x, dy = _cy - y;
|
||||||
|
translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PhysicsConstraint::translate(float x, float y) {
|
||||||
|
_ux -= x;
|
||||||
|
_uy -= y;
|
||||||
|
_cx -= x;
|
||||||
|
_cy -= y;
|
||||||
|
}
|
||||||
|
|||||||
@ -711,3 +711,15 @@ void Skeleton::setTime(float time) {
|
|||||||
void Skeleton::update(float delta) {
|
void Skeleton::update(float delta) {
|
||||||
_time += delta;
|
_time += delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Skeleton::physicsTranslate(float x, float y) {
|
||||||
|
for (int i = 0; i < (int)_physicsConstraints.size(); i++) {
|
||||||
|
_physicsConstraints[i]->translate(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Skeleton::physicsRotate(float x, float y, float degrees) {
|
||||||
|
for (int i = 0; i < (int)_physicsConstraints.size(); i++) {
|
||||||
|
_physicsConstraints[i]->rotate(x, y, degrees);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user