package tk.captainsplexx.Resource.EBX.Structure;
import tk.captainsplexx.Resource.EBX.EBXComplex;
import tk.captainsplexx.Resource.EBX.EBXFile;
import tk.captainsplexx.Resource.EBX.EBXInstance;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXBreakableModelEntityData;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXDynamicModelEntityData;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabase;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabaseEntry;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabaseMaterial;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXMeshVariationDatabaseRedirectEntry;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXObjectBlueprint;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXReferencedObjectData;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXSpatialPrefabBlueprint;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXStaticModelEntityData;
import tk.captainsplexx.Resource.EBX.Structure.Entry.EBXTextureShaderParameter;
public class EBXStructureReader {
public static enum EntryType {
EBXInstance,
ReferenceObjectData, WorldPartReferenceObjectData, SubWorldInclusionSetting,
InterfaceDescriptorData, SubWorldData, LightProbeVolumeData, PointLightEntityData,
CameraEntityData, EffectReferenceObjectData, GroundHeightEntityData, TerrainPhysicsComponentData,
TerrainEntityData, LocatorEntityData, MapMarkerEntityData, VehicleSpawnReferenceObjectData,
OBBData, VolumeVectorShapeData, BoolEntityData, AndEntityData, LogicReferenceObjectData, DelayEntityData,
RandomMultiEventEntityData, LogicVisualEnvironmentEntityData, PlatformSplitterEntityData,
OrEntityData, TransformEntityData, SyncedBoolEntityData, FadeEntityData,
UINPXTooltipEntityData, SequenceEntityData, CompareBoolEntityData, TransformPartPropertyTrackData,
UINPXTooltipLine, UINPXTextLine, UINPXPaddingLine, WorldPartData, SpatialPrefabBlueprint, ObjectBlueprint,
VegetationTreeEntityData, StaticModelEntityData, DynamicModelEntityData, BreakableModelEntityData,
TextureShaderParameter, TextureParameters, MeshVariationDatabaseMaterial, MeshVariationDatabaseEntry,
MeshVariationDatabase, MeshVariationDatabaseRedirectEntry
}
public static EntryType getEntryTypeByName(String name) {
try{
return EntryType.valueOf(name);
}catch (Exception e){
return null;
}
}
public static EBXStructureFile readStructure(EBXFile ebxFile){
EBXStructureFile structFile = new EBXStructureFile(ebxFile.getTruePath(), ebxFile.getGuid());
for (EBXInstance instance : ebxFile.getInstances()){
EBXStructureInstance strInstance = readInstance(structFile, instance);
if (strInstance!=null){
structFile.getInstances().add(strInstance);
}else{
//return null;
}
}
return structFile;
}
private static EBXStructureInstance readInstance(EBXStructureFile parent, EBXInstance ebxInstance){
EBXStructureInstance instance = new EBXStructureInstance(parent, ebxInstance.getGuid(), null) {};
EBXStructureEntry entry = readEntry(instance, ebxInstance.getComplex());
if (entry!=null){
instance.setEntry(entry);
return instance;
}else{
return null;
}
}
public static EBXStructureEntry readEntry(EBXStructureEntry parent, EBXComplex ebxComplex){
try{
EBXStructureEntry entry = null;
String name = ebxComplex.getComplexDescriptor().getName();
EntryType type = getEntryTypeByName(name);
if (type!=null){
switch (type) {
case ReferenceObjectData:
entry = new EBXReferencedObjectData(parent, ebxComplex);
break;
case SpatialPrefabBlueprint:
entry = new EBXSpatialPrefabBlueprint(parent, ebxComplex);
break;
case ObjectBlueprint:
entry = new EBXObjectBlueprint(parent, ebxComplex);
break;
case StaticModelEntityData:
entry = new EBXStaticModelEntityData(parent, ebxComplex);
break;
case DynamicModelEntityData:
entry = new EBXDynamicModelEntityData(parent, ebxComplex);
break;
case BreakableModelEntityData:
entry = new EBXBreakableModelEntityData(parent, ebxComplex);
break;
case TextureShaderParameter:
if (ebxComplex.getFields().length>0){
entry = new EBXTextureShaderParameter(parent, ebxComplex);
}else{
entry = null;
}
break;
case MeshVariationDatabaseMaterial:
entry = new EBXMeshVariationDatabaseMaterial(parent, ebxComplex);
break;
case MeshVariationDatabaseEntry:
entry = new EBXMeshVariationDatabaseEntry(parent, ebxComplex);
break;
case MeshVariationDatabaseRedirectEntry:
entry = new EBXMeshVariationDatabaseRedirectEntry(parent, ebxComplex);
break;
case MeshVariationDatabase:
entry = new EBXMeshVariationDatabase(parent, ebxComplex);
}
}else{
System.err.println("EBXStructureReader is INCLOMPLETE: "+name);
return null;
}
if (entry==null){
System.err.println("Unhandled Type in EBXStructureEntry-Reader: "+name);
return null;
}
return entry;
}catch (Exception e){
System.err.println("EBXStructureEntry could not get read in!");
e.printStackTrace();
return null;
}
}
}