From 59f933b668e7191f190a7078cd886729c21d9fa3 Mon Sep 17 00:00:00 2001 From: toksikk Date: Mon, 24 Nov 2014 14:33:04 +0100 Subject: [PATCH] Kleine Anfaenge fuer Powerups sowie neue Timer. nach 15 sekunden erhoeht die hardware nicht mehr die temperatur, kann aber noch nicht wieder manipuliert werden. erst nach weiteren 15 sekunden kann sie wieder manipuliert werden. erzwingt, dass der spieler mehr rumlaufen muss. --- .../de/heatup/mapengine/CollisionHandler.java | 5 ++ .../de/heatup/objects/PositionHandler.java | 8 ++ HeatUp/src/de/heatup/objects/PowerUp.java | 75 +++++++++++++++++++ .../src/de/heatup/objects/PowerUpHandler.java | 5 ++ .../de/heatup/timers/HardwareResetTimers.java | 20 ++++- 5 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 HeatUp/src/de/heatup/objects/PositionHandler.java create mode 100644 HeatUp/src/de/heatup/objects/PowerUp.java create mode 100644 HeatUp/src/de/heatup/objects/PowerUpHandler.java diff --git a/HeatUp/src/de/heatup/mapengine/CollisionHandler.java b/HeatUp/src/de/heatup/mapengine/CollisionHandler.java index 5b05984..5ca8cce 100644 --- a/HeatUp/src/de/heatup/mapengine/CollisionHandler.java +++ b/HeatUp/src/de/heatup/mapengine/CollisionHandler.java @@ -4,11 +4,13 @@ import java.awt.Point; import java.util.ArrayList; import de.heatup.logging.Logger; +import de.heatup.objects.PowerUp; import de.heatup.testing.Opponent; import de.heatup.testing.Player; public class CollisionHandler { private static ArrayList movingObjects = new ArrayList(); + private static ArrayList powerUpObjects = new ArrayList(); /** * Prüfe ob eine Kollision vorliegt * @param movingObject Kann alles sein, dass sich bewegt. Spieler oder KI. @@ -139,4 +141,7 @@ public class CollisionHandler { public static void addMovingObject(Player movingObject) { movingObjects.add(movingObject); } + public static void addPowerUpObject(PowerUp powerUp) { + powerUpObjects.add(powerUp); + } } diff --git a/HeatUp/src/de/heatup/objects/PositionHandler.java b/HeatUp/src/de/heatup/objects/PositionHandler.java new file mode 100644 index 0000000..673f20b --- /dev/null +++ b/HeatUp/src/de/heatup/objects/PositionHandler.java @@ -0,0 +1,8 @@ +package de.heatup.objects; + +import java.awt.Point; +import java.util.ArrayList; + +public class PositionHandler { + +} diff --git a/HeatUp/src/de/heatup/objects/PowerUp.java b/HeatUp/src/de/heatup/objects/PowerUp.java new file mode 100644 index 0000000..b7d770b --- /dev/null +++ b/HeatUp/src/de/heatup/objects/PowerUp.java @@ -0,0 +1,75 @@ +package de.heatup.objects; + +import java.awt.BasicStroke; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Random; + +import javax.imageio.ImageIO; +import javax.swing.JComponent; + +import de.heatup.cfg.Config; +import de.heatup.logging.Logger; +import de.heatup.mapengine.CollisionHandler; + +public class PowerUp extends JComponent { + private static final long serialVersionUID = 1L; + protected BufferedImage bf1; + protected Graphics2D g2d; + private Point currentGridPosition; + private int type; + + public PowerUp() { + Random rand = new Random(); + CollisionHandler.addPowerUpObject(this); + this.type = rand.nextInt(3); + } + + public void setGridLocation(int x, int y) { + currentGridPosition.setLocation(x, y); + } + + public Point getGridLocation() { + return currentGridPosition; + } + + public void paintComponent(Graphics g) { + g2d = (Graphics2D) g; + if (bf1 == null) { + loadBufferedImage(); + } + + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.drawImage(bf1, 0, 0, this); + g2d.setStroke(new BasicStroke(8.0f)); + g2d.finalize(); + } + + public void spawnAt(Point spawnPoint) { + this.currentGridPosition = spawnPoint; + this.setAutoBounds(spawnPoint.x*25, spawnPoint.y*25); + this.repaint(); + } + + protected void loadBufferedImage() { + try { + this.bf1 = ImageIO.read(new File("src/de/heatup/resources/images/powerup.png")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void setImage(BufferedImage image) { + this.bf1 = image; + } + + public void setAutoBounds(int x, int y) { + this.setBounds(x, y, this.bf1.getWidth(), this.bf1.getHeight()); + } + +} diff --git a/HeatUp/src/de/heatup/objects/PowerUpHandler.java b/HeatUp/src/de/heatup/objects/PowerUpHandler.java new file mode 100644 index 0000000..f750627 --- /dev/null +++ b/HeatUp/src/de/heatup/objects/PowerUpHandler.java @@ -0,0 +1,5 @@ +package de.heatup.objects; + +public class PowerUpHandler { + private static +} diff --git a/HeatUp/src/de/heatup/timers/HardwareResetTimers.java b/HeatUp/src/de/heatup/timers/HardwareResetTimers.java index dba72cb..a59f46b 100644 --- a/HeatUp/src/de/heatup/timers/HardwareResetTimers.java +++ b/HeatUp/src/de/heatup/timers/HardwareResetTimers.java @@ -13,6 +13,7 @@ public class HardwareResetTimers { private static int tickRoundMax = 10000; private static int nrOfTicksUntilReset = 900; /* entspricht 15 sekunden ingame zeit (nicht unbedingt echtzeit!); berechnet durch 15*targetTickRate im Gameloop. */ private static Map HardwareResetTickstamps = new HashMap(); + private static Map HardwareCooldownTimestamps = new HashMap(); /** * Zählt ticks und resettet somit Spielzeit orientiert die Hardware-Objekte. */ @@ -24,23 +25,36 @@ public class HardwareResetTimers { for (char i = Config.firstHardwareChar; i<=Config.lastHardwareChar; i++) { if (HardwareResetTickstamps.containsKey(i)) { if (HardwareResetTickstamps.get(i).equals(tickCount)) { - Logger.write("Hardware "+i+" reset"); - HardewareManipulate.resetHardware(i); + Logger.write("Hardware "+i+" cools down"); StatusPanelAdder.reduceMod(); } } } + for (char i = Config.firstHardwareChar; i<=Config.lastHardwareChar; i++) { + if (HardwareCooldownTimestamps.containsKey(i)) { + if (HardwareCooldownTimestamps.get(i).equals(tickCount)) { + Logger.write("Hardware "+i+" can be manipulated again"); + HardewareManipulate.resetHardware(i); + } + } + } } /** - * Setzt das gegebene Hardware-Objekt auf "manipuliert" und merkt sich den aktuellen Tick + Resetzeit = Tick an dem resettet werden muss. + * Setzt das gegebene Hardware-Objekt auf "manipuliert" und merkt sich den aktuellen Tick + Resetzeit = Tick an dem resettet werden muss, + * sowie aktueller Tick + 2*Resetzeit als Cooldown. * @param c Hardware-Objekt, welches als manipuliert gelten soll. */ public static void setManipulated(char c) { int resetTimestamp = tickCount+nrOfTicksUntilReset; + int cooldownTimestamp = tickCount+2*nrOfTicksUntilReset; if (resetTimestamp > tickRoundMax) { resetTimestamp = resetTimestamp % tickRoundMax; } + if (cooldownTimestamp > tickRoundMax) { + cooldownTimestamp = cooldownTimestamp % tickRoundMax; + } HardwareResetTickstamps.put(c, resetTimestamp); + HardwareCooldownTimestamps.put(c, cooldownTimestamp); StatusPanelAdder.raiseMod(); } }