Files
entity-editor/src/gui/HitboxEditor.java

97 lines
3.6 KiB
Java

package gui;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTabbedPane;
import javax.swing.event.ListSelectionEvent;
import events.EntityDrawboxChangedEvent;
import events.EntityDrawboxChangedListener;
import events.EntityHitboxChangedEvent;
import events.EntityHitboxChangedListener;
import model.Hitbox;
import model.HitboxCircle;
import model.HitboxRectangle;
import model.Point;
import repository.Project;
public class HitboxEditor extends Editable {
JButton changeInRectangleHitboxJButton;
JButton changeInCircleHitboxJButton;
HitboxEditor(ListGUI listGUI) {
super(listGUI);
canvas = new EditableCanvas();
add(canvas);
canvas.setHitboxRectengleRenderingFunction();
canvas.setVisible(true);
changeInRectangleHitboxJButton = super.createButton("Hitbox Rectangle",null,"res/square.png");
changeInCircleHitboxJButton = super.createButton("Hitbox circle",null,"res/circle.png");
toolbar.add(changeInRectangleHitboxJButton);
toolbar.add(changeInCircleHitboxJButton);
changeInRectangleHitboxJButton.addActionListener((e)->{
functionClearHitboxJButton();
entity.setHitbox(new HitboxRectangle("Rectangle",entity));
canvas.setHitboxRectengleRenderingFunction();
//Сделать создание нового Hitbox формы Rectengle
});
changeInCircleHitboxJButton.addActionListener((e)->{
functionClearHitboxJButton();
entity.setHitbox(new HitboxCircle("Circle",entity));
canvas.setHitboxCircleRenderingFunction();
//Сделать создание нового Hitbox формы Circle
});
}
public void functionClearHitboxJButton() {
if(entity != null) {
canvas.renderingFunction.functionClearJButton();
canvas.repaint();
}
}
//НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО.
//СОХРАНЕНИЕ УЖЕ РЕАЛИЗОВАНО.
//НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА
//UPD: вроде подписку оформил в MainGUI;
@Override
public void valueChanged(ListSelectionEvent e) {
if(e.getSource() instanceof JList) {
//TODO: надо бы элегантнее пробросить сюда ListGUI - просто передача его в аргументах немножко громоздкая
// как-то обыграть это через события?
// ps. попытки обратиться к eventSource проваливаются - ListGUI это панель, уже внутри которой лежит JList
selectedEntityName = listGUI.getSelectedName();
try {
entity = Project.getInstance().getEntityByName(selectedEntityName);
image = Project.getInstance().loadImageByName(selectedEntityName);
//TODO: if(image == null) вызов FileChooser'a и выбор изображения
canvas.setEntity(entity);
canvas.setImage(image);
if(entity.getHitbox().getShape().equals("Rectangle")) {
canvas.setHitboxRectengleRenderingFunction();
}
if(entity.getHitbox().getShape().equals("Circle")) {
canvas.setHitboxCircleRenderingFunction();
}
} catch (Exception e1) {
//logger.severe("Entity with name '"+selectedEntityName+"' was not found! Cannot display it on panel!");
}
canvas.repaint();
}
}
}