Skip to content

Commit

Permalink
Merge pull request #39 from OrangeBetaStar/SystemWide_ImageLoad
Browse files Browse the repository at this point in the history
System wide image load improvement
  • Loading branch information
OrangeBetaStar committed Jul 14, 2018
2 parents 2e6ec7c + 00121b7 commit d5dd364
Show file tree
Hide file tree
Showing 47 changed files with 328 additions and 262 deletions.
Binary file added .DS_Store
Binary file not shown.
Binary file modified WaifuBrew/.DS_Store
Binary file not shown.
386 changes: 171 additions & 215 deletions WaifuBrew/.idea/workspace.xml

Large diffs are not rendered by default.

Binary file added WaifuBrew/src/.DS_Store
Binary file not shown.
Binary file added WaifuBrew/src/main/.DS_Store
Binary file not shown.
Binary file added WaifuBrew/src/main/java/.DS_Store
Binary file not shown.
File renamed without changes
Binary file removed WaifuBrew/src/main/java/resources/black.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion WaifuBrew/src/main/java/start/AnimationPane.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public AnimationPane() {

this.res = WaifuBrew.getInstance().getRes();
try {
dialogueBox = new javaxt.io.Image(RESOURCE_PATH + "dialogbar.png");
dialogueBox = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.VECTOR, "dialogbar"));

// GARBAGE IMPLEMENTATION
saveButton = new CustomButton(500, 500, "startscreen_save_button.png", false);
Expand Down
41 changes: 10 additions & 31 deletions WaifuBrew/src/main/java/start/ConfigPane.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ public class ConfigPane extends JPanel implements ActionListener {

// LOAD IMAGE
private javaxt.io.Image backgroundPicture;
private javaxt.io.Image back_button;
private javaxt.io.Image dialogueBox; // So it doesn't use HDD every time and kill performance
private javaxt.io.Image tempDialogueBox; // Preview

Expand All @@ -20,10 +19,11 @@ public class ConfigPane extends JPanel implements ActionListener {
private int dialogueSpeedY = dialogueTransparencyY + 80;
private int backButtonX = 1100;
private int backButtonY = 600;
private boolean backButtonUI = false;
private Timer stringTimer;
private boolean stop = false;

CustomButton backButon;

private CustomSlider slider_transparency;
private CustomSlider slider_speed;

Expand All @@ -45,10 +45,10 @@ public ConfigPane() {
try {
init();

// Load needed images
backgroundPicture = new javaxt.io.Image(RESOURCE_PATH + "options-background.png");
back_button = new javaxt.io.Image(RESOURCE_PATH + "config_back_button.png");
dialogueBox = new javaxt.io.Image(RESOURCE_PATH+"dialogbar.png");
backgroundPicture = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.BACKGROUND, "config"));

backButon = new CustomButton(backButtonX, backButtonY, "config_back_button.png", true);
dialogueBox = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.VECTOR, "dialogbar"));

