/*
* MegaMek - Copyright (C) 2000-2002 Ben Mazur (bmazur@sev.org)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
/*
* FindClubAction.java
*
* Created on April 5, 2002, 4:00 PM
*/
package megamek.common.actions;
import megamek.common.BipedMech;
import megamek.common.Building;
import megamek.common.Entity;
import megamek.common.IGame;
import megamek.common.IHex;
import megamek.common.Mech;
import megamek.common.Terrains;
/**
* The entity tries to find a club.
*
* @author Ben
* @version
*/
public class FindClubAction extends AbstractEntityAction {
/**
*
*/
private static final long serialVersionUID = -8948591442556777640L;
/** Creates new FindClubAction */
public FindClubAction(int entityId) {
super(entityId);
}
/**
* Returns whether an entity can find a club in its current location
*/
public static boolean canMechFindClub(IGame game, int entityId) {
final Entity entity = game.getEntity(entityId);
if (null == entity.getPosition()) {
return false;
}
final IHex hex = game.getBoard().getHex(entity.getPosition());
// Non biped mechs can't
if (!(entity instanceof BipedMech)) {
return false;
}
// Is the entity active?
if (entity.isShutDown() || !entity.getCrew().isActive()) {
return false;
}
// Check game options
if (game.getOptions().booleanOption("no_clan_physical")
&& entity.isClan()) {
return false;
}
// The hex must contain woods or rubble from
// a medium, heavy, or hardened building,
// or a blown off limb
if (hex.terrainLevel(Terrains.WOODS) < 1
&& hex.terrainLevel(Terrains.JUNGLE) < 1
&& hex.terrainLevel(Terrains.RUBBLE) < Building.MEDIUM
&& hex.terrainLevel(Terrains.ARMS) < 1
&& hex.terrainLevel(Terrains.LEGS) < 1) {
return false;
}
// also, need shoulders and hands
// Claws can subtitue as hands --Torren
if (!entity.hasWorkingSystem(Mech.ACTUATOR_SHOULDER, Mech.LOC_RARM)
|| !entity.hasWorkingSystem(Mech.ACTUATOR_SHOULDER,
Mech.LOC_LARM)
|| (!entity.hasWorkingSystem(Mech.ACTUATOR_HAND, Mech.LOC_RARM) && !((BipedMech) entity)
.hasClaw(Mech.LOC_RARM))
|| (!entity.hasWorkingSystem(Mech.ACTUATOR_HAND, Mech.LOC_LARM) && !((BipedMech) entity)
.hasClaw(Mech.LOC_LARM))) {
return false;
}
// and last, check if you already have a club, greedy
if (entity.getClubs().size() > 0) {
return false;
}
return true;
}
}