@Override public void render(Object o) { Graphics2D g2 = (Graphics2D) o; // Clear the background g2.setColor(Color.BLACK); g2.fillRect(0, 0, 800, 600); // 1. clip office work to draw. // 800x300 Office world from (0, 0) // draw background(s) // draw all of the office furniture/people // draw the demon // If one is viewing the tasks window, render the tasks. Graphics2D officeRender = (Graphics2D) g2.create(0, 0, 800, 300); // reset the graphics // Draw the background officeRender.drawImage(coolParallaxScrolling, -parallaxOffset, 0, null); officeRender.drawImage(coolParallaxScrolling, 800 - parallaxOffset, 0, null); officeRender.drawImage(coolParallaxScrolling, -parallaxOffset, 100, null); officeRender.drawImage(coolParallaxScrolling, 800 - parallaxOffset, 100, null); int offset = ((int) camera.getXLocation()) % officeBackgroundRepeated.getWidth(); for (int i = 0; i < ((officeBackgroundRepeated.getWidth() / 800) + 1); i++) { officeRender.drawImage( officeBackgroundRepeated, (int) (-offset + (i * officeBackgroundRepeated.getWidth())), 100, null); } for (int i = 0; i < officeWorld.getEntities().size(); i++) { officeWorld.getEntities().get(i).render(officeRender); } officeRender.dispose(); // 2. clip task world to draw. // 400x300 task world from (200, 300) // If there is an active task, draw it // Otherwise, draw a placeholder(?) Graphics2D taskRender = (Graphics2D) g2.create(200, 300, 400, 300); /// for (int j=0; j<toDoList.size(); j++) { /// toDoList.get(j).render(g2); // pass the clipped graphics in /// } if (activeTask != null) { // find what task needs to be done next activeTask.render(taskRender); if (!isCompletedWithTasks() && activeTask != toDoList.get(nextTaskIndex) && !activeTask.isComplete() && !(activeTask instanceof HitImpTask) && !(activeTask instanceof InterviewTask) && !(activeTask instanceof PaperworkTask)) { // prompt that the task is visited too early taskRender.drawImage(canNotDoYetPrompt, 0, 0, null); } } else { // Whatever is there with no task } taskRender.dispose(); if (isFinishedWithDailyThings() && !viewingCompletedDay) { // SoundPlayer.getSoundPlayer().playVictoryMusic(); SoundPlayer.getSoundPlayer().setMusicTo(SoundPlayer.NONE); SoundPlayer.getSoundPlayer().playVictoryMusic(); viewingCompletedDay = true; } // draw the to-do list on top of everything if (viewingTasks) { // View all of the tasks. } gui.render(o); // Draw borders g2.drawImage(border, 0, 300, null); g2.drawImage(border2, 196, 306, null); g2.drawImage(border2, 598, 306, null); // render employee status gui according to what state they're in. for (int i = 0; i < workers.length; i++) { g2.drawImage(workerHeadsIcon[(workers[i].getState())], 495 + (50 * i), 10, null); } BufferedImage dayImg = getAssetManager().getImage("day" + (dayOn + 1)); if (dayImg != null) { g2.drawImage(dayImg, 10, 10, null); } // draw the alert GUI warning about an imp attack for (int i = 0; i < impTaskObjects.size(); i++) { int yPos = 30 + (i * 25); int xPos = (int) (impTaskObjects.get(i).getX() - camera.getXLocation()); // contain it to the screen so one can see what direction to go. if (xPos < 10) { xPos = 10; } else if (xPos > 730) { xPos = 770; } g2.drawImage(impAlertImage, xPos, yPos, null); } // Draw an imp that is flying across the screen if (showImp) { g2.drawImage( impImage, impXLoc - (impImage.getWidth() / 2), (int) ((((float) ((impXLoc - 400) * (impXLoc - 400))) / 1000) + 150) - (impImage.getHeight() / 2), null); } if (viewingCompletedDay) { // g2.drawImage(completeDay, 200, 150, null); } // draw the todolist last to go on top todoListGuiElement.render(o); /* Debugging things */ /* g2.setColor(Color.WHITE); g2.fillRect(0, 0, 150, 50); g2.setColor(Color.BLACK); g2.drawString("activeTask: " + activeTask, 10, 20); g2.drawString("paperworkLeft: " + paperworkLeft, 10, 30); */ }