diff --git a/control/GameControl.java b/control/GameControl.java index d0b9f11..f84ab47 100644 --- a/control/GameControl.java +++ b/control/GameControl.java @@ -1,7 +1,5 @@ package control; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -9,23 +7,20 @@ import java.awt.event.MouseListener; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; -import javax.swing.Timer; - import model.GameModel; import view.GameView; -public class GameControl implements MouseListener, KeyListener, WindowFocusListener, ActionListener{ +public class GameControl implements MouseListener, KeyListener, WindowFocusListener{ GameModel model; GameView view; - Timer update; + public GameControl(GameModel model, GameView view) { this.model = model; this.view = view; - update = new Timer(1000/10, this); - update.start(); + } public void keyPressed(KeyEvent e) {} @@ -53,8 +48,5 @@ public class GameControl implements MouseListener, KeyListener, WindowFocusListe public void windowLostFocus(WindowEvent e) {} - @Override - public void actionPerformed(ActionEvent e) { - model.update(); - } + } diff --git a/control/GameStateManager.java b/control/GameStateManager.java new file mode 100644 index 0000000..2fba925 --- /dev/null +++ b/control/GameStateManager.java @@ -0,0 +1,32 @@ +package control; + +import java.util.ArrayList; +import java.util.List; + +import model.gameState.GameState; +import model.gameState.MenuState; +import model.gameState.PlayState; + +public class GameStateManager { + + private List gamestates; + public GameState currentState; + private int index = 0; + + public GameStateManager(){ + gamestates = new ArrayList(); + gamestates.add(new MenuState(this)); + gamestates.add(new PlayState(this)); + currentState = gamestates.get(0); + } + + public void next() { + index++; + index %= gamestates.size(); + } + + public void update(){ + currentState = gamestates.get(index); + currentState.update(); + } +} diff --git a/main/Window.java b/main/Window.java index 97c6fea..01af042 100644 --- a/main/Window.java +++ b/main/Window.java @@ -10,6 +10,11 @@ import view.GameView; import control.GameControl; public class Window extends JFrame { + /** + * + */ + private static final long serialVersionUID = 1L; + public Window() { //Create window diff --git a/model/GameModel.java b/model/GameModel.java index 4b7a75a..2ba007e 100644 --- a/model/GameModel.java +++ b/model/GameModel.java @@ -1,10 +1,16 @@ package model; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.Timer; + import view.GameView; -public class GameModel{ +public class GameModel implements ActionListener{ GameView view; + Timer update; Player player; @@ -12,11 +18,17 @@ public class GameModel{ { this.view = view; player = new Player(1920/2, 1080/2); - + update = new Timer(1000/10, this); + update.start(); } public void update(){ player.update(); view.setPlayer(player); } + + @Override + public void actionPerformed(ActionEvent e) { + update(); + } } diff --git a/model/Player.java b/model/Player.java index 656e473..896c7ae 100644 --- a/model/Player.java +++ b/model/Player.java @@ -6,7 +6,6 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; public class Player { @@ -32,6 +31,6 @@ public class Player { public void update(){ transform = new AffineTransform(); transform.rotate(Math.toRadians(index*45),middlePoint.getX(),middlePoint.getY()); - transform.translate(middlePoint.getX() - width/2, middlePoint.getY() - height*2); + transform.translate(middlePoint.getX() - width/2, middlePoint.getY() - height*2); } } diff --git a/model/gameState/GameState.java b/model/gameState/GameState.java new file mode 100644 index 0000000..bb78b3e --- /dev/null +++ b/model/gameState/GameState.java @@ -0,0 +1,22 @@ +package model.gameState; + +import java.awt.Graphics2D; +import java.awt.event.KeyEvent; + +import control.GameStateManager; + +public abstract class GameState { + + protected GameStateManager gsm; + + public GameState(GameStateManager gsm) { + super(); + this.gsm = gsm; + } + + public abstract void init(); + public abstract void update(); + public abstract void draw(Graphics2D g2); + public abstract void keyPressed(KeyEvent e); + public abstract void keyReleased(KeyEvent e); +} diff --git a/model/gameState/MenuState.java b/model/gameState/MenuState.java new file mode 100644 index 0000000..ba19fba --- /dev/null +++ b/model/gameState/MenuState.java @@ -0,0 +1,45 @@ +package model.gameState; + +import java.awt.Graphics2D; +import java.awt.event.KeyEvent; + +import control.GameStateManager; + +public class MenuState extends GameState { + + public MenuState(GameStateManager gsm) { + super(gsm); + } + @Override + public void init() { + // TODO Auto-generated method stub + + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } + + @Override + public void draw(Graphics2D g2) { + g2.fillRect(10, 10, 100, 10); + + } + + @Override + public void keyPressed(KeyEvent e) { + if(e.getKeyCode() == KeyEvent.VK_Q){ + gsm.next(); + } + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO Auto-generated method stub + + } + +} diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java new file mode 100644 index 0000000..b5cf5c9 --- /dev/null +++ b/model/gameState/PlayState.java @@ -0,0 +1,54 @@ +package model.gameState; + +import java.awt.Graphics2D; +import java.awt.event.KeyEvent; +import java.awt.geom.Rectangle2D; + +import model.objects.InfoPanel; +import model.objects.Lines; +import control.GameStateManager; + +public class PlayState extends GameState{ + + public static final Rectangle2D borderRect = new Rectangle2D.Double(256, 0, 1024, 1024); + private Lines lines; + private InfoPanel hsb; + public PlayState(GameStateManager gsm) { + super(gsm); + lines = new Lines((int) borderRect.getX(),100); + hsb = new InfoPanel(0, 0); + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } + + @Override + public void draw(Graphics2D g2) { + hsb.draw(g2); + g2.setClip(borderRect); + lines.draw(g2); + + } + + @Override + public void keyPressed(KeyEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO Auto-generated method stub + + } + +} diff --git a/model/objects/InfoPanel.java b/model/objects/InfoPanel.java new file mode 100644 index 0000000..30b0c4b --- /dev/null +++ b/model/objects/InfoPanel.java @@ -0,0 +1,17 @@ +package model.objects; + +import java.awt.Graphics2D; + +public class InfoPanel { + + private int x, y; + + public InfoPanel(int x, int y){ + this.x = x; + this.y = y; + } + + public void draw(Graphics2D g2){ + g2.drawRect(x, y, 256, 1024); + } +} diff --git a/model/objects/Lines.java b/model/objects/Lines.java new file mode 100644 index 0000000..e8e5335 --- /dev/null +++ b/model/objects/Lines.java @@ -0,0 +1,42 @@ +package model.objects; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Line2D; +import java.util.ArrayList; +import java.util.List; + +public class Lines { + + private List lines; + private Polygon octagon; + + + public Lines(int xToRight, int sizeOctagon) { + super(); + lines = new ArrayList(); + int middlePointX = 512+xToRight; + int middlePointY = 512; + int amountOfAngles = 8; + octagon = new Polygon(); + for(int i = 0; i < amountOfAngles; i++){ + octagon.addPoint((int)(middlePointX+sizeOctagon*Math.cos(i*Math.PI/(amountOfAngles/2))), + (int)(middlePointY+sizeOctagon*Math.sin(i*Math.PI/(amountOfAngles/2)))); + } + AffineTransform t = new AffineTransform(); + for(int i = 0; i < 8; i++){ + t.rotate(Math.toRadians(45), middlePointX, 512); + lines.add(t.createTransformedShape(new Line2D.Double(middlePointX, -213, middlePointX, 512))); + + } + } + + public void draw(Graphics2D g2){ + for(Shape s : lines){ + g2.draw(s); + } + g2.draw(octagon); + } +}