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

242 lines
7.2 KiB
Java

package com.droidquest.items;
import com.droidquest.Room;
import com.droidquest.devices.*;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class ToolBox extends Item {
public boolean open;
public ToolBox(int X, int Y, Room r) {
x = X;
y = Y;
room = r;
width = 26;
height = 22;
// width=166; height=94;
open = false;
GenerateIcons();
currentIcon = icons[0].getImage();
}
public void GenerateIcons() {
// Executes once during initialization
icons = new ImageIcon[2];
icons[0] = new ImageIcon(new BufferedImage(26, 22, BufferedImage.TYPE_4BYTE_ABGR));
icons[1] = new ImageIcon(new BufferedImage(166, 94, BufferedImage.TYPE_4BYTE_ABGR));
Graphics g;
Graphics2D g2;
try {
g = icons[0].getImage().getGraphics();
}
catch (NullPointerException e) {
System.out.println("Could not get Graphics pointer to Remote Image[0]");
return;
}
g2 = (Graphics2D) g;
g2.setBackground(new Color(0, 0, 0, 0));
g2.clearRect(0, 0, width, height);
g2.setColor(Color.blue);
g2.fillRect(4, 0, 18, 2);
g2.fillRect(0, 2, 26, 20);
g2.setColor(Color.black);
g2.fillRect(6, 2, 14, 2);
g2.fillRect(0, 6, 26, 2);
g2.fillRect(6, 10, 14, 2);
g2.fillRect(10, 12, 6, 2);
try {
g = icons[1].getImage().getGraphics();
}
catch (NullPointerException e) {
System.out.println("Could not get Graphics pointer to Remote Image[0]");
return;
}
g2 = (Graphics2D) g;
g2.setBackground(new Color(0, 0, 0, 0));
g2.clearRect(0, 0, 166, 94);
g2.setColor(Color.white);
g2.drawRect(0, 0, 165, 93);
g2.setColor(Color.blue);
g2.fillRect(4, 72 + 0, 18, 2);
g2.fillRect(0, 72 + 2, 26, 20);
g2.setColor(Color.black);
g2.fillRect(6, 72 + 2, 14, 2);
g2.fillRect(0, 72 + 6, 26, 2);
g2.fillRect(6, 72 + 10, 14, 2);
g2.fillRect(10, 72 + 12, 6, 2);
// Create temporary Gates, call their Function() and Animate() to
// draw them, and then transfer their images into icons[0].
// ToolBox 26,22
// AND 28,50
// OR 28,50
// XOR 28,50
// NOT 28,50
// FF 48,32
// NODE 36,32
// NODE90 36,32
// NODE3 36,32
// Width = 48 + 36 + 28 + 28 + 6*4 + 26 = 190
// Height = 50 + 50 + 6 = 106
ANDGate ag = new ANDGate(0, 0, null);
ag.Function();
ag.Decorate();
g2.drawImage(ag.icons[0].getImage(), 30, 4, level);
ORGate og = new ORGate(0, 0, null);
og.Function();
og.Decorate();
g2.drawImage(og.icons[0].getImage(), 64, 4, level);
XORGate xg = new XORGate(0, 0, null);
xg.Function();
xg.Decorate();
g2.drawImage(xg.icons[0].getImage(), 98, 4, level);
NOTGate ng = new NOTGate(0, 0, null);
ng.Function();
ng.Decorate();
g2.drawImage(ng.icons[0].getImage(), 132, 4, level);
FlipFlop ff = new FlipFlop(0, 0, null);
ff.Function();
ff.Decorate();
g2.drawImage(ff.icons[0].getImage(), 30, 58, level);
Node n1 = new Node(0, 0, null, Node.TYPE_STRAIGHT);
n1.Function();
n1.Decorate();
g2.drawImage(n1.icons[0].getImage(), 74, 58, level);
Node n2 = new Node(0, 0, null, Node.TYPE_RIGHT);
n2.Function();
n2.Decorate();
g2.drawImage(n2.icons[0].getImage(), 98, 58, level);
Node n3 = new Node(0, 0, null, Node.TYPE_THREE);
n3.Function();
n3.Decorate();
g2.drawImage(n3.icons[0].getImage(), 128, 58, level);
if (open) {
currentIcon = icons[1].getImage();
}
else {
currentIcon = icons[0].getImage();
}
}
public void Toggle() {
if (open) {
// Close ToolBox
width = 26;
height = 22;
open = false;
currentIcon = icons[0].getImage();
y += 72;
if (y > 320) {
y = 320;
}
}
else {
// Open ToolBox
width = 166;
height = 94;
open = true;
currentIcon = icons[1].getImage();
y -= 72;
if (y < 32) {
y = 32;
}
if (x > 338) {
x = 338;
}
}
}
public boolean CanBePickedUp(Item item) {
if (item != level.gameCursor) {
return false;
}
if (open) {
int ix = item.x - x + item.width / 2;
int iy = item.y - y + item.height / 2;
if (ix < 26 && iy > 72) {
return true;
}
if (ix > 30 && ix < (30 + 28) && iy > 4 && iy < (4 + 50)) {
ANDGate ag = new ANDGate(x + 30, y + 4, item.room);
level.items.addElement(ag);
item.PicksUp(ag);
return false;
}
if (ix > 64 && ix < (64 + 28) && iy > 4 && iy < (4 + 50)) {
ORGate og = new ORGate(x + 64, y + 4, item.room);
level.items.addElement(og);
item.PicksUp(og);
return false;
}
if (ix > 98 && ix < (98 + 28) && iy > 4 && iy < (4 + 50)) {
XORGate xg = new XORGate(x + 98, y + 4, item.room);
level.items.addElement(xg);
item.PicksUp(xg);
return false;
}
if (ix > 132 && ix < (132 + 28) && iy > 4 && iy < (4 + 50)) {
NOTGate ng = new NOTGate(x + 132, y + 4, item.room);
level.items.addElement(ng);
ng.ports[1].value = true;
item.PicksUp(ng);
return false;
}
if (ix > 30 && ix < (30 + 48) && iy > 58 && iy < (58 + 32)) {
FlipFlop ff = new FlipFlop(x + 30, y + 58, item.room);
level.items.addElement(ff);
ff.ports[3].value = true;
item.PicksUp(ff);
return false;
}
if (ix > 74 && ix < (74 + 22) && iy > 58 && iy < (58 + 32)) {
Node n1 = new Node(x + 74, y + 58, item.room, Node.TYPE_STRAIGHT);
level.items.addElement(n1);
item.PicksUp(n1);
return false;
}
if (ix > 98 && ix < (98 + 28) && iy > 58 && iy < (58 + 32)) {
Node n2 = new Node(x + 98, y + 58, item.room, Node.TYPE_RIGHT);
level.items.addElement(n2);
item.PicksUp(n2);
return false;
}
if (ix > 128 && ix < (128 + 28) && iy > 58 && iy < (58 + 32)) {
Node n3 = new Node(x + 128, y + 58, item.room, Node.TYPE_THREE);
level.items.addElement(n3);
item.PicksUp(n3);
return false;
}
}
else {
return true;
}
return false;
}
}