// Pre-scale
if(backgroundPicture.getWidth() < windowSize.x || backgroundPicture.getHeight() < windowSize.y) {
Expand All @@ -72,6 +72,8 @@ public ConfigPane() {
addMouseMotionListener(slider_transparency.retrieveMouseHandler());
addMouseListener(slider_speed.retrieveMouseHandler());
addMouseMotionListener(slider_speed.retrieveMouseHandler());
addMouseListener(backButon.retrieveMouseHandler());
addMouseMotionListener(backButon.retrieveMouseHandler());

// Builds character into sentence one by one. Using timers are bit meh since it needs to finish to change duration.
stringTimer = new Timer((WaifuBrew.getInstance().getDialogueSpeed() * 10), new ActionListener() {
Expand Down Expand Up @@ -114,15 +116,7 @@ protected void paintComponent(Graphics g) {

// DISABLES CONFIGPANE BG WHEN USING SLIDER & PREVIEW OF TRANSPARENCY
if(!slider_transparency.isSliderActive() && !slider_speed.isSliderActive()) {
// BACK BUTTON
javaxt.io.Image tempBackButton = back_button.copy();
if (backButtonUI) {
tempBackButton.setOpacity(100);
} else {
tempBackButton.setOpacity(20);
}

g.drawImage(tempBackButton.getBufferedImage(), (backButtonX - (getPreferredSize(tempBackButton.getBufferedImage()).width / 2)), (backButtonY - (getPreferredSize(tempBackButton.getBufferedImage()).height / 2)), getPreferredSize(tempBackButton.getBufferedImage()).width, getPreferredSize(tempBackButton.getBufferedImage()).height, this);
if(stringTimer.isRunning()) {
stringTimer.stop();
}
Expand All @@ -142,6 +136,7 @@ protected void paintComponent(Graphics g) {
g.drawString("Diologue Bar Transparency", dialogueX, dialogueTransparencyY - 20);
g.drawString("Diologue Text Speed", dialogueX, dialogueSpeedY - 20);

backButon.paintComponent(g);
slider_transparency.paintComponent(g);
slider_speed.paintComponent(g);
}
Expand All @@ -153,19 +148,12 @@ public void mousePressed (MouseEvent event) {

}
public void mouseMoved (MouseEvent event) {
if(event.getX() >= (backButtonX - (getPreferredSize(back_button.getBufferedImage()).width / 2)) && event.getY() >= (backButtonY - (getPreferredSize(back_button.getBufferedImage()).height / 2)) && event.getX() <= ((backButtonX - (getPreferredSize(back_button.getBufferedImage()).width / 2)) + back_button.getWidth()) && event.getY() <= ((backButtonY - (getPreferredSize(back_button.getBufferedImage()).height / 2)) + back_button.getHeight())) {
backButtonUI = true;
}
else {
backButtonUI = false;
}
}
public void mouseDragged (MouseEvent event) {

}
public void mouseClicked (MouseEvent event) {

if(event.getX() >= (backButtonX - (getPreferredSize(back_button.getBufferedImage()).width / 2)) && event.getY() >= (backButtonY - (getPreferredSize(back_button.getBufferedImage()).height / 2)) && event.getX() <= ((backButtonX - (getPreferredSize(back_button.getBufferedImage()).width / 2)) + back_button.getWidth()) && event.getY() <= ((backButtonY - (getPreferredSize(back_button.getBufferedImage()).height / 2)) + back_button.getHeight())) {
if(event.getX() >= backButtonX - backButon.getWidth()/2 && event.getY() >= backButtonY - backButon.getHeight()/2 && event.getX() <= backButtonX + backButon.getWidth()/2 && event.getY() <= backButtonY + backButon.getHeight()/2) {
WaifuBrew.getInstance().setStage(0);
WaifuBrew.getInstance().getGUIInstance().revalidateGraphics();
}
Expand All @@ -179,15 +167,6 @@ public void mouseExited (MouseEvent event) {
}
}

public Dimension getPreferredSize(BufferedImage a) {
if (a != null) {
int width = a.getWidth();
int height = a.getHeight();
return new Dimension(width, height);
}
return super.getPreferredSize();
}

public void init(){
Timer t = new Timer((int)(1000/WaifuBrew.getInstance().getFrameRate()), new ActionListener() {
public void actionPerformed(ActionEvent e) {
Expand Down
11 changes: 8 additions & 3 deletions WaifuBrew/src/main/java/start/CustomSlider.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class CustomSlider extends JPanel implements ActionListener {
private int y; // dialogueTransparencyY
private boolean initStage = true;


private javaxt.io.Image white;

// this that this that left right left right up down up down
private java.awt.image.ImageObserver that = WaifuBrew.getInstance().getGUIInstance();

Expand All @@ -25,7 +28,8 @@ public class CustomSlider extends JPanel implements ActionListener {
public CustomSlider(int x, int y, int level) {
this.x = x;
this.y = y;
slider_background = new javaxt.io.Image(RESOURCE_PATH + "white.png");

slider_background = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.VECTOR, "whitebox"));
slider_leveler = slider_background.copy();
slider_knob = slider_background.copy();
this.level = level;
Expand All @@ -35,9 +39,10 @@ public CustomSlider(int x, int y, int level) {
public CustomSlider(int x, int y, int level, String fileName) {
this.x = x;
this.y = y;
slider_background = new javaxt.io.Image(RESOURCE_PATH + "white.png");

slider_background = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.VECTOR, "whitebox"));
slider_leveler = slider_background.copy();
slider_knob = new javaxt.io.Image(RESOURCE_PATH + fileName);
slider_knob = slider_background.copy();
this.level = level;
}

Expand Down
17 changes: 11 additions & 6 deletions WaifuBrew/src/main/java/start/FindFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,37 @@

import java.io.File;
import java.io.FilenameFilter;
import java.util.LinkedList;

public class FindFile {

public void listFile(String folder, String extension) {
LinkedList<String> fileList = new LinkedList<String>();

public LinkedList<String> listFile(String folder, String extension) {

GenericExtFilter filter = new GenericExtFilter(extension);

File dir = new File(folder);

if(dir.isDirectory()==false){
System.out.println("Directory does not exists : " + folder);
return;
return null;
}

// list out all the file name and filter by the extension
String[] list = dir.list(filter);

if (list.length == 0) {
System.out.println("Files not found with extension : " + extension);
return;
return null;
}

for (String file : list) {
String temp = new StringBuffer(folder).append(File.separator).append(file).toString();
System.out.println("Found file : " + temp);
fileList.add(file);
// String temp = new StringBuffer(folder).append(file).toString();
System.out.println("Found file : " + (new StringBuffer(folder).append(file).toString()));
}

return fileList;
}

public class GenericExtFilter implements FilenameFilter {
Expand Down
31 changes: 31 additions & 0 deletions WaifuBrew/src/main/java/start/ImageDesc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package start;

import java.awt.image.BufferedImage;

// TODO: Create exception for no description or image

// This class will be a wrapper class of String (for description) and BufferedImage (image) as having list of BufferedImage would be too messy and inefficient.

public class ImageDesc {

private String imageDescription;
private BufferedImage imageItself;

public ImageDesc(String imageDescription, javaxt.io.Image imageItself) {
this.imageDescription = imageDescription;
this.imageItself = imageItself.getBufferedImage();
}

public ImageDesc(String imageDescription, BufferedImage imageItself) {
this.imageDescription = imageDescription;
this.imageItself = imageItself;
}

public String getImageDescription() {
return imageDescription;
}

public BufferedImage getImageItself() {
return imageItself;
}
}
48 changes: 48 additions & 0 deletions WaifuBrew/src/main/java/start/ImageLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package start;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.LinkedList;

public class ImageLoader {

private String RESOURCE_PATH;
private ArrayList<ImageDesc> load_first_images = new ArrayList<ImageDesc>();
private ArrayList<ImageDesc> vectorImages = new ArrayList<ImageDesc>();
private ArrayList<ImageDesc> bg_images = new ArrayList<ImageDesc>();

public ImageLoader(String RESOURCE_PATH) {
this.RESOURCE_PATH = RESOURCE_PATH;
}

public ArrayList<ArrayList<ImageDesc>> imgCompiler (LinkedList<String> fileList) {
for(String loadImage : fileList) {
loadImage = loadImage.toLowerCase();
// This will look inside resource folder and automatically load the images according to file names.
if(loadImage.contains("load_first")) {
if(loadImage.contains("startscreen_elementsheet")) {
ImageSlicer systemButtons = new ImageSlicer(500, 200, RESOURCE_PATH + loadImage, true);
BufferedImage[] systemImages = systemButtons.getSprites();
for(int a = 0; a < systemImages.length; a++) {
load_first_images.add(new ImageDesc(Integer.toString(a), systemImages[a]));
}
}
// Any images that are used in effects (used with scaleVec like things)
else {//if(loadImage.contains("whitebox")) {
vectorImages.add(new ImageDesc(loadImage, new javaxt.io.Image(RESOURCE_PATH + loadImage)));
}
}
else if(loadImage.contains("bg")) {
//System.out.println("What's the loadImage's name? " + loadImage);
bg_images.add(new ImageDesc(loadImage, new javaxt.io.Image(RESOURCE_PATH + loadImage)));
}
}

ArrayList<ArrayList<ImageDesc>> imagePackage = new ArrayList<ArrayList<ImageDesc>>();
imagePackage.add(load_first_images);
imagePackage.add(vectorImages);
imagePackage.add(bg_images);

return imagePackage;
}
}
18 changes: 18 additions & 0 deletions WaifuBrew/src/main/java/start/ImageSelector.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package start;

public enum ImageSelector {
BUTTONS(0),
VECTOR(1),
BACKGROUND(2),
CHARACTERS(3); // Not implemented yet

private int value;

private ImageSelector(int value) {
this.value = value;
}

public int getValue() {
return value;
}
}
3 changes: 2 additions & 1 deletion WaifuBrew/src/main/java/start/StartScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public StartScreen() {

addMouseListener(handler);
addMouseMotionListener(handler);
backgroundPicture = new javaxt.io.Image(RESOURCE_PATH + "start.png");
backgroundPicture = new javaxt.io.Image(WaifuBrew.getInstance().getImageByName(ImageSelector.BACKGROUND, "bg_start.png"));

// Calculates the scaling needed to fit the screen. Any ratio will work.
if(backgroundPicture.getWidth() < windowSize.x || backgroundPicture.getHeight() < windowSize.y) {
if(((double)windowSize.x / backgroundPicture.getWidth()) * backgroundPicture.getHeight() < windowSize.y) {
Expand Down
33 changes: 28 additions & 5 deletions WaifuBrew/src/main/java/start/WaifuBrew.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

public class WaifuBrew extends WaifuException{

// Get resolution
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private GUI sample;
private final String RESOURCE_PATH = "src/main/java/resources/";
private BufferedImage[] systemImages;
private BufferedImage[] systemImages = new BufferedImage[10];
ArrayList<ArrayList<ImageDesc>> fileList;

private static WaifuBrew singleton;

// [n] array number / = n value
Expand All @@ -32,14 +35,17 @@ public class WaifuBrew extends WaifuException{
new Point((screenSize.width / 2) - (1280 / 2) ,(screenSize.height / 2) - (720 / 2))};

WaifuBrew() {

setDialogueTransparency(70);
setDialogueSpeed(5);
setFrameRate(2);
setFrameRate(60);
setStage(0);
setSystemGUIScale(100);
new FindFile().listFile(RESOURCE_PATH, ".png");
ImageSlicer systemButtons = new ImageSlicer(500,200, RESOURCE_PATH + "StartScreen_ElementSheet.png", true);
systemImages = systemButtons.getSprites();
fileList = new ImageLoader(RESOURCE_PATH).imgCompiler(new FindFile().listFile(RESOURCE_PATH, ".png"));
for(ImageDesc buttons : fileList.get(0)) {
systemImages[Integer.parseInt(buttons.getImageDescription())] = buttons.getImageItself();
}

// TODO: LOAD SYSTEM BG IMAGES
}

Expand Down Expand Up @@ -122,13 +128,30 @@ public BufferedImage[] getSystemImage() {
return systemImages;
}

public ArrayList<ImageDesc> getImageSet(int index) {
return fileList.get(index);
}
public ArrayList<ImageDesc> getImageSet(ImageSelector imageSelector) {
return fileList.get(imageSelector.getValue());
}

/*
public void setSystemImage(BufferedImage[] systemImage) {
this.systemImages = systemImage;
}
*/

public BufferedImage getImageByName(ImageSelector whichPile, String whichOne) {

for(ImageDesc pictures : fileList.get(whichPile.getValue())) {
if(pictures.getImageDescription().contains(whichOne)) {
return pictures.getImageItself();
}
}
return null;
}

public void start() {
sample = new GUI();
sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Expand Down
Binary file modified WaifuBrew/target/classes/start/AnimationPane.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/CharMove.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/ConfigPane$1.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/ConfigPane$2.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/ConfigPane$Handlerclass.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/ConfigPane.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/CustomSlider$Handlerclass.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/CustomSlider.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/FindFile$GenericExtFilter.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/FindFile.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/GUI$Handlerclass.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/GUI.class
Binary file not shown.
Binary file added WaifuBrew/target/classes/start/ImageDesc.class
Binary file not shown.
Binary file added WaifuBrew/target/classes/start/ImageLoader.class
Binary file not shown.
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/StartScreen$1.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/StartScreen$Handlerclass.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/StartScreen.class
Binary file not shown.
Binary file modified WaifuBrew/target/classes/start/WaifuBrew.class
Binary file not shown.

0 comments on commit d5dd364

Please sign in to comment.