package com.siondream.core.entity.systems;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Transform;
import com.siondream.core.entity.components.OverridePhysicsComponent;
import com.siondream.core.entity.components.PhysicsComponent;
import com.siondream.core.entity.components.TransformComponent;
import ashley.core.Entity;
import ashley.core.Family;
import ashley.systems.IteratingSystem;
public class PhysicsSystem extends IteratingSystem {
float alpha;
public PhysicsSystem() {
super(Family.getFamilyFor(PhysicsComponent.class,
TransformComponent.class));
alpha = 1.0f;
}
@Override
public void update(float deltaTime) {
super.update(deltaTime);
}
@Override
public void processEntity(Entity entity, float deltaTime) {
PhysicsComponent physics = entity.getComponent(PhysicsComponent.class);
TransformComponent transform = entity.getComponent(TransformComponent.class);
OverridePhysicsComponent override = entity.getComponent(OverridePhysicsComponent.class);
Transform bodyTransform = physics.body.getTransform();
if (override != null && override.enable) {
Vector2 bodyPosition = bodyTransform.getPosition();
bodyPosition.set(transform.position.x, transform.position.y);
physics.body.setTransform(bodyPosition, transform.angle);
if (override.autoDisable) {
override.enable = false;
}
}
else {
Vector2 bodyPosition = bodyTransform.getPosition();
transform.position.x = bodyPosition.x * alpha + transform.position.x * (1.0f - alpha);
transform.position.y = bodyPosition.y * alpha + transform.position.y * (1.0f - alpha);
transform.angle = bodyTransform.getRotation() * alpha + transform.angle * (1.0f - alpha);
}
}
public void interpolate(float deltaTime, float alpha) {
this.alpha = alpha;
super.update(deltaTime);
alpha = 1.0f;
}
}