2D moteur
This commit is contained in:
commit
b544c486af
@ -1,15 +0,0 @@
|
||||
package lsystem.screen;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class Help {
|
||||
public Help(JTabbedPane tabs){
|
||||
JPanel helpTab = new JPanel();
|
||||
JTextArea helpText = new JTextArea();
|
||||
helpText.setText(Constants.HELP);
|
||||
helpText.setEditable(false);
|
||||
helpTab.add(helpText);
|
||||
tabs.addTab("Aide",(new JScrollPane(helpTab)));
|
||||
|
||||
}
|
||||
}
|
89
src/lsystem/screen/JoglEventListener.java
Normal file
89
src/lsystem/screen/JoglEventListener.java
Normal file
@ -0,0 +1,89 @@
|
||||
package lsystem.screen;
|
||||
|
||||
import com.jogamp.opengl.GL;
|
||||
import com.jogamp.opengl.GL2;
|
||||
import com.jogamp.opengl.GLAutoDrawable;
|
||||
import com.jogamp.opengl.GLEventListener;
|
||||
import com.jogamp.opengl.glu.GLU;
|
||||
import com.jogamp.opengl.util.gl2.GLUT;
|
||||
|
||||
public class JoglEventListener implements GLEventListener {
|
||||
|
||||
private GLU glu = new GLU();
|
||||
private GLUT glut = new GLUT();
|
||||
|
||||
private float camera [] = {0f, 0f, 5f};
|
||||
|
||||
private float [] light_0_ambient = {0.01f, 0.01f, 0.01f, 0.01f};
|
||||
private float [] light_0_diffuse = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||
private float [] light_0_specular = {1.0f,1.0f, 1.0f, 1.0f};
|
||||
private float [] light_0_position = {100f, 0f, 10f, 1f};
|
||||
|
||||
private float [] material_specular = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||
|
||||
private float angle = 0f;
|
||||
|
||||
|
||||
@Override
|
||||
public void init(GLAutoDrawable glAutoDrawable) {
|
||||
GL2 gl = glAutoDrawable.getGL().getGL2();
|
||||
|
||||
gl.glClearColor(0.8f, 0.5f, 0.0f, 1.0f);
|
||||
|
||||
gl.glEnable(GL2.GL_DEPTH_TEST);
|
||||
gl.glClearDepth(1.0f);
|
||||
|
||||
gl.glShadeModel(GL2.GL_SMOOTH);
|
||||
gl.glEnable(GL2.GL_LIGHTING);
|
||||
|
||||
gl.glEnable(GL2.GL_LIGHT0);
|
||||
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, light_0_ambient, 0);
|
||||
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, light_0_diffuse, 0);
|
||||
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, light_0_specular, 0);
|
||||
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, light_0_position, 0);
|
||||
|
||||
gl.glEnable(GL2.GL_COLOR_MATERIAL);
|
||||
gl.glColorMaterial(GL2.GL_FRONT_AND_BACK, GL2.GL_AMBIENT_AND_DIFFUSE);
|
||||
gl.glMateriali(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 90);
|
||||
gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, material_specular, 0);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose(GLAutoDrawable glAutoDrawable) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(GLAutoDrawable glAutoDrawable) {
|
||||
GL2 gl = glAutoDrawable.getGL().getGL2();
|
||||
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
|
||||
gl.glLoadIdentity();
|
||||
|
||||
glu.gluLookAt(
|
||||
camera[0], camera[1], camera[2],
|
||||
0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f
|
||||
);
|
||||
|
||||
gl.glRotatef(angle, 0f, 1f, 0f);
|
||||
|
||||
gl.glColor3f(1.0f, 0.0f, 0.0f);
|
||||
glut.glutSolidSphere(1.0f, 20, 20);
|
||||
|
||||
angle += 0.1f;
|
||||
angle %= 360f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reshape(GLAutoDrawable glAutoDrawable, int x, int y, int width, int height) {
|
||||
GL2 gl = glAutoDrawable.getGL().getGL2();
|
||||
gl.glViewport(x, y, width, height);
|
||||
|
||||
gl.glMatrixMode(GL2.GL_PROJECTION);
|
||||
gl.glLoadIdentity();
|
||||
glu.gluPerspective(60.0f, (float) width/height, 0.1f, 10.0f);
|
||||
|
||||
gl.glMatrixMode(GL2.GL_MODELVIEW);
|
||||
}
|
||||
}
|
@ -21,10 +21,12 @@ public class MainFrame extends JFrame {
|
||||
private JButton newGen;
|
||||
private JButton help;
|
||||
private int nbRules;
|
||||
public HashMap<Integer,Component> componentList;
|
||||
public HashMap<Integer,JTextArea> textAreaList;
|
||||
public HashMap<Integer,JTextField> textFieldList;
|
||||
|
||||
public MainFrame(){
|
||||
componentList = new HashMap<>();
|
||||
textAreaList = new HashMap<>();
|
||||
textFieldList = new HashMap<>();
|
||||
nbRules = 1;
|
||||
nbTabs = 0;
|
||||
basePanel = new JPanel();
|
||||
@ -47,12 +49,26 @@ public class MainFrame extends JFrame {
|
||||
this.add(toolBar, BorderLayout.NORTH);
|
||||
this.setPreferredSize(new Dimension(640,600));
|
||||
}
|
||||
public void addToComponentList(Component c ,Integer i){
|
||||
componentList.put(i,c);
|
||||
public void addToTextAreaList(JTextArea c ,Integer i){
|
||||
textAreaList.put(i,c);
|
||||
}
|
||||
public void addToTextFieldList(JTextField c ,Integer i){
|
||||
textFieldList.put(i,c);
|
||||
}
|
||||
|
||||
public void newHelp() {
|
||||
new Help(tabs);
|
||||
JFrame aide = new JFrame();
|
||||
aide.setTitle("Aide");
|
||||
aide.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
aide.setSize(700,800);
|
||||
aide.setLocationRelativeTo(null);
|
||||
aide.setVisible(true);
|
||||
|
||||
JTextArea helpText = new JTextArea();
|
||||
helpText.setText(Constants.HELP);
|
||||
helpText.setEditable(false);
|
||||
|
||||
aide.add(helpText);
|
||||
}
|
||||
public void newTab() {
|
||||
if(nbTabs>2)
|
||||
@ -66,7 +82,7 @@ public class MainFrame extends JFrame {
|
||||
public void closeTab() {
|
||||
//TODO : Pour fermer un onglet, nécessite l'implémentation d'un button fermer grâce à la méthode newTab().
|
||||
}
|
||||
public void changeList(Character stringToAdd, byte messageType, JTextArea list) {
|
||||
public void changeList(String stringToAdd, byte messageType, JTextArea list) {
|
||||
if (stringToAdd == null) {
|
||||
switch(messageType) {
|
||||
case 0:
|
||||
@ -77,7 +93,7 @@ public class MainFrame extends JFrame {
|
||||
throw new IllegalArgumentException("Wrong argument given to method changeList");
|
||||
}
|
||||
}else{
|
||||
list.append(String.valueOf(stringToAdd));
|
||||
list.append(stringToAdd);
|
||||
}
|
||||
}
|
||||
public String getAxiom(){
|
||||
@ -106,4 +122,3 @@ public class MainFrame extends JFrame {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
34
src/lsystem/screen/SwingGLCanvas.java
Normal file
34
src/lsystem/screen/SwingGLCanvas.java
Normal file
@ -0,0 +1,34 @@
|
||||
package lsystem.screen;
|
||||
|
||||
import com.jogamp.opengl.GLCapabilities;
|
||||
import com.jogamp.opengl.GLProfile;
|
||||
import com.jogamp.opengl.awt.GLCanvas;
|
||||
import com.jogamp.opengl.util.FPSAnimator;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
|
||||
public class SwingGLCanvas {
|
||||
|
||||
public SwingGLCanvas() {
|
||||
GLProfile glProfile = GLProfile.getDefault();
|
||||
GLCapabilities glCapabilities = new GLCapabilities(glProfile);
|
||||
final GLCanvas glCanvas = new GLCanvas(glCapabilities);
|
||||
glCanvas.addGLEventListener(new JoglEventListener());
|
||||
final JFrame jframe = new JFrame("L-System");
|
||||
final FPSAnimator animator = new FPSAnimator(glCanvas, 60);
|
||||
jframe.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
jframe.dispose();
|
||||
}
|
||||
});
|
||||
|
||||
jframe.getContentPane().add(glCanvas, BorderLayout.CENTER);
|
||||
jframe.setSize(Constants.WIDTH, Constants.HEIGHT);
|
||||
animator.start();
|
||||
jframe.setVisible(true);
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package lsystem.screen;
|
||||
|
||||
import lsystem.screen.listener.AxiomFieldListener;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import javax.swing.JTabbedPane;
|
||||
@ -12,22 +14,27 @@ public class Tab {
|
||||
JTextArea axiomList = new JTextArea();
|
||||
axiomList.setText("Axiome : \n");
|
||||
axiomList.setEditable(false);
|
||||
frame.addToTextAreaList(axiomList,nbTabs);
|
||||
|
||||
JTextArea rulesList = new JTextArea();
|
||||
rulesList.setText("Règles : \n");
|
||||
rulesList.setEditable(false);
|
||||
frame.addToTextAreaList(rulesList,nbTabs+10);
|
||||
|
||||
JButton closeButton = new JButton("x");
|
||||
|
||||
|
||||
JLabel axiome = new JLabel("Axiome");
|
||||
JLabel rules = new JLabel("Règle "+ nbRules);
|
||||
|
||||
JTextField axiomeField = new JTextField();
|
||||
frame.addToComponentList(axiomeField,nbTabs);
|
||||
axiomeField.addKeyListener(new AxiomFieldListener(frame,nbTabs));
|
||||
axiomeField.setPreferredSize(new Dimension(20,20));
|
||||
frame.addToTextFieldList(axiomeField,nbTabs);
|
||||
|
||||
JTextField rulesField = new JTextField();
|
||||
frame.addToComponentList(rulesField,nbTabs+10);
|
||||
rulesField.setPreferredSize(new Dimension(20,20));
|
||||
|
||||
tab.add(axiome);
|
||||
tab.add(axiomeField);
|
||||
tab.add(axiomList);
|
||||
|
@ -19,16 +19,22 @@ public class AxiomFieldListener implements KeyListener {
|
||||
}
|
||||
@Override
|
||||
public void keyTyped(KeyEvent ke) {
|
||||
frame.changeList(ke.getKeyChar(),(byte)0, (JTextArea) frame.componentList.get(index));
|
||||
if(ke.getKeyCode() != KeyEvent.VK_ENTER)
|
||||
frame.changeList(String.valueOf(ke.getKeyChar()),(byte)0, (JTextArea) frame.textAreaList.get(index));
|
||||
else{
|
||||
String str = ";\r\n";
|
||||
frame.changeList(str,(byte)0, (JTextArea) frame.textAreaList.get(index));
|
||||
frame.textFieldList.get(index).setText(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent ke) {
|
||||
|
||||
if(ke.getKeyCode() == KeyEvent.VK_ENTER)
|
||||
frame.textFieldList.get(index).setText(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent ke) {
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user