package com.indignado.functional.test.levels.flyingDart;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.utils.ObjectMap;
import com.indignado.logicbricks.components.RigidBodiesComponents;
import com.indignado.logicbricks.core.Script;
import com.indignado.logicbricks.config.Settings;
import com.indignado.logicbricks.core.actuators.Actuator;
import com.indignado.logicbricks.core.actuators.InstanceEntityActuator;
import com.indignado.logicbricks.core.controllers.ScriptController;
import com.indignado.logicbricks.core.data.LogicBrick;
import com.indignado.logicbricks.core.sensors.AlwaysSensor;
import com.indignado.logicbricks.core.sensors.MouseSensor;
import com.indignado.logicbricks.core.sensors.Sensor;
import com.indignado.logicbricks.utils.Log;
/**
* @author Rubentxu.
*/
public class MousePositionScript implements Script {
private boolean init = false;
@Override
public void execute(ScriptController controller, ObjectMap<String, Sensor> sensors, ObjectMap<String, Actuator> actuators) {
MouseSensor mouseSensor = (MouseSensor) sensors.get("SensorMouse");
AlwaysSensor delaySensor = (AlwaysSensor) sensors.get("DelayTrigger");
if (mouseSensor.pulseState.equals(LogicBrick.BrickMode.BM_ON) && mouseSensor.positive
&& delaySensor.pulseState.equals(LogicBrick.BrickMode.BM_ON) && delaySensor.positive) {
controller.pulseState = mouseSensor.pulseState;
Vector2 mousePosition = mouseSensor.positionSignal;
Log.debug("MousePositionScript::Trigger", "mouse position %s", mousePosition);
InstanceEntityActuator instanceEntityActuator = (InstanceEntityActuator) actuators.get("ActuatorInstanceDart");
Body ownerBody = instanceEntityActuator.owner.getComponent(RigidBodiesComponents.class).rigidBodies.first();
float angle = MathUtils.atan2(mousePosition.y - ownerBody.getPosition().y, mousePosition.x - ownerBody.getPosition().x);
instanceEntityActuator.initialVelocity = new Vector2(Settings.WIDTH / 2 * MathUtils.cos(angle), Settings.WIDTH * MathUtils.sin(angle));
instanceEntityActuator.angle = angle;
controller.pulseState = LogicBrick.BrickMode.BM_ON;
Log.debug("MousePositionScript::Trigger", "Initial Velocity %s Angle %f", instanceEntityActuator.initialVelocity.toString(), angle);
} else {
controller.pulseState = LogicBrick.BrickMode.BM_OFF;
}
}
}