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

120 lines
4.0 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.decorations.Spark;
public class Turbine extends Item {
// Turbines are wind-powered locks. They watch the level.sparks vector
// for sparks that intersect them. When Sparks intersect the turbines
// they animate and change materials in the cells array. When the sparks
// stop, the animation stops and the cells are slowly replaced. The
// direction of the Sparks don't matter in this case.
//
// The cells array is a straight array with each cell defined with 4 numbers;
// X,Y, Open Material, Closed Material.
//
private int[] cells;
private int animationState;
private int cellCounter = 0;
public Turbine(int X, int Y, Room r, int[] c) {
x = X;
y = Y;
room = r;
cells = c;
width = 28;
height = 64;
grabbable = false;
GenerateIcons();
}
public void GenerateIcons() {
icons = new ImageIcon[4];
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));
Graphics g;
for (int a = 0; a < 4; 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, width, height);
g.setColor(Color.yellow);
g.fillRect(0, 28, 28, 8);
switch (a) {
case 0:
g.fillOval(4, 4, 20, 24);
g.fillOval(4, 36, 20, 24);
break;
case 1:
g.fillOval(4, 12, 20, 16);
g.fillOval(4, 36, 20, 16);
break;
case 2:
g.fillOval(4, 20, 20, 8);
g.fillOval(4, 36, 20, 8);
break;
case 3:
g.fillOval(4, 12, 20, 16);
g.fillOval(4, 36, 20, 16);
break;
}
}
currentIcon = icons[0].getImage();
}
public void Animate() {
boolean flag = false;
for (int a = 0; a < level.sparks.size(); a++) {
Spark spark = level.sparks.elementAt(a);
if (spark.room == room) {
if (spark.y >= y && spark.y <= y + height) {
if (spark.x >= x && spark.x <= x + width) {
flag = true;
}
}
}
}
if (flag) {
animationState = (animationState + 1) % 4;
currentIcon = icons[animationState].getImage();
if (cellCounter < cells.length * 2) {
cellCounter++;
}
int cell = cellCounter / 8;
if (cell < cells.length / 4) {
room.SetMaterial(cells[4 * cell],
cells[4 * cell + 1],
cells[4 * cell + 2]);
}
}
else {
if (cellCounter > 0) {
cellCounter--;
}
int cell = cellCounter / 8;
if (cell < cells.length / 4) {
room.SetMaterial(cells[4 * cell],
cells[4 * cell + 1],
cells[4 * cell + 3]);
}
}
}
}