package com.shootoff.targets;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.shootoff.gui.targets.TargetView.TargetSelectionListener;
import javafx.geometry.Bounds;
import javafx.geometry.Dimension2D;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.shape.Rectangle;
/**
* A potentially animated target that the user can shoot, reposition, and
* resize. This interface should be implemented by a class that implements the
* GUI code to allow users to see and interact with targets.
*
* @author phrack
*/
public interface Target {
public static final String TAG_IGNORE_HIT = "ignoreHit";
public static final String TAG_RESIZABLE = "isResizable";
public static final String TAG_OPACITY = "opacity";
public static final String TAG_VISIBLE = "visible";
public static final String TAG_FILL_CANVAS = "fillCanvas";
public static final String TAG_DEFAULT_PERCEIVED_WIDTH = "defaultPerceivedWidth";
public static final String TAG_DEFAULT_PERCEIVED_HEIGHT = "defaultPerceivedHeight";
public static final String TAG_DEFAULT_PERCEIVED_DISTANCE = "defaultDistance";
public static final String TAG_CURRENT_PERCEIVED_DISTANCE = "currentDistance";
public static final String TAG_SHOOTER_DISTANCE = "shooterDistance";
File getTargetFile();
int getTargetIndex();
void fillParent();
void addTargetChild(Node child);
void removeTargetChild(Node child);
List<TargetRegion> getRegions();
/**
* Check whether or not this target contains a particular region.
*
* @param region
* a region that may exist in this target
* @return <tt>true</tt> if the target contains <tt>region</tt>
*/
boolean hasRegion(TargetRegion region);
void setVisible(boolean isVisible);
boolean isVisible();
void setPosition(double x, double y);
Point2D getPosition();
void setDimensions(double newWidth, double newHeight);
Dimension2D getDimension();
void scale(double widthFactor, double heightFactor);
Bounds getBoundsInParent();
Point2D parentToLocal(double x, double y);
void setClip(Rectangle clip);
void animate(TargetRegion region, List<String> args);
void reverseAnimation(TargetRegion region);
Optional<Hit> isHit(double x, double y);
boolean tagExists(String name);
String getTag(String name);
Map<String, String> getAllTags();
void setTargetSelectionListener(TargetSelectionListener selectionListener);
double getScaleX();
double getScaleY();
}