/*
* 作成日: 2008/07/07
*/
package jp.ac.fit.asura.nao.strategy.actions;
import jp.ac.fit.asura.nao.RobotContext;
import jp.ac.fit.asura.nao.localization.WorldObject;
import jp.ac.fit.asura.nao.motion.Motion;
import jp.ac.fit.asura.nao.motion.parameterized.ShootAction.LeftShootAction;
import jp.ac.fit.asura.nao.motion.parameterized.ShootAction.RightShootAction;
import jp.ac.fit.asura.nao.strategy.StrategyContext;
import jp.ac.fit.asura.nao.strategy.Task;
import org.apache.log4j.Logger;
/**
* @author $Author: sey $
*
* @version $Id: ShootTask.java 709 2008-11-23 07:40:31Z sey $
*
*/
@Deprecated
public class ShootTask extends Task {
private Logger log = Logger.getLogger(ShootTask.class);
private LeftShootAction left;
private RightShootAction right;
public String getName() {
return "ShootTask";
}
public boolean canExecute(StrategyContext context) {
WorldObject ball = context.getBall();
if (ball.getConfidence() < 100)
return false;
if (ball.getDistance() > 400) {
return false;
}
return true;
}
public void init(RobotContext context) {
// left = (LeftShootAction) context.getMotor().getParaAction(
// Motions.ACTION_SHOOT_LEFT);
// right = (RightShootAction) context.getMotor().getParaAction(
// Motions.ACTION_SHOOT_RIGHT);
assert left != null;
assert right != null;
}
public void enter(StrategyContext context) {
WorldObject ball = context.getBall();
log.debug("ball dist:" + ball.getDistance() + " head:"
+ ball.getHeading());
// キックする足.1が左,-1が右
int kickSide = 0;
// シュートのプランニング
// SomatoSensoryCortex ssc =
// context.getSuperContext().getSensoryCortex();
// Vector4f position = ssc.getBallPosition();
// if (position.w > 100) {
// log.trace("use SensoryCortex info");
// kickSide = position.x > 0 ? -1 : 1;
// }
Motion motion;
int x = ball.getX() - context.getSelf().getX();
int y = ball.getY() - context.getSelf().getY();
if (ball.getHeading() > 0) {
motion = left.create(x, y);
} else {
motion = right.create(x, y);
}
context.makemotion(motion);
context.getScheduler().setTTL(motion.getTotalFrames() / 2);
}
public void leave(StrategyContext context) {
context.getBall().invalidate();
}
public void continueTask(StrategyContext context) {
}
}