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 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; } } }
private double getEngineTonnage(Engine engine) { double weight = Engine.ENGINE_RATINGS[(int) Math.ceil(engine.getRating() / 5.0)]; switch (engine.getEngineType()) { case Engine.COMBUSTION_ENGINE: weight *= 2.0f; if (engine.hasFlag(Engine.TANK_ENGINE) && engine.isFusion()) { weight *= 1.5f;
/** * return the number of heatsinks that fit weight-free into the engine * @return */ public int getWeightFreeEngineHeatSinks() { // Support Vee engines never provide free heat-sinks, TM pg 133 if (hasFlag(SUPPORT_VEE_ENGINE)) { return 0; } if (isFusion()) { return 10; } else if (engineType == FISSION) { return 5; } else if (engineType == FUEL_CELL) { return 1; } else { return 0; } }
@Override public MissingPart getMissingPart() { return new MissingEnginePart(getUnitTonnage(), new Engine(engine.getRating(), engine.getEngineType(), engine.getFlags()), campaign, forHover); }
if(hasEngine()) { if (isSupportVehicle()) { engineCost = 5000 * getEngine().getWeightEngine(this); switch (getEngine().getEngineType()) { case Engine.STEAM: engineCost *= 0.8; engineCost = (getEngine().getBaseCost() * getEngine().getRating() * weight) / 75.0; double freeHeatSinks = (hasEngine() ? getEngine().getWeightFreeEngineHeatSinks() : 0); int sinks = 0; double turretWeight = 0; if(hasEngine() && getEngine().isFusion()) { paWeight = 0;
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 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); }
if (tank.hasEngine() && tank.getEngine().isFusion()) { if (tank.getEngine().getEngineType() == Engine.LIGHT_ENGINE) { engineSlots = 1; } else if (tank.getEngine().getEngineType() == Engine.XL_ENGINE) { engineSlots = tank.getEngine().hasFlag(Engine.CLAN_ENGINE)? 1 : 2; } else if (tank.getEngine().getEngineType() == Engine.XXL_ENGINE) { engineSlots = tank.getEngine().hasFlag(Engine.CLAN_ENGINE)? 2 : 4; } else if (tank.getEngine().getEngineType() == Engine.COMPACT_ENGINE) { engineSlots--; if (tank.getEngine().getEngineType() == Engine.LARGE_ENGINE) { engineSlots++; buff.append(StringUtil.makeLength(tank.getEngine().getEngineName(), 30)); buff.append(engineSlots).append("\n");
@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(); }
if(oldUnit.getEntity().getEngine().getRating() != newUnit.getEntity().getEngine().getRating()) { updateRefitClass(CLASS_D); if(newUnit.getEntity().getEngine().getEngineType() != oldUnit.getEntity().getEngine().getEngineType()) { updateRefitClass(CLASS_F); if(((MissingEnginePart)nPart).getEngine().getSideTorsoCriticalSlots().length > 0) { locationHasNewStuff[Mech.LOC_LT] = true; locationHasNewStuff[Mech.LOC_RT] = true; oldHS = Math.max(0, oldHS - oldUnit.getEntity().getEngine().integralHeatSinkCapacity(false)); newHS = Math.max(0, newHS - newEntity.getEngine().integralHeatSinkCapacity(false));
@Test public void testEngineWeight() { Entity mockProto = mock(Entity.class); when(mockProto.hasETypeFlag(anyLong())) .thenAnswer(inv -> (((Long) inv.getArgument(0)) & Entity.ETYPE_PROTOMECH) != 0); Entity mockNonProto = mock(Entity.class); when(mockNonProto.hasETypeFlag(anyLong())).thenReturn(false); Engine engine45 = new Engine(45, Engine.NORMAL_ENGINE, Engine.CLAN_ENGINE); Engine engine42 = new Engine(42, Engine.NORMAL_ENGINE, Engine.CLAN_ENGINE); Engine engine40 = new Engine(40, Engine.NORMAL_ENGINE, Engine.CLAN_ENGINE); Engine engine35 = new Engine(35, Engine.NORMAL_ENGINE, Engine.CLAN_ENGINE); assertEquals(engine42.getWeightEngine(mockProto, TestEntity.Ceil.KILO), engine45.getWeightEngine(mockNonProto), 0.001); assertEquals(engine40.getWeightEngine(mockProto, TestEntity.Ceil.KILO), engine40.getWeightEngine(mockNonProto), 0.001); assertTrue(engine35.getWeightEngine(mockProto, TestEntity.Ceil.KILO) < engine35.getWeightEngine(mockNonProto)); }
@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 TechAdvancement getTechAdvancement() { return engine.getTechAdvancement(); } @Override
@Override public long getStickerPrice() { return (long)Math.round((getEngine().getBaseCost()/75.0) * getEngine().getRating() * getUnitTonnage()); }
public EnginePart() { this(0, new Engine(0, 0, -1), null, false); }
public double getFighterFuelCost(Entity e) { Engine en = e.getEngine(); if (en.isFusion()) { return ((Aero) e).getFuelTonnage() * 4 * 15000; } else { return ((Aero) e).getFuelTonnage() * 4 * 1000; } }
@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 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; }
if ((entity.isSupportVehicle() || hasFlag(SUPPORT_VEE_ENGINE)) && isValidEngine()) { double movementFactor = 4 + entity.getOriginalWalkMP() if (hasFlag(TANK_ENGINE) && (isFusion() || (engineType == FISSION))) { weight *= 1.5;