diff --git a/src/main/java/client/Game.java b/src/main/java/client/Game.java index fcd154d..cc0ce7b 100644 --- a/src/main/java/client/Game.java +++ b/src/main/java/client/Game.java @@ -20,7 +20,7 @@ public class Game extends Canvas implements Runnable, KeyListener { private Thread thread; private static final long NANOSECOND = 1000000000; - private static final double OPTIMAL_TICKS = 50.0; + private static final double OPTIMAL_TICKS = 75.0; private static final double OPTIMAL_TIME = NANOSECOND / OPTIMAL_TICKS; private long lastLoopTime = System.nanoTime(); @@ -32,7 +32,7 @@ public class Game extends Canvas implements Runnable, KeyListener { public static Game instance; - public static CurrentlySelected currentlySelected = new CurrentlySelected(); + public static HeadsUpDisplay headsUpDisplay; public static final List entities = new ArrayList<>(); public static final List drawables = new ArrayList<>(); @@ -58,6 +58,7 @@ public static void main(String[] args) { public Game () { Blocks.init(); + headsUpDisplay = new HeadsUpDisplay(); addKeyListener(this); @@ -78,9 +79,9 @@ public Game () { drawables.add(e); } - entities.add(currentlySelected); - drawables.add(currentlySelected); - addKeyListener(currentlySelected); + entities.add(headsUpDisplay); + drawables.add(headsUpDisplay); + addKeyListener(headsUpDisplay); entities.add(fpsViewer); drawables.add(fpsViewer); diff --git a/src/main/java/client/renderables/BlockRender.java b/src/main/java/client/renderables/BlockRender.java index deb32d1..cf3b66f 100644 --- a/src/main/java/client/renderables/BlockRender.java +++ b/src/main/java/client/renderables/BlockRender.java @@ -3,6 +3,7 @@ import client.Game; import common.block.Block; import common.block.BlockAir; +import common.item.ItemBlock; import common.registries.Blocks; import utils.FileUtils; @@ -45,7 +46,7 @@ public BlockRender(Block block, int x, int y){ @Override public void draw(Graphics g) { - g.drawImage(texture, x, y, Game.instance); + g.drawImage(texture, x, y, null); } @Override @@ -75,7 +76,9 @@ public void mousePressed(MouseEvent e) { e1.printStackTrace(); } } else if (e.getButton() == MouseEvent.BUTTON3 && (x <= e.getX() && x+width>= e.getX()) && (y <= e.getY() && y+height>= e.getY())){ - block = Game.currentlySelected.selected; + if (Game.headsUpDisplay.getSelected().getItemStack().getItem() instanceof ItemBlock) { + block = ((ItemBlock)Game.headsUpDisplay.getSelected().getItemStack().getItem()).getBlock(); + } try { this.texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/blocks/"+block.getName()+".png")), 4.0); } catch (IOException | NullPointerException e1) { diff --git a/src/main/java/client/renderables/CurrentlySelected.java b/src/main/java/client/renderables/CurrentlySelected.java deleted file mode 100644 index e30b182..0000000 --- a/src/main/java/client/renderables/CurrentlySelected.java +++ /dev/null @@ -1,82 +0,0 @@ -package client.renderables; - -import client.Game; -import common.block.Block; -import common.registries.Blocks; -import org.w3c.dom.events.MouseEvent; -import utils.FileUtils; - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; - -public class CurrentlySelected implements Drawable, Entity, MouseWheelListener, KeyListener{ - public Block selected=Blocks.grass; - - @Override - public void draw(Graphics g) { - BufferedImage texture; - try { - texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/blocks/"+selected.getName()+".png")), 2.0); - } catch (IOException | NullPointerException e1) { - try { - texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/placeholder.png")), 2.0); - } catch (IOException ex) { - texture=new BufferedImage(64,64,BufferedImage.TYPE_INT_ARGB); - ex.printStackTrace(); - } - e1.printStackTrace(); - } - g.drawImage(texture, 16,16 , Game.instance); - } - - @Override - public void tick() { - - } - - @Override - public void second() { - - } - - @Override - public void keyTyped(KeyEvent e) { - - } - - @Override - public void keyPressed(KeyEvent e) { - switch (e.getKeyCode()){ - case KeyEvent.VK_1: - selected = Blocks.grass; - break; - case KeyEvent.VK_2: - selected = Blocks.dirt; - break; - case KeyEvent.VK_3: - selected = Blocks.stone; - break; - case KeyEvent.VK_4: - selected = Blocks.launcher; - break; - default: - break; - } - } - - @Override - public void keyReleased(KeyEvent e) { - - } - - @Override - public void mouseWheelMoved(MouseWheelEvent e) { - } -} diff --git a/src/main/java/client/renderables/HeadsUpDisplay.java b/src/main/java/client/renderables/HeadsUpDisplay.java new file mode 100644 index 0000000..ae7886b --- /dev/null +++ b/src/main/java/client/renderables/HeadsUpDisplay.java @@ -0,0 +1,82 @@ +package client.renderables; + +import common.block.Block; +import common.item.ItemBlock; +import common.item.ItemStack; +import common.registries.Blocks; + +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +public class HeadsUpDisplay implements Entity, Drawable, KeyListener { + + private int selected = 0; + private Slot[] slots; + { + slots = new Slot[8]; + for (int i = 0; i < 7; i++) { + slots[i] = new Slot(); + } + slots[0].setItemStack(new ItemStack(new ItemBlock(Blocks.grass),1)); + slots[1].setItemStack(new ItemStack(new ItemBlock(Blocks.dirt),1)); + slots[2].setItemStack(new ItemStack(new ItemBlock(Blocks.stone), 1)); + slots[3].setItemStack(new ItemStack(new ItemBlock(Blocks.launcher), 1)); + } + + public HeadsUpDisplay() { + } + + @Override + public void draw(Graphics g) { + g.setColor(Color.LIGHT_GRAY); + g.fillRect(16, 16, 32*8 + 20, 32 + 4); + for (int i =0; i < slots.length; i++) { + slots[i].draw(g, 32*i + 17, 17, i == selected); + } + } + + @Override + public void tick() { + + } + + @Override + public void second() { + + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_1: + selected = 0; + break; + case KeyEvent.VK_2: + selected = 1; + break; + case KeyEvent.VK_3: + selected = 2; + break; + case KeyEvent.VK_4: + selected = 3; + break; + default: + break; + } + } + + @Override + public void keyReleased(KeyEvent e) { + + } + + public Slot getSelected() { + return slots[0]; + } +} diff --git a/src/main/java/client/renderables/Slot.java b/src/main/java/client/renderables/Slot.java new file mode 100644 index 0000000..e51eefb --- /dev/null +++ b/src/main/java/client/renderables/Slot.java @@ -0,0 +1,56 @@ +package client.renderables; + +import client.Game; +import common.block.Block; +import common.containers.ISlot; +import common.item.Item; +import common.item.ItemBlock; +import common.item.ItemStack; +import common.registries.Blocks; +import org.w3c.dom.events.MouseEvent; +import utils.FileUtils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class Slot implements ISlot { + private ItemStack stack = new ItemStack(new ItemBlock(Blocks.air),0); + + public void draw(Graphics g, int x, int y, boolean selected) { + BufferedImage texture; + try { + if (stack.getItem() instanceof ItemBlock) { + texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/blocks/" + stack.getItem().getName() + ".png")), 2.0); + } else { + texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/items/" + stack.getItem().getName() + ".png")), 2.0); + } + } catch (IOException | NullPointerException e1) { + try { + texture = FileUtils.scale1(ImageIO.read(this.getClass().getClassLoader().getResource("tex/placeholder.png")), 2.0); + } catch (IOException ex) { + texture=new BufferedImage(64,64,BufferedImage.TYPE_INT_ARGB); + ex.printStackTrace(); + } + e1.printStackTrace(); + } + g.fillRect(x,y, 34,34); + g.drawImage(texture, x+1,y+1 , Game.instance); + } + + @Override + public void setItemStack(ItemStack stack) { + this.stack = stack; + } + + @Override + public ItemStack getItemStack() { + return stack; + } +} diff --git a/src/main/java/common/item/ItemBlock.java b/src/main/java/common/item/ItemBlock.java index a3b1ea3..e375d2b 100644 --- a/src/main/java/common/item/ItemBlock.java +++ b/src/main/java/common/item/ItemBlock.java @@ -15,4 +15,7 @@ public void onItemUse(){ //TODO: On item use add block to world and decress item stack. } + public Block getBlock() { + return block; + } }