DroidQuest/src/com/droidquest/items/StormCloud.java

277 lines
8.7 KiB
Java

package com.droidquest.items;
import com.droidquest.Room;
import com.droidquest.devices.StormShield;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class StormCloud extends Item {
private transient int animateState = 0;
private transient int xDirection;
private transient int yDirection;
private transient int moveTimer;
private transient OrangeRobot orobot;
private transient WhiteRobot wrobot;
private transient BlueRobot brobot;
private transient StormShield stormshield;
private static int maxspeed = 30;
private transient int anicount = 0;
public StormCloud(int X, int Y, Room r) {
x = X;
y = Y;
room = r;
width = 28;
height = 32;
grabbable = false;
GenerateIcons();
}
public void GenerateIcons() {
icons = new ImageIcon[3];
icons[0] = new ImageIcon(new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR));
icons[1] = new ImageIcon(new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR));
icons[2] = new ImageIcon(new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR));
Graphics g;
for (int a = 0; a < 3; a++) {
try {
g = icons[a].getImage().getGraphics();
}
catch (NullPointerException e) {
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
return;
}
Graphics2D g2 = (Graphics2D) g;
Color transparent = new Color(0, 0, 0, 0);
g2.setBackground(transparent);
g2.clearRect(0, 0, 4 * 28, 3 * 32);
g.setColor(Color.white);
g.fillRect(16, 0, 4, 2);
g.fillRect(4, 2, 4, 2);
g.fillRect(12, 4, 4, 2);
g.fillRect(20, 4, 4, 2);
g.fillRect(4, 8, 4, 2);
g.fillRect(12, 8, 4, 2);
g.fillRect(24, 8, 4, 2);
g.fillRect(0, 10, 4, 2);
g.fillRect(8, 10, 4, 2);
g.fillRect(16, 10, 4, 2);
g.fillRect(24, 12, 4, 2);
g.fillRect(8, 14, 4, 2);
g.fillRect(16, 14, 4, 2);
g.fillRect(0, 18, 4, 2);
g.fillRect(12, 18, 4, 2);
g.fillRect(24, 18, 4, 2);
g.fillRect(16, 20, 4, 2);
g.fillRect(4, 22, 4, 2);
g.fillRect(20, 22, 4, 2);
g.fillRect(8, 24, 4, 2);
g.fillRect(16, 24, 4, 2);
}
currentIcon = icons[0].getImage();
do {
xDirection = level.random.nextInt(maxspeed * 2 + 1) - maxspeed;
}
while (xDirection == 0);
do {
yDirection = level.random.nextInt(maxspeed * 2 + 1) - maxspeed;
}
while (yDirection == 0);
moveTimer = level.random.nextInt(50) + 1;
}
public void Animate() {
animateState++;
if (animateState == 3) {
animateState = 0;
}
currentIcon = icons[animateState].getImage();
if (anicount < 3) {
Graphics g;
anicount++;
try {
icons[animateState] = new ImageIcon(new BufferedImage(4 * 28, 3 * 32, BufferedImage.TYPE_4BYTE_ABGR));
g = icons[animateState].getImage().getGraphics();
}
catch (NullPointerException e) {
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
return;
}
Graphics2D g2 = (Graphics2D) g;
Color transparent = new Color(0, 0, 0, 0);
g2.setBackground(transparent);
g2.clearRect(0, 0, 4 * 28, 3 * 32);
for (int b = 0; b < 50; b++) {
switch (level.random.nextInt(7)) {
case 0:
g2.setColor(Color.white);
break;
case 1:
g2.setColor(Color.red);
break;
case 2:
g2.setColor(Color.orange);
break;
case 3:
g2.setColor(Color.yellow);
break;
case 4:
g2.setColor(Color.green);
break;
case 5:
g2.setColor(Color.blue);
break;
case 6:
g2.setColor(Color.magenta);
break;
}
int x1, y1, d;
int d2 = (3 * 32 / 2) * (3 * 32 / 2);
do {
x1 = level.random.nextInt(3 * 32) + 4 * 28 / 2 - 3 * 32 / 2;
y1 = level.random.nextInt(3 * 32);
int xd = (x1 - 4 * 28 / 2);
int yd = (y1 - 3 * 32 / 2);
d = xd * xd + yd * yd;
}
while (d > d2);
g2.fillRect(x1, y1, 2, 2);
}
}
moveTimer--;
if (moveTimer == 0) {
do {
xDirection = level.random.nextInt(maxspeed * 2 + 1) - maxspeed;
}
while (xDirection == 0);
do {
yDirection = level.random.nextInt(maxspeed * 2 + 1) - maxspeed;
}
while (yDirection == 0);
moveTimer = level.random.nextInt(50) + 1;
}
if (brobot == null) {
for (int a = 0; a < level.items.size(); a++) {
Item item = level.items.elementAt(a);
if (item.getClass().toString().endsWith("BlueRobot")) {
brobot = (BlueRobot) item;
}
if (item.getClass().toString().endsWith("OrangeRobot")) {
orobot = (OrangeRobot) item;
}
if (item.getClass().toString().endsWith("WhiteRobot")) {
wrobot = (WhiteRobot) item;
}
if (item.getClass().toString().endsWith("StormShield")) {
stormshield = (StormShield) item;
}
}
}
if (xDirection > 0) {
moveRight(xDirection);
}
if (xDirection < 0) {
moveLeft(-xDirection);
}
if (yDirection > 0) {
moveDown(yDirection);
}
if (yDirection < 0) {
moveUp(-yDirection);
}
if (brobot != null) {
if (Overlaps(brobot)) {
boolean drain = true;
if (stormshield.room == brobot.InternalRoom) {
if (stormshield.ports[0].value) {
drain = false;
}
}
if (drain) {
brobot.charge -= 5000;
}
if (brobot.charge < 0) {
brobot.charge = 0;
}
}
}
if (orobot != null) {
if (Overlaps(orobot)) {
boolean drain = true;
if (stormshield.room == orobot.InternalRoom) {
if (stormshield.ports[0].value) {
drain = false;
}
}
if (drain) {
orobot.charge -= 5000;
}
if (orobot.charge < 0) {
orobot.charge = 0;
}
}
}
if (wrobot != null) {
if (Overlaps(wrobot)) {
boolean drain = true;
if (stormshield.room == wrobot.InternalRoom) {
if (stormshield.ports[0].value) {
drain = false;
}
}
if (drain) {
wrobot.charge -= 5000;
}
if (wrobot.charge < 0) {
wrobot.charge = 0;
}
}
}
}
public void moveRight(int dist) {
int newX = x + dist;
if (newX > 559 - 4 * 28 / 2) {
xDirection = -(level.random.nextInt(maxspeed) + 1);
newX = x + xDirection;
}
x = newX;
}
public void moveLeft(int dist) {
int newX = x - dist;
if (newX < 0) {
xDirection = level.random.nextInt(maxspeed) + 1;
newX = x + xDirection;
}
x = newX;
}
public void moveUp(int dist) {
y -= dist;
if (y < 0) {
room = room.upRoom;
y += 384;
}
}
public void moveDown(int dist) {
y += dist;
if (y > 383) {
room = room.downRoom;
y -= 384;
}
}
}