package tk.captainsplexx.Game; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import javafx.scene.control.TreeItem; import javafx.scene.image.ImageView; import tk.captainsplexx.Entity.EntityHandler; import tk.captainsplexx.JavaFX.JavaFXHandler; import tk.captainsplexx.JavaFX.TreeViewConverter; import tk.captainsplexx.JavaFX.TreeViewEntry; import tk.captainsplexx.JavaFX.Windows.MainWindow.EntryType; import tk.captainsplexx.Mod.Mod; import tk.captainsplexx.Model.ModelHandler; import tk.captainsplexx.Player.PlayerEntity; import tk.captainsplexx.Player.PlayerHandler; import tk.captainsplexx.Render.Gui.GuiTexture; import tk.captainsplexx.Resource.FileHandler; import tk.captainsplexx.Resource.ResourceHandler; import tk.captainsplexx.Resource.ITEXTURE.ITextureHandler; import tk.captainsplexx.Resource.TOC.ConvertedSBpart; import tk.captainsplexx.Resource.TOC.ConvertedTocFile; import tk.captainsplexx.Resource.TOC.TocConverter; import tk.captainsplexx.Resource.TOC.TocFile; import tk.captainsplexx.Resource.TOC.TocManager; import tk.captainsplexx.Shader.ShaderHandler; import tk.captainsplexx.Terrain.TerrainHandler; public class Game { public ModelHandler modelHandler; public TerrainHandler terrainHandler; public PlayerHandler playerHandler; public ResourceHandler resourceHandler; public EntityHandler entityHandler; public ShaderHandler shaderHandler; public ITextureHandler itextureHandler; public String currentFile; public ConvertedTocFile currentToc; public ConvertedSBpart currentSB; public HashMap<String, String> chunkGUIDSHA1; public Mod currentMod; public ArrayList<GuiTexture> guis; public ArrayList<ConvertedTocFile> commonChunks; public Game(){ currentMod = null; /*LEVEL OF DETAIL * 0=100% * 1=50% * 2=25% * 3=12.5% * .... * MAX 9! */ modelHandler = new ModelHandler(); playerHandler = new PlayerHandler(); /*DO NOT CARE ABOUT IN THE MOMENT*/ terrainHandler = new TerrainHandler(); terrainHandler.generate(0, 0);//defined from terrain4k.decals -> terrain subpackage //terrainHandler.generate(0, 1); resourceHandler = new ResourceHandler(); shaderHandler = new ShaderHandler(); entityHandler = new EntityHandler(modelHandler, resourceHandler); guis = new ArrayList<>(); if (!Core.isDEBUG){ System.out.println("Please select a game root directory like this one: 'C:/Program Files (x86)/Origin Games/Battlefield 4'!"); Core.getJavaFXHandler().getMainWindow().selectGamePath(); }else{ /*TEST FOR PATCHING BASEDATA USING DELTA byte[] patchedData = Patcher.getPatchedData( FileHandler.readFile("__DOCUMENTATION__/patch_system/decompressed_base"), FileHandler.readFile("__DOCUMENTATION__/patch_system/delta") ); FileHandler.writeFile("output/patched_data", patchedData); END OF TEST*/ } while (true){ //wait System.out.print(""); try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } if (Core.gamePath != null && Core.getJavaFXHandler().getMainWindow().getModLoaderWindow() != null){ break; } } Core.getJavaFXHandler().getMainWindow().getModLoaderWindow().getController().setGamepath(FileHandler.normalizePath(Core.gamePath)); Core.getJavaFXHandler().getMainWindow().toggleModLoaderVisibility(); File cascat = new File(Core.gamePath+"/Data/cas.cat"); if (!cascat.exists()){ System.err.println("Invalid gamepath selected."); Core.keepAlive(false); }else{ System.out.println("Building up FrostBite Editor!"); buildEditor(); if (Core.isDEBUG){//EBX-DEBUG Core.getJavaFXHandler().getMainWindow().toggleModLoaderVisibility(); currentMod = null; //ebxFileGUIDs = new HashMap<>(); //ebxFileGUIDs.put("EA830D5EFFB3EE489D44963370D466B1", "test/test1/test2"); /*byte[] bytes = FileHandler.readFile("__DOCUMENTATION__/ebx/sample_ebx/layer0_default.ebx"); byte[] bytes = FileHandler.readFile("mods/SampleMod/resources/levels/mp/mp_playground/content/layer2_buildings.bak--IGNORE"); EBXFile ebxFile = resourceHandler.getEBXHandler().loadFile(bytes); TreeItem<TreeViewEntry> treeView = TreeViewConverter.getTreeView(ebxFile); Core.getJavaFXHandler().setTreeViewStructureRight(treeView); Core.getJavaFXHandler().getMainWindow().updateRightRoot();*/ } } } public void buildEditor(){ resourceHandler.getCasCatManager().readCat(FileHandler.readFile(Core.gamePath+"/Data/cas.cat"), "normal"); File patchedCasCat = new File(Core.gamePath+"/Update/Patch/Data/cas.cat"); if (patchedCasCat.exists()){ resourceHandler.getPatchedCasCatManager().readCat(FileHandler.readFile(patchedCasCat.getAbsolutePath()), "patched"); } //ebxFileGUIDs = new HashMap<String, String>(); chunkGUIDSHA1 = new HashMap<String, String>(); /*Use this to fetch common chunks!*/ commonChunks = new ArrayList<ConvertedTocFile>(); for (File file : FileHandler.listf(Core.gamePath+"/", "Chunks")){ if (file.getAbsolutePath().endsWith(".toc")){ String relPath = file.getAbsolutePath().replace("\\", "/").replace(".toc", ""); TocFile toc = TocManager.readToc(relPath); ConvertedTocFile convToc = TocConverter.convertTocFile(toc); commonChunks.add(convToc); } } /*End of common chunks!*/ /*Battlefield Weapons and Attachments*/ for (File file : FileHandler.listf(Core.gamePath+"/", "WeaponsAndAttachments")){ if (file.getAbsolutePath().endsWith(".toc")){ String relPath = file.getAbsolutePath().replace("\\", "/").replace(".toc", ""); TocFile toc = TocManager.readToc(relPath); ConvertedTocFile convToc = TocConverter.convertTocFile(toc); commonChunks.add(convToc); } } } public void update(){ playerHandler.update(); terrainHandler.collisionUpdate(playerHandler); } public void lowRateUpdate(){ PlayerEntity pe = playerHandler.getPlayerEntity(); //entityHandler.getFocussedEntity(pe.getPos(), pe.getRot()); } public void buildExplorerTree(){ currentToc = null; currentSB = null; TreeItem<TreeViewEntry> explorerTree = new TreeItem<TreeViewEntry>(new TreeViewEntry(Core.gamePath, null, null, EntryType.LIST)); for (File file : FileHandler.listf(Core.gamePath+"/Data/", ".sb")){ File patched = new File(file.getAbsolutePath().replace("\\", "/").replace(Core.gamePath, Core.gamePath+"/Update/Patch")); if (!patched.exists()){ String relPath = file.getAbsolutePath().replace("\\", "/").replace(".sb", "").replace(Core.gamePath+"/", ""); //System.out.println("NOPATCH "+relPath); String[] fileName = relPath.split("/"); TreeItem<TreeViewEntry> convTocTree = new TreeItem<TreeViewEntry>(new TreeViewEntry(fileName[fileName.length-1], new ImageView(JavaFXHandler.documentIcon), file, EntryType.LIST)); TreeViewConverter.pathToTree(explorerTree, relPath, convTocTree); }else{ String relPath = patched.getAbsolutePath().replace("\\", "/").replace(".sb", "").replace(Core.gamePath+"/", ""); //System.out.println("PATCH "+relPath); String[] fileName = relPath.split("/"); TreeItem<TreeViewEntry> convTocTree = new TreeItem<TreeViewEntry>(new TreeViewEntry(fileName[fileName.length-1], new ImageView(JavaFXHandler.documentIcon), patched, EntryType.LIST)); TreeViewConverter.pathToTree(explorerTree, relPath, convTocTree); } } explorerTree.getValue(); for (TreeItem<TreeViewEntry> child : explorerTree.getChildren()){ if (child.getChildren().size()>0){ child.setExpanded(true); } } //Core.getJavaFXHandler().setTreeViewStructureLeft(explorerTree); Core.getJavaFXHandler().getMainWindow().setPackageExplorer(explorerTree); //Core.getJavaFXHandler().setTreeViewStructureLeft1(null); Core.getJavaFXHandler().getMainWindow().setPackageExplorer1(null, null); /* Core.getJavaFXHandler().setTreeViewStructureRight(null); Core.getJavaFXHandler().getMainWindow().updateRightRoot(); */ } //<----------GETTER AND SETTER--------------->// /*Handler*/ public ResourceHandler getResourceHandler() { return resourceHandler; } public PlayerHandler getPlayerHandler(){ return playerHandler; } public ModelHandler getModelHandler() { return modelHandler; } public TerrainHandler getTerrainHandler() { return terrainHandler; } public EntityHandler getEntityHandler() { return entityHandler; } public ShaderHandler getShaderHandler() { return shaderHandler; } public ITextureHandler getITextureHandler() { return itextureHandler; } /*End of Handler*/ /*Game*/ public String getCurrentFile() { return currentFile; } public void setCurrentFile(String currentFile) { this.currentFile = currentFile; } /*public HashMap<String, String> getEBXFileGUIDs() { return ebxFileGUIDs; }*/ public ConvertedTocFile getCurrentToc() { return currentToc; } public void setCurrentToc(ConvertedTocFile currentToc) { this.currentToc = currentToc; } public ConvertedSBpart getCurrentSB() { return currentSB; } public void setCurrentSB(ConvertedSBpart currentSB) { this.currentSB = currentSB; } public HashMap<String, String> getChunkGUIDSHA1() { return chunkGUIDSHA1; } public Mod getCurrentMod() { return currentMod; } public void setCurrentMod(Mod currentMod) { this.currentMod = currentMod; } public ArrayList<ConvertedTocFile> getCommonChunks() { return commonChunks; } public ArrayList<GuiTexture> getGuis() { return guis; } /*End of Game*/ }