Advertisement
iamcreasy

Untitled

Jul 5th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. package Engine;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.image.BufferStrategy;
  6. import java.text.DecimalFormat;
  7. import java.util.ArrayList;
  8. import java.util.Random;
  9.  
  10. public class GFrame {
  11. Random r = new Random(47);
  12. private String gameTitle;
  13.  
  14. public static Dimension dimension;
  15. private Dimension crtJfrmDim, crtCnvsDim;
  16.  
  17. public boolean fullscreen = false;
  18.  
  19. private JFrame jFrame;
  20. public Canvas canvas;
  21. BufferStrategy bufferStrategy;
  22.  
  23. public GFrame() {
  24. gameTitle = "GameTitle";
  25. dimension = new Dimension(600, 600);
  26. jFrame = new JFrame();
  27. canvas = new Canvas();
  28.  
  29. if(fullscreen) {
  30. // correct dimension
  31.  
  32. // Fullscreen jFrame and canvas
  33.  
  34. } else
  35. {
  36. // correct dimension
  37. // crtJfrmDim = new Dimension((int) dimension.getWidth() + 6, (int) dimension.getHeight() + 35); // Insets[top=32,left=3,bottom=3,right=3]
  38. // crtCnvsDim = new Dimension((int) dimension.getWidth() + 6, (int) dimension.getHeight() + 35); // Insets[top=32,left=3,bottom=3,right=3]
  39.  
  40. // Windowed jFrame and Canvas
  41. jFrame.setTitle(gameTitle);
  42. jFrame.setSize(dimension);
  43. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  44. jFrame.setLocationRelativeTo(null);
  45. // jFrame.setLayout(null);
  46. jFrame.setUndecorated(false);
  47. jFrame.setResizable(false);
  48. jFrame.setVisible(true);
  49.  
  50. canvas.setSize(dimension);
  51. canvas.setPreferredSize(dimension);
  52. canvas.setMaximumSize(dimension);
  53. canvas.setMinimumSize(dimension);
  54. jFrame.add(canvas);
  55. jFrame.pack();
  56. canvas.requestFocus();
  57. }
  58.  
  59. // Setup BufferStrategy for canvas
  60. canvas.createBufferStrategy(2);
  61. bufferStrategy = canvas.getBufferStrategy();
  62. }
  63.  
  64. public void start(){
  65. // Initialize game loop variabless
  66. boolean running = true;
  67. long currentTime = System.currentTimeMillis();
  68. long gameLoopCount = 0;
  69.  
  70. long systemRefreshRate = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode().getRefreshRate();
  71. long deltaMili = 1000 / systemRefreshRate;
  72. long deltaNano = (long)(((1000 % systemRefreshRate) / (double)systemRefreshRate ) * 1_000_000); // 1 mili = 1e6 nano; 1s = 1e9 nano
  73. DecimalFormat df = new DecimalFormat("#.##");
  74. long updateStartTime, nextUpdateTime, renderStartTime;
  75.  
  76. // Game loop
  77. while (running){
  78. String title = "";
  79. updateStartTime = System.currentTimeMillis();
  80. nextUpdateTime = System.currentTimeMillis() + deltaMili;
  81.  
  82. // Update logic
  83. updateState();
  84. title = title.concat(gameTitle + " U " + (System.currentTimeMillis() - updateStartTime) + " + ");
  85.  
  86. // Render logic
  87. renderStartTime = System.currentTimeMillis();
  88.  
  89. Graphics2D g = (Graphics2D)bufferStrategy.getDrawGraphics();
  90.  
  91. renderState(g);
  92.  
  93. g.dispose();
  94. bufferStrategy.show();
  95. title = title.concat("R " + (System.currentTimeMillis() - renderStartTime) + " / ");
  96.  
  97. // Game loop counter Update
  98. gameLoopCount++;
  99. title = title.concat(df.format(1000 / (double)systemRefreshRate) + " ; G " + gameLoopCount + " / S " + systemRefreshRate);
  100.  
  101. // Game loop Wait
  102. if(nextUpdateTime > System.currentTimeMillis()){
  103. GFrameUtility.sleep(nextUpdateTime - System.currentTimeMillis()); // Adding nano(deltaNano) causes undershot
  104. }
  105.  
  106. // Game Title Update
  107. if(System.currentTimeMillis() - currentTime > 1000) {
  108. jFrame.setTitle(title);
  109. currentTime = System.currentTimeMillis();
  110. gameLoopCount = 0;
  111. }
  112.  
  113. }
  114.  
  115. // Cleanup
  116. }
  117.  
  118. ArrayList<GameResource> gameResourceList = new ArrayList<>();
  119.  
  120. public void add(GameResource gameResource){
  121. if(gameResource == null)
  122. throw new NullPointerException();
  123. else
  124. gameResourceList.add(gameResource);
  125. }
  126.  
  127. private void updateState() {
  128. for(GameResource gameResource : gameResourceList)
  129. gameResource.update();
  130. }
  131.  
  132. private void renderState(Graphics2D g) {
  133. // Clean the Canvas before redrawing
  134. g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
  135. g.fillRect(0, 0, (int)dimension.getWidth(), (int)dimension.getHeight());
  136.  
  137. for(GameResource gameResource : gameResourceList)
  138. gameResource.render(g);
  139. }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement