-
Notifications
You must be signed in to change notification settings - Fork 65
/
PhysicsAdjustSystem.java
45 lines (37 loc) · 1.88 KB
/
PhysicsAdjustSystem.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package games.rednblack.editor.system;
import com.artemis.annotations.All;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import games.rednblack.editor.renderer.components.ParentNodeComponent;
import games.rednblack.editor.renderer.components.TransformComponent;
import games.rednblack.editor.renderer.components.physics.PhysicsBodyComponent;
import games.rednblack.editor.renderer.systems.PhysicsSystem;
import games.rednblack.editor.renderer.utils.TransformMathUtils;
import games.rednblack.editor.utils.runtime.SandboxComponentRetriever;
@All(PhysicsBodyComponent.class)
public class PhysicsAdjustSystem extends PhysicsSystem {
private final Vector2 transformVec = new Vector2();
public PhysicsAdjustSystem() {
setPhysicsOn(false);
}
@Override
protected void process(int entity) {
TransformComponent transformComponent = transformComponentMapper.get(entity);
super.process(entity);
PhysicsBodyComponent physicsBodyComponent = SandboxComponentRetriever.get(entity, PhysicsBodyComponent.class);
if(physicsBodyComponent.body == null) return;
int parentEntity = parentNodeComponentMapper.get(entity).parentEntity;
ParentNodeComponent rootParentNode = parentNodeComponentMapper.get(parentEntity);
float rotation = transformComponent.rotation;
if (rootParentNode != null) {
transformVec.x = transformComponent.originX;
transformVec.y = transformComponent.originY;
TransformMathUtils.localToSceneCoordinates(entity, transformVec, transformComponentMapper, parentNodeComponentMapper);
rotation = TransformMathUtils.localToSceneRotation(entity, transformComponentMapper, parentNodeComponentMapper);
} else {
transformVec.x = transformComponent.x + transformComponent.originX;
transformVec.y = transformComponent.y + transformComponent.originY;
}
physicsBodyComponent.body.setTransform(transformVec, rotation * MathUtils.degreesToRadians);
}
}