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

257 lines
6.2 KiB
Java

package com.droidquest.items;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import com.droidquest.Room;
import com.droidquest.devices.StormShield;
public class StormCloud extends Item
{
transient int animateState=0;
transient int xDirection;
transient int yDirection;
transient int moveTimer;
transient OrangeRobot orobot;
transient WhiteRobot wrobot;
transient BlueRobot brobot;
transient StormShield stormshield;
static int maxspeed = 30;
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 = (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==true)
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==true)
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==true)
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;
}
}
}