Initial version of pathfinding - fixed SolderPen

This commit is contained in:
cognitivegears 2014-04-21 22:48:39 -05:00
parent a8e68af6db
commit 2644f5a2dc
2 changed files with 33 additions and 43 deletions

View File

@ -5,6 +5,7 @@ import com.droidquest.Wire;
import com.droidquest.chipstuff.Port; import com.droidquest.chipstuff.Port;
import com.droidquest.devices.Device; import com.droidquest.devices.Device;
import com.droidquest.items.Item; import com.droidquest.items.Item;
import com.droidquest.pathfinder.Node;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -12,6 +13,7 @@ import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList;
public class SolderingPen extends Device implements Avatar { public class SolderingPen extends Device implements Avatar {
private boolean hot; private boolean hot;
@ -388,50 +390,23 @@ public class SolderingPen extends Device implements Avatar {
return false; return false;
} }
public void MouseClick(MouseEvent e) { @Override
int button = 0; protected int getWidthModifier() {
if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { return 2;
button = 1; }
}
if ((e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
button = 3;
}
if (button == 1) { @Override
if (e.getClickCount() == 1) { protected int getHeightModifier() {
autoX = e.getX() - 2; return 20;
autoY = e.getY() - 20; }
automove = 1;
}
else if (e.getClickCount() == 2) {
int dx = e.getX() - 2 - x;
int dy = e.getY() - 20 - y;
if (Math.abs(dx) > Math.abs(dy)) {
autoY = 0;
autoX = 28;
if (dx < 0) {
autoX = -28;
}
automove = 2;
}
else {
autoX = 0;
autoY = 32;
if (dy < 0) {
autoY = -32;
}
automove = 2;
}
}
}
if (button == 3) {
KeyEvent k = new KeyEvent(e.getComponent(), e.getID(),
e.getWhen(), 0,
KeyEvent.VK_SPACE, ' ');
KeyUp(k);
}
@Override
protected void setFinePositioning(MouseEvent e) {
// Fine positioning needed for solderpen
int finalX = e.getX() - getWidthModifier();
int finalY = e.getY() - getHeightModifier();
autoPath.add(new Node(finalX, finalY));
} }
@Override @Override

View File

@ -234,6 +234,19 @@ public class Item implements Serializable, Cloneable {
autoPath = pf.search(startX, startY, endX, endY, this); autoPath = pf.search(startX, startY, endX, endY, this);
} }
protected int getWidthModifier() {
return width / 2;
}
protected int getHeightModifier() {
return height / 2;
}
protected void setFinePositioning(MouseEvent e) {
// By default, no fine positioning
}
public void MouseClick(MouseEvent e) { public void MouseClick(MouseEvent e) {
int button = 0; int button = 0;
if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
@ -254,6 +267,8 @@ public class Item implements Serializable, Cloneable {
findPath(startX, startY, endX, endY); findPath(startX, startY, endX, endY);
if(autoPath != null && autoPath.size() > 0) { if(autoPath != null && autoPath.size() > 0) {
setFinePositioning(e);
Node next = autoPath.remove(0); Node next = autoPath.remove(0);
autoX = next.getX(); autoX = next.getX();
@ -264,8 +279,8 @@ public class Item implements Serializable, Cloneable {
} }
} }
else if (e.getClickCount() == 2) { else if (e.getClickCount() == 2) {
int dx = e.getX() - width / 2 - x; int dx = e.getX() - getWidthModifier() - x;
int dy = e.getY() - height / 2 - y; int dy = e.getY() - getHeightModifier() - y;
if (Math.abs(dx) > Math.abs(dy)) { if (Math.abs(dx) > Math.abs(dy)) {
autoY = 0; autoY = 0;
autoX = 28; autoX = 28;