dataFile = bb;
}
public Entity getEntity() throws EntityLoadingException {
ConvFighter a = new ConvFighter();
if (!dataFile.exists("Name")) {
throw new EntityLoadingException("Could not find name block.");
}
a.setChassis(dataFile.getDataAsString("Name")[0]);
if (dataFile.exists("Model") && dataFile.getDataAsString("Model")[0] != null) {
a.setModel(dataFile.getDataAsString("Model")[0]);
} else {
a.setModel("");
}
setTechLevel(a);
if (dataFile.exists("source")) {
a.setSource(dataFile.getDataAsString("source")[0]);
}
if (!dataFile.exists("tonnage")) {
throw new EntityLoadingException("Could not find weight block.");
}
a.setWeight(dataFile.getDataAsFloat("tonnage")[0]);
// how many bombs can it carry
a.autoSetMaxBombPoints();
// get a movement mode - lets try Aerodyne
int nMotion = 16;
a.setMovementMode(nMotion);
// figure out heat
if (!dataFile.exists("heatsinks")) {
throw new EntityLoadingException("Could not find weight block.");
}
a.setHeatSinks(dataFile.getDataAsInt("heatsinks")[0]);
if (!dataFile.exists("sink_type")) {
throw new EntityLoadingException("Could not find weight block.");
}
a.setHeatType(dataFile.getDataAsInt("sink_type")[0]);
// figure out fuel
if (!dataFile.exists("fuel")) {
throw new EntityLoadingException("Could not find fuel block.");
}
a.setFuel(dataFile.getDataAsInt("fuel")[0]);
// figure out engine stuff
int engineCode = BLKFile.FUSION;
if (dataFile.exists("engine_type")) {
engineCode = dataFile.getDataAsInt("engine_type")[0];
}
int engineFlags = Engine.TANK_ENGINE;
if (a.isClan()) {
engineFlags |= Engine.CLAN_ENGINE;
}
if (!dataFile.exists("SafeThrust")) {
throw new EntityLoadingException("Could not find SafeThrust block.");
}
int engineRating = (dataFile.getDataAsInt("SafeThrust")[0] - 2) * (int) a.getWeight();
a.setEngine(new Engine(engineRating, BLKFile.translateEngineCode(engineCode), engineFlags));
if (dataFile.exists("armor_type")) {
a.setArmorType(dataFile.getDataAsInt("armor_type")[0]);
}
if (dataFile.exists("armor_tech")) {
a.setArmorTechLevel(dataFile.getDataAsInt("armor_tech")[0]);
}
if (dataFile.exists("internal_type")) {
a.setStructureType(dataFile.getDataAsInt("internal_type")[0]);
}
if (!dataFile.exists("armor")) {
throw new EntityLoadingException("Could not find armor block.");
}
int[] armor = dataFile.getDataAsInt("armor");
if (armor.length != 4) {
throw new EntityLoadingException("Incorrect armor array length");
}
a.initializeArmor(armor[BLKAeroFile.NOSE], Aero.LOC_NOSE);
a.initializeArmor(armor[BLKAeroFile.RW], Aero.LOC_RWING);
a.initializeArmor(armor[BLKAeroFile.LW], Aero.LOC_LWING);
a.initializeArmor(armor[BLKAeroFile.AFT], Aero.LOC_AFT);
a.autoSetInternal();
a.autoSetSI();
// This is not working right for arrays for some reason
a.autoSetThresh();
loadEquipment(a, "Nose", Aero.LOC_NOSE);
loadEquipment(a, "Right Wing", Aero.LOC_RWING);
loadEquipment(a, "Left Wing", Aero.LOC_LWING);
loadEquipment(a, "Aft", Aero.LOC_AFT);
if (dataFile.exists("omni")) {
a.setOmni(true);
}
if (dataFile.exists("vstol")) {
a.setVSTOL(true);
}
if (a.isClan()) {
a.addClanCase();
}
return a;
}