Hey Leute.
Ich bastel ja seit einer gewissen Zeit an meiner lwjgl library…
und hab mich nun auch mal an einer kleinen gui implementierung versucht.
Im moment gibt es einfach nur ein AGLGBasicObject (AGLG steht immer für AbstractGraphicsLibraryGui)
und ein ziemlich schlechtes listener system.
Folgende Klasse sorgt für die Maus Daten:
import org.lwjgl.input.Mouse;
import de.skysoldier.abstractgl.lib.AGLCaps.AGLMouseButton;
public class AGLGMouseInputModule {
private static int mousex;
private static int mousey;
private static int mouseDx;
private static int mouseDy;
protected static void update(){
mousex = Mouse.getX();
mousey = Mouse.getY();
mouseDx = Mouse.getDX();
mouseDy = Mouse.getDY();
while(Mouse.next()){
if(Mouse.getEventButtonState()){
AGLG.mousePressed(new AGLGMouseEvent(mousex, mousey, mouseDx, mouseDy, AGLMouseButton.valueOf(Mouse.getButtonName(Mouse.getEventButton()))));
}
else{
if(Mouse.getEventButton() > -1){
AGLG.mouseReleased(new AGLGMouseEvent(mousex, mousey, mouseDx, mouseDy, AGLMouseButton.valueOf(Mouse.getButtonName(Mouse.getEventButton()))));
}
}
}
}
public static int getMousex(){
return mousex;
}
public static int getMousey(){
return mousey;
}
public static int getMouseDx(){
return mouseDx;
}
public static int getMouseDy(){
return mouseDy;
}
}
wobei update() jeden frame aufgerufen wird.
die methoden pressed und released in AGLG (das ist die hauptklasse des gui systems)
sehen so aus:
for(AGLGBasicObject o : g.getObjects()){
if(o.getMouseListener() != null){
if(mouseInObject(o)){
o.getMouseListener().mousePressed(e);
}
}
}
}```
so mach ich das. primitiv durch alle objects iterieren, auf kollision mit maus überprüfen und entsprechende
methode aufrufen. analog für pressed, moved und so weiter was ich halt alles haben will.
aber.. ist das nicht irgendwie ein bisschen schlecht so? In swing wirds wahrscheinlich nicht so einfach gemacht? ^^
Dort wird der listener zum beispiel auch nicht in der JComponent klasse gespeichert sondern irgendwo ganz anders..
#AWTEvent irgendwas...
Also wie könnte ich das verbessern? Jemand ne idee?
Danke!
*** Edit ***
Ja und AGLBasicObject sieht dann so aus:
```package de.skysoldier.abstractgl.lib.g;
import de.skysoldier.abstractgl.lib.AGLBasicRenderObject;
public class AGLGBasicObject {
private AGLBasicRenderObject graphicsInterface;
private AGLGMouseListener mouseListener;
public AGLGBasicObject(AGLBasicRenderObject o){
this.graphicsInterface = o;
}
public void update(){
graphicsInterface.requestUniformUpdate();
}
public void addMouseListener(AGLGMouseListener listener){
this.mouseListener = listener;
}
public AGLGMouseListener getMouseListener(){
return mouseListener;
}
protected AGLBasicRenderObject getGraphicsInterface(){
return graphicsInterface;
}
}```