352 lines
7.9 KiB
Java
352 lines
7.9 KiB
Java
|
package com.droidquest.items;
|
||
|
|
||
|
import java.awt.Color;
|
||
|
import java.awt.Dimension;
|
||
|
import java.awt.Graphics;
|
||
|
import java.awt.Graphics2D;
|
||
|
import java.awt.image.BufferedImage;
|
||
|
|
||
|
import javax.swing.ImageIcon;
|
||
|
|
||
|
import com.droidquest.Room;
|
||
|
|
||
|
public class AmpireBot extends Item
|
||
|
{
|
||
|
int animationState=0; // 0-4
|
||
|
boolean alive=true;
|
||
|
int behaviorState=0;
|
||
|
// 0=Wait for Player
|
||
|
// 1=Patrol Init
|
||
|
// 2=Patrol Left
|
||
|
// 3=Patrol Up
|
||
|
// 4=Patrol Right
|
||
|
// 5=Patrol Down
|
||
|
// 6=Pounce
|
||
|
// 7=Drain
|
||
|
int previousBehavior; // Used to return from Attack
|
||
|
Item target;
|
||
|
|
||
|
public AmpireBot(int X, int Y, Room r)
|
||
|
{
|
||
|
x=X; y=Y; room=r;
|
||
|
grabbable = false;
|
||
|
width=26;height=32;
|
||
|
GenerateIcons();
|
||
|
currentIcon = icons[0].getImage();
|
||
|
}
|
||
|
|
||
|
public void GenerateIcons()
|
||
|
{
|
||
|
icons = new ImageIcon[6];
|
||
|
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));
|
||
|
icons[3]= new ImageIcon(new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR));
|
||
|
icons[4]= new ImageIcon(new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR));
|
||
|
icons[5]= new ImageIcon(new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR));
|
||
|
Graphics g;
|
||
|
Graphics2D g2;
|
||
|
Color transparent = new Color(0,0,0,0);
|
||
|
|
||
|
// 0= blue 1
|
||
|
try
|
||
|
{
|
||
|
g = icons[0].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,16,6,6);
|
||
|
g.fillRect(6,18,14,2);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
|
||
|
// 1= blue 2
|
||
|
try
|
||
|
{
|
||
|
g = icons[1].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
g.fillRect(8,28,10,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,14,6,6);
|
||
|
g.fillRect(6,16,14,2);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(8,6,8,2);
|
||
|
|
||
|
// 2= blue 3
|
||
|
try
|
||
|
{
|
||
|
g = icons[2].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(12,24,2,4);
|
||
|
g.fillRect(0,28,6,2);
|
||
|
g.fillRect(20,28,6,2);
|
||
|
g.fillRect(8,30,10,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,12,6,6);
|
||
|
g.fillRect(6,14,14,2);
|
||
|
g.setColor(Color.blue);
|
||
|
g.fillRect(18,6,8,2);
|
||
|
|
||
|
// 3= green 1
|
||
|
try
|
||
|
{
|
||
|
g = icons[3].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(Color.green);
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,16,6,6);
|
||
|
g.fillRect(6,18,14,2);
|
||
|
g.setColor(Color.green);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
|
||
|
// 4= orange 2
|
||
|
try
|
||
|
{
|
||
|
g = icons[4].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(new Color(255,128,0));
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(2,6,8,2);
|
||
|
g.fillRect(8,28,10,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,14,6,6);
|
||
|
g.fillRect(6,16,14,2);
|
||
|
g.setColor(new Color(255,128,0));
|
||
|
g.fillRect(8,6,8,2);
|
||
|
|
||
|
// 5= green 3
|
||
|
try
|
||
|
{
|
||
|
g = icons[5].getImage().getGraphics();
|
||
|
}
|
||
|
catch (NullPointerException e)
|
||
|
{
|
||
|
System.out.println("Could not get Graphics pointer to " + getClass() + " Image");
|
||
|
return;
|
||
|
}
|
||
|
g2 = (Graphics2D) g;
|
||
|
g2.setBackground(transparent);
|
||
|
g2.clearRect(0,0,width,height);
|
||
|
g.setColor(Color.green);
|
||
|
g.fillRect(8,0,8,2);
|
||
|
g.fillRect(0,2,26,10);
|
||
|
g.fillRect(4,12,18,12);
|
||
|
g.fillRect(0,16,26,6);
|
||
|
g.fillRect(12,24,2,8);
|
||
|
g.fillRect(12,24,2,4);
|
||
|
g.fillRect(0,28,6,2);
|
||
|
g.fillRect(20,28,6,2);
|
||
|
g.fillRect(8,30,10,2);
|
||
|
g.setColor(Color.black);
|
||
|
g.fillRect(2,4,22,6);
|
||
|
g.fillRect(10,12,6,6);
|
||
|
g.fillRect(6,14,14,2);
|
||
|
g.setColor(Color.green);
|
||
|
g.fillRect(18,6,8,2);
|
||
|
|
||
|
if (animationState==4) animationState=0;
|
||
|
int frame = animationState;
|
||
|
if (animationState==3) frame=1;
|
||
|
if (!alive) frame +=3;
|
||
|
currentIcon = icons[frame].getImage();
|
||
|
}
|
||
|
|
||
|
public void Animate()
|
||
|
{
|
||
|
animationState++;
|
||
|
if (animationState==4) animationState=0;
|
||
|
int frame = animationState;
|
||
|
if (animationState==3) frame=1;
|
||
|
if (!alive) frame +=3;
|
||
|
currentIcon = icons[frame].getImage();
|
||
|
|
||
|
if (alive)
|
||
|
{
|
||
|
if (behaviorState<6)
|
||
|
for (int a=0;a<level.items.size(); a++)
|
||
|
{
|
||
|
target = (Item) level.items.elementAt(a);
|
||
|
if (target.room == room)
|
||
|
if (target.charge>0)
|
||
|
{
|
||
|
previousBehavior=behaviorState;
|
||
|
behaviorState=6;
|
||
|
a=level.items.size();
|
||
|
}
|
||
|
}
|
||
|
switch (behaviorState)
|
||
|
{
|
||
|
case 0:
|
||
|
if (level.player.room == room) behaviorState=1;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (y>=192)
|
||
|
behaviorState = 2;
|
||
|
else
|
||
|
{
|
||
|
MoveDown( 8);
|
||
|
if (x<280) MoveRight(8);
|
||
|
if (x>280) MoveLeft(8);
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (room==(Room) level.rooms.elementAt(18) && x<=280)
|
||
|
behaviorState = 3;
|
||
|
else
|
||
|
{
|
||
|
MoveLeft( 8);
|
||
|
if (y<192) MoveDown(8);
|
||
|
if (y>192) MoveUp(8);
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (room==(Room) level.rooms.elementAt(19) && y<=192)
|
||
|
behaviorState = 4;
|
||
|
else
|
||
|
{
|
||
|
MoveUp( 8);
|
||
|
if (x<280) MoveRight(8);
|
||
|
if (x>280) MoveLeft(8);
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
if (room==(Room) level.rooms.elementAt(15) && x>=280)
|
||
|
behaviorState = 5;
|
||
|
else
|
||
|
{
|
||
|
MoveRight( 8);
|
||
|
if (y<192) MoveDown(8);
|
||
|
if (y>192) MoveUp(8);
|
||
|
}
|
||
|
break;
|
||
|
case 5:
|
||
|
if (room==(Room) level.rooms.elementAt(16) && y>=192)
|
||
|
behaviorState = 2;
|
||
|
else
|
||
|
{
|
||
|
MoveDown( 8);
|
||
|
if (x<280) MoveRight(8);
|
||
|
if (x>280) MoveLeft(8);
|
||
|
}
|
||
|
break;
|
||
|
case 6:
|
||
|
if (target.room != room)
|
||
|
behaviorState = previousBehavior;
|
||
|
if (Overlaps(target))
|
||
|
{
|
||
|
behaviorState=7;
|
||
|
break;
|
||
|
}
|
||
|
Dimension d = target.GetXY();
|
||
|
if (d.width<x) MoveLeft(false);
|
||
|
if (d.width>x) MoveRight(false);
|
||
|
if (d.height<y) MoveUp(false);
|
||
|
if (d.height>y) MoveDown(false);
|
||
|
break;
|
||
|
case 7:
|
||
|
if (target.room != room)
|
||
|
{
|
||
|
behaviorState = previousBehavior;
|
||
|
break;
|
||
|
}
|
||
|
if (target.charge>0 && Overlaps(target))
|
||
|
{
|
||
|
if (target.getClass().toString().endsWith("BlackCrystal"))
|
||
|
alive = false;
|
||
|
else
|
||
|
target.charge-=3125;
|
||
|
}
|
||
|
else
|
||
|
behaviorState = 6;
|
||
|
if (target.charge <=0)
|
||
|
{
|
||
|
target.charge=0;
|
||
|
behaviorState=previousBehavior;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Erase()
|
||
|
{
|
||
|
super.Erase();
|
||
|
target = null;
|
||
|
}
|
||
|
|
||
|
}
|