package com.droidquest.items; import javax.swing.ImageIcon; import com.droidquest.Room; public class TrashCollector extends Item { int animationState=0; int behavior=0; // 0 = Patrol Left to Room 31 // 1 = Patrol Up to Room 5 // 2 = Patrol Right to Room 11 // 3 = Patrol Down to Room 17 // 4 = Patrol Left to Room 19 // 5 = Go up to Room 58 // 6 = Go down to Room 19 // 7 = Prowl (approach until get item) int previousBehavior; int gotoX; int gotoY; Room gotoRoom; Item target=null; public TrashCollector(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[2]; icons[0] = new ImageIcon("images/trashcollector0.gif"); icons[1] = new ImageIcon("images/trashcollector1.gif"); currentIcon = icons[0].getImage(); } public void Animate() { animationState = 1-animationState; currentIcon = icons[animationState].getImage(); if (gotoRoom==null) // Sets destination room { gotoX=266; gotoY=176; switch(behavior) { case 0: gotoRoom = (Room) level.rooms.elementAt(31); break; case 1: gotoRoom = (Room) level.rooms.elementAt(5); break; case 2: gotoRoom = (Room) level.rooms.elementAt(11); break; case 3: gotoRoom = (Room) level.rooms.elementAt(17); break; case 4: gotoRoom = (Room) level.rooms.elementAt(19); break; case 5: gotoRoom = (Room) level.rooms.elementAt(58); break; case 6: gotoRoom = (Room) level.rooms.elementAt(19); break; } } if (behavior<5) // Check for items in hallway { for (int a=0; a 4) diff=4; MoveDown(diff*dir); } } else { if (x==gotoX && y==gotoY) { gotoRoom=null; behavior=1; } if (x != gotoX) { int diff = Math.abs(gotoX - x); int dir = diff / (gotoX - x); if (diff > 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 1: // Move Up to Room 5 if (room != gotoRoom) { MoveUp(4); if (x!=266) { int diff = Math.abs(266-y); int dir = diff / (266-y); if (diff > 4) diff=4; MoveRight(diff*dir); } } else { if (x==gotoX && y==gotoY) { gotoRoom=null; behavior=2; } if (x != gotoX) { int diff = Math.abs(gotoX - x); int dir = diff / (gotoX - x); if (diff > 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 2: // Move Right to Room 11 if (room != gotoRoom) { MoveRight(4); if (y!=176) { int diff = Math.abs(176-y); int dir = diff / (176-y); if (diff > 4) diff=4; MoveDown(diff*dir); } } else { if (x==gotoX && y==gotoY) { gotoRoom = null; behavior=3; } if (x != gotoX) { int diff = Math.abs(gotoX - x); int dir = diff / (gotoX - x); if (diff > 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 3: // Move Down to Room 17 if (room != gotoRoom) { MoveDown(4); if (x!=266) { int diff = Math.abs(266-y); int dir = diff / (266-y); if (diff > 4) diff=4; MoveRight(diff*dir); } } else { if (x==gotoX && y==gotoY) { gotoRoom = null; behavior=4; } if (x != gotoX) { int diff = Math.abs(gotoX - x); int dir = diff / (gotoX - x); if (diff > 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 4: // Move Left to Room 19 if (room != gotoRoom) { MoveLeft(4); if (y!=176) { int diff = Math.abs(176-y); int dir = diff / (176-y); if (diff > 4) diff=4; MoveDown(diff*dir); } } else { if (x==gotoX && y==gotoY) { int holdings=0; Room purge = (Room) level.rooms.elementAt(60); for (int a=0; a 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 5: // Move Up to Room 58 if (room != gotoRoom) { MoveUp(4); if (x!=266) { int diff = Math.abs(266-y); int dir = diff / (266-y); if (diff > 4) diff=4; MoveRight(diff*dir); } } else { if (x==gotoX && y==gotoY) { Room purge = (Room) level.rooms.elementAt(60); for (int a=0; a 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 6: // Move Down to Room 19 if (room != gotoRoom) { MoveDown(4); if (x!=266) { int diff = Math.abs(266-y); int dir = diff / (266-y); if (diff > 4) diff=4; MoveRight(diff*dir); } } else { if (x==gotoX && y==gotoY) { gotoRoom = null; behavior=0; } if (x != gotoX) { int diff = Math.abs(gotoX - x); int dir = diff / (gotoX - x); if (diff > 4) diff = 4; MoveRight(diff * dir); } if (y != gotoY) { int diff = Math.abs(gotoY - y); int dir = diff / (gotoY - y); if (diff > 4) diff = 4; MoveDown(diff * dir); } } break; case 7: // Approach item if (target.room == room && target.carriedBy == null) { if (Overlaps(target)) { target.room = (Room) level.rooms.elementAt(60); behavior = previousBehavior; } else { if (x != target.x) { int diff = Math.abs(target.x - x); int dir = diff / (target.x - x); if (diff > 8) diff = 8; MoveRight(diff * dir); } if (y != target.y) { int diff = Math.abs(target.y - y); int dir = diff / (target.y - y); if (diff > 8) diff = 8; MoveDown(diff * dir); } } } else { behavior = previousBehavior; } break; } } }