Remove canvas visual
This commit is contained in:
@@ -1,191 +0,0 @@
|
||||
package de.siphalor.was.visual;
|
||||
|
||||
import de.siphalor.was.WhatAStorage;
|
||||
import de.siphalor.was.assets.AssetsManager;
|
||||
import de.siphalor.was.content.product.Product;
|
||||
import de.siphalor.was.content.quest.Quest;
|
||||
import de.siphalor.was.game.Transaction;
|
||||
import de.siphalor.was.visual.canvas.layout.FixedAspectLayout;
|
||||
import de.siphalor.was.visual.canvas.layout.FulfillingLayout;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.BufferStrategy;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CanvasVisual implements Visual {
|
||||
@NotNull
|
||||
public static final Image MISSINGNO = getImage("textures/missingno.png");
|
||||
private static final double ASPECT_RATIO = 16.0 / 9.0;
|
||||
private static final Map<String, Image> imageCache = new HashMap<>();
|
||||
private WhatAStorage main;
|
||||
|
||||
private final Frame frame = new Frame(WhatAStorage.TITLE);
|
||||
private final Canvas canvas = new Canvas();
|
||||
private BufferStrategy bufferStrategy;
|
||||
private long minTickTime = 1000L / 60L;
|
||||
|
||||
private boolean fullScreen = false;
|
||||
|
||||
@NotNull
|
||||
public static Image getImage(@NotNull String path) {
|
||||
Image image = imageCache.get(path);
|
||||
if (image == null) {
|
||||
image = AssetsManager.getStream(path).map(inputStream -> {
|
||||
try {
|
||||
return (Image) ImageIO.read(inputStream);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}).orElse(MISSINGNO);
|
||||
imageCache.put(path, image);
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setup(WhatAStorage whatAStorage) {
|
||||
main = whatAStorage;
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
super.windowClosing(e);
|
||||
main.scheduleStop();
|
||||
}
|
||||
});
|
||||
frame.addComponentListener(new ComponentAdapter() {
|
||||
@Override
|
||||
public void componentResized(ComponentEvent e) {
|
||||
super.componentResized(e);
|
||||
}
|
||||
});
|
||||
frame.addKeyListener(new KeyListener() {
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (e.getExtendedKeyCode() == KeyEvent.VK_F11) {
|
||||
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
|
||||
frame.dispose();
|
||||
if (fullScreen) {
|
||||
System.out.println("End fullscreen");
|
||||
frame.setUndecorated(false);
|
||||
frame.setVisible(true);
|
||||
device.setFullScreenWindow(null);
|
||||
fullScreen = false;
|
||||
} else {
|
||||
System.out.println("Start fullscreen");
|
||||
frame.setUndecorated(true);
|
||||
frame.setVisible(true);
|
||||
device.setFullScreenWindow(frame);
|
||||
fullScreen = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
Panel panel = new Panel();
|
||||
panel.setBackground(Color.BLACK);
|
||||
frame.add(panel);
|
||||
frame.setLayout(new FulfillingLayout(panel));
|
||||
|
||||
panel.add(canvas);
|
||||
panel.setLayout(new FixedAspectLayout(ASPECT_RATIO, canvas));
|
||||
|
||||
frame.setVisible(true);
|
||||
frame.pack();
|
||||
frame.setLocationRelativeTo(null);
|
||||
|
||||
canvas.createBufferStrategy(2);
|
||||
bufferStrategy = canvas.getBufferStrategy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
long time, timeDelta, tickBegin = System.nanoTime();
|
||||
|
||||
while (!main.isStopScheduled()) {
|
||||
time = System.nanoTime();
|
||||
timeDelta = time - tickBegin;
|
||||
tickBegin = System.nanoTime();
|
||||
|
||||
do {
|
||||
do {
|
||||
Graphics graphics = bufferStrategy.getDrawGraphics();
|
||||
|
||||
graphics.dispose();
|
||||
|
||||
} while(bufferStrategy.contentsRestored());
|
||||
|
||||
bufferStrategy.show();
|
||||
} while(bufferStrategy.contentsLost());
|
||||
|
||||
time = System.nanoTime();
|
||||
timeDelta = time - tickBegin;
|
||||
|
||||
if (timeDelta < minTickTime) {
|
||||
try {
|
||||
Thread.sleep((minTickTime - timeDelta) / 1_000_000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
frame.setVisible(false);
|
||||
frame.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGameStart() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScheduleStop() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateI18n() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBalanceChanged(int budget, Transaction transaction, int totalIncome, int totalLoss) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuestAdded(Quest newQuest, boolean canCreateMore) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuestRemoved(int index) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProductSet(int x, int y, int z, Product product) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProductCleared(int x, int y, int z, Product product) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package de.siphalor.was.visual.canvas.layout;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class FixedAspectLayout implements LayoutManager {
|
||||
/**
|
||||
* Width through height
|
||||
*/
|
||||
private final double aspectRatio;
|
||||
@Nullable
|
||||
private Component component;
|
||||
|
||||
public FixedAspectLayout(double aspectRatio) {
|
||||
this(aspectRatio, null);
|
||||
}
|
||||
|
||||
public FixedAspectLayout(double aspectRatio, @Nullable Component component) {
|
||||
this.aspectRatio = aspectRatio;
|
||||
this.component = component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLayoutComponent(String name, Component comp) {
|
||||
component = comp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLayoutComponent(Component comp) {
|
||||
if (component == comp)
|
||||
component = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension preferredLayoutSize(Container parent) {
|
||||
return parent.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension minimumLayoutSize(Container parent) {
|
||||
return parent.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void layoutContainer(Container parent) {
|
||||
if (component != null) {
|
||||
Insets insets = parent.getInsets();
|
||||
int width = parent.getWidth() - (insets.left + insets.right);
|
||||
int height = parent.getHeight() - (insets.top + insets.bottom);
|
||||
|
||||
int calc = (int) (height * aspectRatio);
|
||||
if (calc <= width) {
|
||||
component.setBounds(insets.left + (width - calc) / 2, insets.top, calc, height);
|
||||
} else {
|
||||
calc = (int) (width / aspectRatio);
|
||||
component.setBounds(insets.left, insets.top + (height - calc) / 2, width, calc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
package de.siphalor.was.visual.canvas.layout;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class FulfillingLayout implements LayoutManager {
|
||||
private Component component;
|
||||
|
||||
public FulfillingLayout() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public FulfillingLayout(Component component) {
|
||||
this.component = component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLayoutComponent(String name, Component comp) {
|
||||
component = comp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLayoutComponent(Component comp) {
|
||||
component = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension preferredLayoutSize(Container parent) {
|
||||
Insets insets = parent.getInsets();
|
||||
return new Dimension(parent.getWidth() - (insets.left + insets.right), parent.getHeight() - (insets.top + insets.bottom));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension minimumLayoutSize(Container parent) {
|
||||
Insets insets = parent.getInsets();
|
||||
return new Dimension(parent.getWidth() - (insets.left + insets.right), parent.getHeight() - (insets.top + insets.bottom));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void layoutContainer(Container parent) {
|
||||
if (component != null) {
|
||||
Insets insets = parent.getInsets();
|
||||
|
||||
component.setBounds(insets.left, insets.top,
|
||||
parent.getWidth() - (insets.left + insets.right),
|
||||
parent.getHeight() - (insets.top + insets.bottom)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package de.siphalor.was.visual.canvas.render;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class AnimatedTextureObject extends TextureObject {
|
||||
private final int frameTime;
|
||||
private final Image[] frames;
|
||||
|
||||
private int time = 0;
|
||||
|
||||
public AnimatedTextureObject(int x, int y, int width, int height, int frameTime, Image... frames) {
|
||||
super(x, y, width, height);
|
||||
this.frameTime = frameTime;
|
||||
this.frames = frames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(int delta) {
|
||||
super.tick(delta);
|
||||
|
||||
time += delta;
|
||||
if (time >= frames.length * frameTime) {
|
||||
time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Image getTexture() {
|
||||
return frames[time / frameTime];
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package de.siphalor.was.visual.canvas.render;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public interface Renderable {
|
||||
void tick(int delta);
|
||||
void render(Graphics graphics, int width, int height);
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
package de.siphalor.was.visual.canvas.render;
|
||||
|
||||
import de.siphalor.was.util.Util;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public abstract class TextureObject implements Renderable, Cloneable {
|
||||
private int x;
|
||||
private int y;
|
||||
private int width;
|
||||
private int height;
|
||||
|
||||
protected TextureObject(int x, int y, int width, int height) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
public void mirrorX() {
|
||||
x += width;
|
||||
width = -width;
|
||||
}
|
||||
|
||||
public void mirrorY() {
|
||||
y += height;
|
||||
height = -height;
|
||||
}
|
||||
|
||||
public abstract Image getTexture();
|
||||
|
||||
@Override
|
||||
public void tick(int delta) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics graphics, int width, int height) {
|
||||
graphics.drawImage(getTexture(), x * width / 1600, y * height / 900, this.width * width / 1600, this.height * height / 900, Util.dummyImageObserver());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user