package com.droidquest.devices; import java.awt.Color; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.swing.ImageIcon; import com.droidquest.items.GenericRobot; import com.droidquest.Room; import com.droidquest.chipstuff.Port; public class Bumper extends Device { int rotation; Color color; transient GenericRobot robot; public Bumper(int X, int Y , Room r, int direction, Color col) { x=X; y=Y; room = r; if (room.portalItem!=null) if (room.portalItem.getClass().toString().endsWith("Robot")) robot = (GenericRobot) room.portalItem; rotation = direction; color = col; grabbable = false; GenerateIcons(); } public void writeRef(ObjectOutputStream s) throws IOException { super.writeRef(s); s.writeInt(level.items.indexOf(robot)); } public void readRef(ObjectInputStream s) throws IOException { super.readRef(s); robot = (GenericRobot) level.FindItem(s.readInt()); } public void GenerateIcons() { robot = (GenericRobot) room.portalItem; if (ports==null) { ports = new Port[1]; switch(rotation) { case Port.ROT_UP: width=30; height=42; ports[0] = new Port(16,39,Port.TYPE_OUTPUT,26,Port.ROT_DOWN,this); break; case Port.ROT_RIGHT: width=54; height=24; ports[0] = new Port(0,13,Port.TYPE_OUTPUT,42,Port.ROT_LEFT,this); break; case Port.ROT_DOWN: width=30; height=38; ports[0] = new Port(13,2,Port.TYPE_OUTPUT,22,Port.ROT_UP,this); break; case Port.ROT_LEFT: width=54; height=24; ports[0] = new Port(52,10,Port.TYPE_OUTPUT,40,Port.ROT_RIGHT,this); break; } } else for (int a=0; a=0 && a<19 && bigY>=0 && bigY<12) if (robot.level.materialAt(a,bigY,robot.room).Detectable(robot)) collide = true; ports[0].value=collide; robot.topBumper = collide; } break; case Port.ROT_RIGHT: // Right Bumper { int bigX = (X+60)/28; int bigYt = (Y+5) / 32; int bigYb = (Y+36) / 32; boolean collide = false; for (int a=bigYt; a<=bigYb; a++) // if (a>=0 && a<12 && bigX>=0 && bigX<20) if (robot.level.materialAt(bigX,a,robot.room).Detectable(robot)) collide = true; ports[0].value=collide; robot.rightBumper = collide; } break; case Port.ROT_DOWN: // Bottom Bumper { int bigXl = (X+14) / 28; int bigXr = (X+41) / 28; int bigY = (Y+44)/32; boolean collide = false; for (int a=bigXl; a<=bigXr; a++) // if (a>=0 && a<19 && bigY>=0 && bigY<12) if (robot.level.materialAt(a,bigY,robot.room).Detectable(robot)) collide = true; ports[0].value=collide; robot.bottomBumper = collide; } break; case Port.ROT_LEFT: // Left Bumper { int bigX = (X-3) / 28; int bigYt = (Y+5) / 32; int bigYb = (Y+36) / 32; boolean collide = false; for (int a=bigYt; a<=bigYb; a++) // if (a>=0 && a<12 && bigX>=0 && bigX<20) if (robot.level.materialAt(bigX,a,robot.room).Detectable(robot)) collide = true; ports[0].value=collide; robot.leftBumper = collide; } break; } return false; } public void Erase() { super.Erase(); robot = null; } }