package com.uwsoft.editor.renderer.systems.action;
import com.badlogic.ashley.core.Component;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.gdx.math.Vector2;
import com.uwsoft.editor.renderer.systems.action.data.ForceData;
import com.uwsoft.editor.renderer.systems.action.logic.ActionLogic;
import com.uwsoft.editor.renderer.systems.action.logic.ForceAction;
/**
* Created by aurel on 02/04/16.
*/
public class PhysicsActions {
private static void initialize(Class<? extends ActionLogic> type) {
try {
Actions.registerActionClass(type);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**
* Apply a force to an entity with physics component. The force is applied as long as
* the corresponding entity as a physics component.
* @param force The world force vector, usually in Newtons (N)
* @return The com.uwsoft.editor.renderer.systems.action.data.ForceData object
*/
public static ForceData force(Vector2 force) {
initialize(ForceAction.class);
ForceData forceData = new ForceData(force);
forceData.logicClassName = ForceAction.class.getName();
return forceData;
}
/**
* Apply a force to an entity with physics component. The force is applied as long as
* the corresponding entity as a physics component.
* @param force The world force vector, usually in Newtons (N)
* @param relativePoint The point where the force is applied relative to the body origin
* @return The com.uwsoft.editor.renderer.systems.action.data.ForceData object
*/
public static ForceData force(Vector2 force, Vector2 relativePoint) {
initialize(ForceAction.class);
ForceData forceData = new ForceData(force, relativePoint);
forceData.logicClassName = ForceAction.class.getName();
return forceData;
}
/**
* Apply a force to an entity with physics component.
* @param force The world force vector, usually in Newtons (N)
* @param relativePoint The point where the force is applied relative to the body origin
* @param linkedComponent The force is applied as long as the corresponding entity
* has this component
* @return The com.uwsoft.editor.renderer.systems.action.data.ForceData object
*/
public static ForceData force(Vector2 force, Vector2 relativePoint, Class<? extends Component> linkedComponent) {
ForceData forceData = force(force, relativePoint);
forceData.linkedComponentMapper = ComponentMapper.getFor(linkedComponent);
return forceData;
}
}