예제 #1
0
  // Sets the location for NPCs to move towards
  public void NPCTarget(Stage s, ArrayList<NPC> npc, Player p) {

    int playerx = p.getX();
    int playery = p.getY();
    int viewrange = 100;
    int npcx;
    int npcy;

    int randnext = 0;

    // For each npc
    for (NPC n : npc) {

      // Get X/Y
      npcx = n.getX();
      npcy = n.getY();
      randnext = rand.nextInt(10);

      // If npc has nowhere to go
      if (n.getMoveticks() == 0 || (n.getGotox() == n.getX() && n.getGotoy() == n.getY())) {

        // Set random amount of movements
        n.setMoveticks(rand.nextInt(150));
        // Set a direction
        n.setDirection(rand.nextInt(4));

        n.setGotox(0);
        n.setGotoy(0);
      }

      // check if the player is within view range and move
      if ((playery >= npcy && playery <= npcy + viewrange
              || playery <= npcy && playery >= npcy - viewrange)
          && playerx > (npcx + n.getWidth())
          && playerx <= (npcx + viewrange)) {

        n.setGotox(p.getX() + (p.getWidth() / 2));
        n.setGotoy(p.getY() + (p.getHeight() / 2));
      }

      if ((playery >= npcy && playery <= npcy + viewrange
              || playery <= npcy && playery >= npcy - viewrange)
          && (playerx + p.getWidth()) < npcx
          && playerx > (npcx - viewrange)) {

        n.setGotox(p.getX() + (p.getWidth() / 2));
        n.setGotoy(p.getY() + (p.getHeight() / 2));
      }
    }
  }
예제 #2
0
  // Controls movement of NPCs towards their set location
  public void NPCMove(Stage s, ArrayList<NPC> npc, FireControl fc) throws IOException {

    // For each NPC
    for (NPC n : npc) {

      // Set Random Movement - when no target is in sight
      if (n.getGotox() == 0 && n.getGotoy() == 0) {

        if (n.getDirection() == 0) {
          if (PlayerInput.checkUp(n, s) == true) {

            n.findwalk();
            n.setY(n.getY() + npcmove);
            n.setMoveticks(n.getMoveticks() - 1);
          } else n.setDirection(rand.nextInt(4));
        }

        if (n.getDirection() == 1) {
          if (PlayerInput.checkDown(n, s) == true) {
            n.findwalk();
            n.setY(n.getY() - npcmove);
            n.setMoveticks(n.getMoveticks() - 1);
          } else n.setDirection(rand.nextInt(4));
        }

        if (n.getDirection() == 2) {
          if (PlayerInput.checkLeft(n, s) == true) {
            n.findwalk();
            n.setX(n.getX() - npcmove);
            n.setMoveticks(n.getMoveticks() - 1);
          } else n.setDirection(rand.nextInt(4));
        }

        if (n.getDirection() == 3) {
          if (PlayerInput.checkRight(n, s) == true) {
            n.findwalk();
            n.setX(n.getX() + npcmove);
            n.setMoveticks(n.getMoveticks() - 1);
          } else n.setDirection(rand.nextInt(4));
        }
      }

      // Otherwise move towards player and fire
      else {

        if (n.calcDistance(n.getX() - npcmove, n.getGotox()) < n.getDistancex()
            && PlayerInput.checkLeft(n, s) == true) {
          n.findwalk();
          NPCFire(n, fc);
          n.setX(n.getX() - npcmove);
        }
        if (n.calcDistance(n.getX() + npcmove, n.getGotox()) < n.getDistancex()
            && PlayerInput.checkRight(n, s) == true) {

          n.findwalk();
          NPCFire(n, fc);
          n.setX(n.getX() + npcmove);
        }

        if (n.calcDistance(n.getY() + npcmove, n.getGotoy()) < n.getDistancey()
            && PlayerInput.checkUp(n, s) == true) {
          n.findwalk();
          NPCFire(n, fc);
          n.setY(n.getY() + npcmove);
        }

        if (n.calcDistance(n.getY() - npcmove, n.getGotoy()) < n.getDistancey()
            && PlayerInput.checkDown(n, s) == true) {

          n.findwalk();
          NPCFire(n, fc);
          n.setY(n.getY() - npcmove);
        }
      }
    }
  }