DroidQuest/src/com/droidquest/materials/DeactivatorSwitch.java

130 lines
4.1 KiB
Java

package com.droidquest.materials;
import com.droidquest.decorations.TextBox;
import com.droidquest.items.Item;
import com.droidquest.items.Sentry;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Date;
public class DeactivatorSwitch extends Material {
// This object deactivates the Sentry in the Hot Wires room. When
// activated, it sets the counter at 20 seconds, sets all versions of
// the HotWires material to value=false, sets the sentry program so that
// it's not sensitive to the area, and updates the timer text display.
// When the counter reaches 0, it resets everything back to normal.
private boolean value;
private Date timeout;
private ImageIcon[] images;
private transient Item sentry = null;
private transient TextBox textbox = null;
public DeactivatorSwitch() {
super(true, false);
value = false;
}
public void GenerateIcons() {
images = new ImageIcon[2];
for (int a = 0; a < 2; a++) {
images[a] = new ImageIcon(new BufferedImage(28, 32, BufferedImage.TYPE_4BYTE_ABGR));
Graphics g;
try {
g = images[a].getImage().getGraphics();
}
catch (NullPointerException e) {
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
return;
}
Graphics2D g2 = (Graphics2D) g;
Color c;
if (a == 0) {
c = Color.white;
}
else {
c = new Color(255, 128, 0);
}
g2.setColor(c);
g.fillRect(0, 0, 28, 32);
g2.setColor(Color.black);
g.fillRect(4, 14, 20, 4);
g.fillRect(8, 12, 12, 8);
g.fillRect(12, 8, 4, 16);
g2.setColor(c);
g.fillRect(12, 14, 4, 4);
}
icon = images[0];
if (value) {
icon = images[1];
}
}
public void TouchedByItem(Item item) {
if (!value) {
value = true;
Date now = new Date();
timeout = new Date(now.getTime() + 20000);
// Find HotWires and set their value to false;
for (int a = 0; a < level.materials.size(); a++) {
Material mat = level.materials.elementAt(a);
if (mat instanceof HotWires) {
HotWires hw = (HotWires) mat;
if (hw.wall != 0) {
hw.value = false;
}
}
}
// Find Sentry and set it's progam to something else.
if (sentry == null) {
for (int a = 0; a < level.items.size(); a++) {
Item i = level.items.elementAt(a);
if (i instanceof Sentry && i.room == item.room.upRoom) {
sentry = i;
}
}
}
((Sentry) sentry).protect[3] = 0;
// Find the TextBox
if (textbox == null) {
textbox = item.room.textBoxes.elementAt(0);
}
}
}
public void Animate() {
icon = images[0];
if (value) {
icon = images[1];
Date now = new Date();
long timer = timeout.getTime() - now.getTime();
if (timer > 0) {
long seconds = Math.abs(timer / 1000) + 1;
if (seconds < 10) {
textbox.textString = "0" + seconds;
}
else {
textbox.textString = "" + seconds;
}
}
else {
for (int a = 0; a < level.materials.size(); a++) {
Material mat = level.materials.elementAt(a);
if (mat instanceof HotWires) {
((HotWires) mat).value = true;
}
}
((Sentry) sentry).protect[3] = 11 * 32;
value = false;
textbox.textString = "00";
}
}
}
}