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; a0) 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; } } }