Added the function of drawing rectangular hitboxes, as well as the ability to erase and save the result. You need to draw from left to right
This commit is contained in:
@ -14,84 +14,35 @@ import events.EntityDrawboxChangedListener;
|
||||
import events.EntityHitboxChangedEvent;
|
||||
import events.EntityHitboxChangedListener;
|
||||
import model.Hitbox;
|
||||
import model.HitboxRectangle;
|
||||
import model.Point;
|
||||
|
||||
|
||||
public class HitboxEditor extends Editable {
|
||||
Point firstIsoPoint = null;
|
||||
Point currentIsoPoint = new Point(0,0);
|
||||
Point firstCartesianPoint = new Point(0,0), currentCartesianPoint = new Point(0,0);
|
||||
private List<EntityHitboxChangedListener> listeners = new ArrayList<>();
|
||||
|
||||
HitboxEditor(ListGUI listGUI) {
|
||||
super(listGUI);
|
||||
}
|
||||
|
||||
//@Override
|
||||
//public void drawing(Graphics2D g) {
|
||||
/*Hitbox nowHitbox = entity.getHitbox();
|
||||
//if(firstIsoPoint != null) {
|
||||
int x1,y1,x2,y2;
|
||||
int size = nowHitbox.getListPointsIso().size();
|
||||
for(int i = 0; i < size;i++) {
|
||||
x1 = (int)nowHitbox.getListPointsIso().get(i % size).x;
|
||||
y1 = (int)nowHitbox.getListPointsIso().get(i % size).y;
|
||||
x2 = (int)nowHitbox.getListPointsIso().get((i+1) % size).x;
|
||||
y2 = (int)nowHitbox.getListPointsIso().get((i+1) % size).y;
|
||||
g.drawLine(x1, y1, x2, y2);
|
||||
}
|
||||
x1 = (int)nowHitbox.getListPointsIso().get(0).x;
|
||||
y1 = (int)nowHitbox.getListPointsIso().get(0).y;
|
||||
x2 = (int)nowHitbox.getListPointsIso().get(3).x;
|
||||
y2 = (int)nowHitbox.getListPointsIso().get(3).y;
|
||||
g.drawLine(x1, y1, x2, y2);
|
||||
//}
|
||||
*/
|
||||
//}
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if(firstIsoPoint == null) {
|
||||
firstIsoPoint = new Point(currentIsoPoint.x,currentIsoPoint.y);
|
||||
//System.out.println("firstPoint("+firstIsoPoint.x+";"+firstIsoPoint.y+");");
|
||||
firstCartesianPoint = Hitbox.isometricToCartesian(firstIsoPoint.x, firstIsoPoint.y,firstCartesianPoint);
|
||||
}else{
|
||||
/*
|
||||
* В данном месте при нажатии закрепляющей точки, необходимо вызывать функцию,
|
||||
* которая будет формировать из текущих декартовых координат:
|
||||
* 1. Точку старта и ширину с высотой.
|
||||
* 2. Так же необходимо реализовать слушатель сохранения новых хитбоксов в дерево.
|
||||
*
|
||||
* */
|
||||
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
/*currentIsoPoint.x = e.getX();
|
||||
currentIsoPoint.y = e.getY();
|
||||
if(entity!=null) {
|
||||
Hitbox nowHitbox = entity.getHitbox();
|
||||
if(firstIsoPoint != null) {
|
||||
//System.out.println("firstPoint("+firstIsoPoint.x+";"+firstIsoPoint.y+");");
|
||||
currentCartesianPoint = Hitbox.isometricToCartesian(currentIsoPoint.x, currentIsoPoint.y, currentCartesianPoint);
|
||||
nowHitbox.getListPointsCartesian().get(0).setXY(firstCartesianPoint.x, firstCartesianPoint.y);
|
||||
nowHitbox.getListPointsCartesian().get(1).setXY(currentCartesianPoint.x, firstCartesianPoint.y);
|
||||
nowHitbox.getListPointsCartesian().get(2).setXY(currentCartesianPoint.x, currentCartesianPoint.y);
|
||||
nowHitbox.getListPointsCartesian().get(3).setXY(firstCartesianPoint.x, currentCartesianPoint.y);
|
||||
nowHitbox.convertCartesianPointsToIso();
|
||||
repaint();
|
||||
|
||||
canvas = new EditableCanvas();
|
||||
add(canvas);
|
||||
canvas.setHitboxRectengleRenderingFunction();
|
||||
canvas.setVisible(true);
|
||||
|
||||
clearLinesJButton.addActionListener((e)->{
|
||||
if(entity != null) {
|
||||
HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox();
|
||||
System.out.println("1. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size());
|
||||
nowHitbox.getListPointsIso().clear();
|
||||
System.out.println("2. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size());
|
||||
System.out.println("1. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size() );
|
||||
nowHitbox.getListPointsCartesian().clear();
|
||||
System.out.println("2. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size());
|
||||
canvas.getHitboxRectengleRenderFunct().getLocalListPointsCartesian().clear();
|
||||
canvas.getHitboxRectengleRenderFunct().getLocalListPointsIso().clear();
|
||||
canvas.getHitboxRectengleRenderFunct().setFirstIsoPointIsNull();
|
||||
canvas.repaint();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
public void subscribe(EntityHitboxChangedListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
public void unsubscribe(EntityHitboxChangedListener listener) {
|
||||
listeners.remove(listener);
|
||||
});
|
||||
}
|
||||
|
||||
//НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО.
|
||||
@ -99,29 +50,7 @@ public class HitboxEditor extends Editable {
|
||||
//НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА
|
||||
//UPD: вроде подписку оформил в MainGUI;
|
||||
|
||||
private void notifySubscribers() {
|
||||
for (EntityHitboxChangedListener listener : listeners) {
|
||||
listener.hitboxChanged(
|
||||
new EntityHitboxChangedEvent(entity.getHitbox(), entity)
|
||||
);
|
||||
}
|
||||
}
|
||||
//это старая очистка которая пока убрана. В будущем будет убрана вовсе, после рефакторинга.
|
||||
/*@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JTabbedPane parent = (JTabbedPane) getParent();
|
||||
if(parent.getSelectedComponent() == this){
|
||||
if(entity != null) {
|
||||
firstIsoPoint = null;
|
||||
currentIsoPoint.setXY(0,0);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
// TODO Auto-generated method stub
|
||||
//super.valueChanged(e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user