public double getVehicleFuelCost(Entity e) { Engine en = e.getEngine(); if (e instanceof SupportTank) { if (en.getEngineType() == Engine.FUEL_CELL) { return (((SupportTank) e).getFuelTonnage() * 15000 * 4); } else if (en.getEngineType() == Engine.COMBUSTION_ENGINE) { return (((SupportTank) e).getFuelTonnage() * 1000 * 4); } else { return 0; } } else { if (en.getEngineType() == Engine.FUEL_CELL) { return (en.getWeightEngine(e) *.1 * 15000 * 4); } else if (en.getEngineType() == Engine.COMBUSTION_ENGINE) { return (en.getWeightEngine(e) *.1 * 1000 * 4); } else { return 0; } } }
@Override protected String getSystemName(Entity entity, int index) { // Here we're only concerned with engines that take extra critical slots in the // side torso if (index == Mech.SYSTEM_ENGINE) { final StringBuilder sb = new StringBuilder(); if (entity.getEngine().hasFlag(Engine.LARGE_ENGINE)) { sb.append("Large "); } switch (entity.getEngine().getEngineType()) { case Engine.XL_ENGINE: sb.append("XL"); break; case Engine.LIGHT_ENGINE: sb.append("Light"); break; case Engine.XXL_ENGINE: sb.append("XXL"); break; } sb.append(" Engine"); return sb.toString(); } else { return ((Mech) entity).getRawSystemName(index); } }
@Override public void writeToXml(PrintWriter pw1, int indent) { writeToXmlBegin(pw1, indent); // The engine is a MM object... // And doesn't support XML serialization... // But it's defined by 3 ints. So we'll save those here. pw1.println(MekHqXmlUtil.indentStr(indent + 1) + "<engineType>" + engine.getEngineType() + "</engineType>"); pw1.println(MekHqXmlUtil.indentStr(indent + 1) + "<engineRating>" + engine.getRating() + "</engineRating>"); pw1.println(MekHqXmlUtil.indentStr(indent+1) +"<engineFlags>" +engine.getFlags() +"</engineFlags>"); pw1.println(MekHqXmlUtil.indentStr(indent+1) +"<forHover>" +forHover +"</forHover>"); writeToXmlEnd(pw1, indent); }
@Override public void writeToXml(PrintWriter pw1, int indent) { writeToXmlBegin(pw1, indent); // The engine is a MM object... // And doesn't support XML serialization... // But it's defined by 3 ints. So we'll save those here. pw1.println(MekHqXmlUtil.indentStr(indent + 1) + "<engineType>" + engine.getEngineType() + "</engineType>"); pw1.println(MekHqXmlUtil.indentStr(indent + 1) + "<engineRating>" + engine.getRating() + "</engineRating>"); pw1.println(MekHqXmlUtil.indentStr(indent+1) +"<engineFlags>" +engine.getFlags() +"</engineFlags>"); pw1.println(MekHqXmlUtil.indentStr(indent+1) +"<forHover>" +forHover +"</forHover>"); writeToXmlEnd(pw1, indent); }
public void fixTankFlag(boolean hover) { int flags = engine.getFlags(); if(!engine.hasFlag(Engine.TANK_ENGINE)) { flags |= Engine.TANK_ENGINE; } engine = new Engine(engine.getRating(), engine.getEngineType(), flags); this.name = engine.getEngineName() + " Engine"; this.forHover = hover; }
public void fixClanFlag() { int flags = engine.getFlags(); if(!engine.hasFlag(Engine.CLAN_ENGINE)) { flags |= Engine.CLAN_ENGINE; } engine = new Engine(engine.getRating(), engine.getEngineType(), flags); this.name = engine.getEngineName() + " Engine"; }
public void fixClanFlag() { int flags = engine.getFlags(); if(!engine.hasFlag(Engine.CLAN_ENGINE)) { flags |= Engine.CLAN_ENGINE; } engine = new Engine(engine.getRating(), engine.getEngineType(), flags); this.name = engine.getEngineName() + " Engine"; }
public void fixTankFlag(boolean hover) { int flags = engine.getFlags(); if(!engine.hasFlag(Engine.TANK_ENGINE)) { flags |= Engine.TANK_ENGINE; } engine = new Engine(engine.getRating(), engine.getEngineType(), flags); this.name = engine.getEngineName() + " Engine"; this.forHover = hover; }
@Override public boolean isAcceptableReplacement(Part part, boolean refit) { int year = campaign.getCalendar().get(GregorianCalendar.YEAR); if(part instanceof EnginePart) { Engine eng = ((EnginePart)part).getEngine(); if (null != eng) { return getEngine().getEngineType() == eng.getEngineType() && getEngine().getRating() == eng.getRating() && getEngine().getTechType(year) == eng.getTechType(year) && getUnitTonnage() == ((EnginePart)part).getUnitTonnage() && getTonnage() == ((EnginePart)part).getTonnage(); } } return false; }
@Override public MissingPart getMissingPart() { return new MissingEnginePart(getUnitTonnage(), new Engine(engine.getRating(), engine.getEngineType(), engine.getFlags()), campaign, forHover); }
public EnginePart clone() { EnginePart clone = new EnginePart(getUnitTonnage(), new Engine(engine.getRating(), engine.getEngineType(), engine.getFlags()), campaign, forHover); clone.copyBaseData(this); return clone; }
public static Integer maxJumpMP(Mech mech) { if (mech.isSuperHeavy()) { return 0; } if (mech.getJumpType() == Mech.JUMP_BOOSTER) { return null; } else if (!mech.hasEngine() || (!mech.getEngine().isFusion() && (mech.getEngine().getEngineType() != Engine.FISSION))) { return 0; } else if ((mech.getJumpType() == Mech.JUMP_IMPROVED) || (mech.getJumpType() == Mech.JUMP_PROTOTYPE_IMPROVED)) { return (int)Math.ceil(mech.getOriginalWalkMP() * 1.5); } else { return mech.getOriginalWalkMP(); } }
@Override public boolean isSamePartType(Part part) { int year = campaign.getCalendar().get(GregorianCalendar.YEAR); return part instanceof EnginePart && getName().equals(part.getName()) && getEngine().getEngineType() == ((EnginePart) part) .getEngine().getEngineType() && getEngine().getRating() == ((EnginePart) part).getEngine() .getRating() && getEngine().getTechType(year) == ((EnginePart) part).getEngine() .getTechType(year) && getEngine().hasFlag(Engine.TANK_ENGINE) == ((EnginePart) part).getEngine().hasFlag(Engine.TANK_ENGINE) && getUnitTonnage() == ((EnginePart) part).getUnitTonnage() && getTonnage() == ((EnginePart)part).getTonnage(); }
/** * Computes and returns the maximum number of turns the given unit could * fly at safe thrust given its fuel payload. Aerospace fighters consume * 1 fuel point per thrust point spent up the the maximum safe thrust, * whereas conventional fighters with turbine engines consume 0.5 fuel * points per thrust point spent up to the maximum safe thrust. * See Strategic Operations pg 34. * * @param aero * @return */ public static float calculateMaxTurnsAtSafe(Aero aero){ int fuelPoints = aero.getFuel(); float fuelPerTurn; if (aero.hasETypeFlag(Entity.ETYPE_CONV_FIGHTER) && aero.hasEngine() && (aero.getEngine().getEngineType() == Engine.COMBUSTION_ENGINE)) { fuelPerTurn = aero.getWalkMP() * 0.5f; } else if (aero.getWalkMP() == 0) { fuelPerTurn = 0.2f; } else { fuelPerTurn = aero.getWalkMP(); } return fuelPoints/fuelPerTurn; }
@Override public Part getNewPart() { boolean useHover = null != unit && unit.getEntity().getMovementMode() == EntityMovementMode.HOVER && unit.getEntity() instanceof Tank; int flags = 0; if(engine.hasFlag(Engine.CLAN_ENGINE)) { flags = Engine.CLAN_ENGINE; } if(null != unit && unit.getEntity() instanceof Tank) { flags |= Engine.TANK_ENGINE; } return new EnginePart(getUnitTonnage(), new Engine(engine.getRating(), engine.getEngineType(), flags), campaign, useHover); }
@Override public boolean isInLocation(String loc) { if(null == unit || null == unit.getEntity()) { return false; } if (unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_CT) { return true; } boolean needsSideTorso = false; switch (getEngine().getEngineType()) { case Engine.XL_ENGINE: case Engine.LIGHT_ENGINE: case Engine.XXL_ENGINE: needsSideTorso = true; break; } if (needsSideTorso && (unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_LT || unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_RT)) { return true; } return false; }
@Override public boolean isInLocation(String loc) { if(null == unit || null == unit.getEntity()) { return false; } if (unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_CT) { return true; } boolean needsSideTorso = false; switch (getEngine().getEngineType()) { case Engine.XL_ENGINE: case Engine.LIGHT_ENGINE: case Engine.XXL_ENGINE: needsSideTorso = true; break; } if (needsSideTorso && (unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_LT || unit.getEntity().getLocationFromAbbr(loc) == Mech.LOC_RT)) { return true; } return false; }
@Override public double getWeightPowerAmp() { if (mech.isIndustrial() && (!mech.hasEngine() || (mech.getEngine().getEngineType() == Engine.COMBUSTION_ENGINE) || (mech.getEngine().getEngineType() == Engine.FUEL_CELL))) { double powerAmpWeight = 0; for (Mounted m : mech.getWeaponList()) { WeaponType wt = (WeaponType) m.getType(); if (wt instanceof EnergyWeapon) { powerAmpWeight += wt.getTonnage(mech); } if ((m.getLinkedBy() != null) && (m.getLinkedBy().getType() instanceof MiscType) && m.getLinkedBy().getType().hasFlag(MiscType.F_PPC_CAPACITOR)) { powerAmpWeight += ((MiscType) m.getLinkedBy().getType()) .getTonnage(mech); } } return TestEntity.ceil(powerAmpWeight / 10f, getWeightCeilingPowerAmp()); } return 0; }
@Override public double getWeightPowerAmp() { // Conventional Fighters with ICE engines may need a power amp if ((aero.hasETypeFlag(Entity.ETYPE_CONV_FIGHTER)) && aero.hasEngine() && (aero.getEngine().getEngineType() == Engine.COMBUSTION_ENGINE)) { double weight = 0; for (Mounted m : aero.getWeaponList()) { WeaponType wt = (WeaponType) m.getType(); if (wt.hasFlag(WeaponType.F_ENERGY) && !(wt instanceof CLChemicalLaserWeapon) && !(wt instanceof VehicleFlamerWeapon)) { weight += wt.getTonnage(aero); } Mounted linkedBy = m.getLinkedBy(); if ((linkedBy != null) && (linkedBy.getType() instanceof MiscType) && linkedBy.getType().hasFlag(MiscType.F_PPC_CAPACITOR)){ weight += ((MiscType)linkedBy.getType()).getTonnage(aero); } } // Power amp weighs: // energy weapon tonnage * 0.1 rounded to nearest half ton return Math.ceil(0.1 * weight*2) / 2.0; } return 0; }
@Override public double getWeightPowerAmp() { if (getEntity().isSupportVehicle() && (getEntity().getWeight() < 5)) { return 0; } if (!engine.isFusion() && (engine.getEngineType() != Engine.FISSION)) { double weight = 0; for (Mounted m : tank.getWeaponList()) { WeaponType wt = (WeaponType) m.getType(); if (wt.hasFlag(WeaponType.F_ENERGY) && !(wt instanceof CLChemicalLaserWeapon) && !(wt instanceof VehicleFlamerWeapon)) { weight += wt.getTonnage(tank); } if ((m.getLinkedBy() != null) && (m.getLinkedBy().getType() instanceof MiscType) && m.getLinkedBy().getType(). hasFlag(MiscType.F_PPC_CAPACITOR)) { weight += ((MiscType)m.getLinkedBy().getType()).getTonnage(tank); } } return TestEntity.ceil(weight / 10, getWeightCeilingPowerAmp()); } return 0; }