From ddd327e6b10b03cf701f508c52559220b2d64f3e Mon Sep 17 00:00:00 2001 From: Technus Date: Sun, 17 Dec 2017 09:49:11 +0100 Subject: Scanning of elemental matter works. --- .../core/cElementalInstanceStackMap.java | 6 + .../core/stacks/cElementalInstanceStack.java | 4 +- .../definitions/complex/atom/dAtomDefinition.java | 2 +- .../technus/tectech/thing/CustomItemList.java | 4 +- .../item/ElementalDefinitionScanStorage_EM.java | 7 +- .../tectech/thing/item/ParametrizerMemoryCard.java | 2 + .../multi/GT_MetaTileEntity_EM_scanner.java | 165 ++++++++++++++++++--- 7 files changed, 161 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java index ee8a81dbd1..40bf975a17 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/cElementalInstanceStackMap.java @@ -453,6 +453,12 @@ public final class cElementalInstanceStackMap implements Comparable map=this.map; + this.map=new TreeMap<>(); + return new cElementalInstanceStackMap(map); + } + public void cleanUp(){ for(Map.Entry entry:map.entrySet()){ if(entry.getValue().amount<=0) map.remove(entry.getKey()); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java index e9de353597..3c5e94121b 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -323,7 +323,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { lines.add("ENERGY LEVEL = "+energy); if(Util.areBitsSet(SCAN_GET_AMOUNT,capabilities)) lines.add("AMOUNT = "+amount); - lines.add(null);//def separator + lines.add("");//def separator scanContents(lines,definition.getSubParticles(),1,detailsOnDepthLevels); } @@ -336,7 +336,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { definition.addScanResults(lines,detailsOnDepthLevels[depth],energy); if(Util.areBitsSet(SCAN_GET_AMOUNT,detailsOnDepthLevels[depth])) lines.add("AMOUNT = "+definitionStack.amount); - lines.add(null);//def separator + lines.add("");//def separator scanContents(lines,definitionStack.definition.getSubParticles(),deeper,detailsOnDepthLevels); } } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java index 75aabe9af3..bfb024ef50 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java @@ -1431,7 +1431,7 @@ public final class dAtomDefinition extends cElementalDefinition { lines.add(getColor()<0?"NOT COLORED":"CARRIES COLOR"); if(Util.areBitsSet(SCAN_GET_MASS,capabilities)) lines.add("MASS = "+getMass()+" eV/c\u00b2"); - if(iaeaDefinitionExistsAndHasEnergyLevels){ + if(iaeaDefinitionExistsAndHasEnergyLevels && Util.areBitsSet(SCAN_GET_ENERGY_STATES,capabilities)){ for(int i=1;i 0) { + if (totalComputationRemaining > 0) { eRecipe = null; if (objectResearched != null) { if (ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)) { @@ -169,7 +189,8 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa if (eRecipe == null) { quantumStuff(false); objectResearched = null; - computationRequired = computationRemaining = 0; + eRequiredData=0; + totalComputationRequired = totalComputationRemaining = 0; mMaxProgresstime = 0; mEfficiencyIncrease = 0; } else quantumStuff(true); @@ -185,6 +206,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa if(ItemList.Tool_DataOrb.isStackEqual(itemStack, false, true)) { GT_Recipe scannerRecipe=null; for(cElementalInstanceStack stackEM:researchEM.values()){ + objectsScanned=null; eRecipe = TT_recipe.TT_Recipe_Map_EM.sMachineRecipesEM.findRecipe(stackEM.definition); if(eRecipe!=null) { scannerRecipe=eRecipe.scannerRecipe; @@ -207,8 +229,8 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa researchEM.remove(stackEM.definition); } if(eRecipe!=null && scannerRecipe!=null){//make sure it werks - computationRequired = computationRemaining = scannerRecipe.mDuration * 20L; - mMaxProgresstime = 20; + totalComputationRequired = totalComputationRemaining = scannerRecipe.mDuration * 20L; + mMaxProgresstime = 20;//const mEfficiencyIncrease = 10000; eRequiredData = (short) (scannerRecipe.mSpecialValue >>> 16); eAmpereFlow = (short) (scannerRecipe.mSpecialValue & 0xFFFF); @@ -216,26 +238,119 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa quantumStuff(true); return true; } - }//else{ - //todo implement molecular in depth info scan - //} + }else if(CustomItemList.scanContainer.isStackEqual(itemStack, false, true)) { + eRecipe=null; + if(researchEM.hasStacks()) { + objectsScanned = researchEM.takeAll(); + cleanMassEM_EM(objectsScanned.getMass()); + + totalComputationRequired =0; + eRequiredData=0; + eAmpereFlow=objectsScanned.size() + TecTech.Rnd.next(objectsScanned.size()); + mEUt=-(int)V[8]; + + //get depth scan complexity array + { + int[] scanComplexityTemp = new int[20]; + for (int i = 0; i < 10; i++) { + scanComplexityTemp[i] = getParameterInInt(i, 0); + scanComplexityTemp[i + 10] = getParameterInInt(i, 1); + } + int maxDepth = 0; + for (int i = 0; i < 20; i++) { + if (scanComplexityTemp[i] == SCAN_DO_NOTHING) continue; + else { + maxDepth = i; + if(!DEBUG_MODE) scanComplexityTemp[i]&=~SCAN_GET_CLASS_TYPE; + addComputationRequirements(i+1,scanComplexityTemp[i]); + } + } + maxDepth+=1;//from index to len + scanComplexity = new int[maxDepth]; + System.arraycopy(scanComplexityTemp,0,scanComplexity,0,maxDepth); + } + + totalComputationRemaining = totalComputationRequired; + mMaxProgresstime = 20;//const + mEfficiencyIncrease = 10000; + quantumStuff(true); + return true; + } + } } quantumStuff(false); objectResearched=null; - computationRequired=computationRemaining=0; + totalComputationRemaining =0; mMaxProgresstime=0; mEfficiencyIncrease = 0; return false; } + private void addComputationRequirements(int depthPlus, int capabilities){ + if(Util.areBitsSet(SCAN_GET_NOMENCLATURE,capabilities)){ + totalComputationRequired +=depthPlus*5; + eRequiredData+=depthPlus; + } + if(Util.areBitsSet(SCAN_GET_DEPTH_LEVEL,capabilities)){ + totalComputationRequired +=depthPlus*10; + eRequiredData+=depthPlus; + + } + if(Util.areBitsSet(SCAN_GET_AMOUNT,capabilities)){ + totalComputationRequired +=depthPlus*64; + eRequiredData+=depthPlus*8; + + } + if(Util.areBitsSet(SCAN_GET_CHARGE,capabilities)){ + totalComputationRequired +=depthPlus*128; + eRequiredData+=depthPlus*4; + + } + if(Util.areBitsSet(SCAN_GET_MASS,capabilities)){ + totalComputationRequired +=depthPlus*256; + eRequiredData+=depthPlus*4; + + } + if(Util.areBitsSet(SCAN_GET_ENERGY_LEVEL,capabilities)){ + totalComputationRequired +=depthPlus*512; + eRequiredData+=depthPlus*16; + + } + if(Util.areBitsSet(SCAN_GET_TIMESPAN_INFO,capabilities)){ + totalComputationRequired +=depthPlus*1024; + eRequiredData+=depthPlus*32; + + } + if(Util.areBitsSet(SCAN_GET_ENERGY_STATES,capabilities)){ + totalComputationRequired +=depthPlus*2048; + eRequiredData+=depthPlus*32; + + } + if(Util.areBitsSet(SCAN_GET_COLOR,capabilities)){ + totalComputationRequired +=depthPlus*1024; + eRequiredData+=depthPlus*48; + + } + if(Util.areBitsSet(SCAN_GET_AGE,capabilities)){ + totalComputationRequired +=depthPlus*2048; + eRequiredData+=depthPlus*64; + + } + if(Util.areBitsSet(SCAN_GET_TIMESPAN_MULT,capabilities)){ + totalComputationRequired +=depthPlus*2048; + eRequiredData+=depthPlus*64; + + } + } + @Override public boolean onRunningTick(ItemStack aStack) { - if(computationRemaining<=0) { - computationRemaining=0; + if(totalComputationRemaining <=0) { + totalComputationRemaining =0; mProgresstime=mMaxProgresstime; return true; }else{ - computationRemaining-=eAvailableData; + totalComputationRemaining -=eAvailableData; mProgresstime=1; return super.onRunningTick(aStack); } @@ -251,10 +366,12 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa tNBT.setString("eMachineType", machineType); tNBT.setTag(E_RECIPE_ID, objectResearched.toNBT()); tNBT.setString("author", EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.WHITE + ' ' + machineType+ " EM Recipe Generator"); + }else if(objectsScanned!=null && CustomItemList.scanContainer.isStackEqual(mInventory[1], false, true)){ + ElementalDefinitionScanStorage_EM.setContent(mInventory[1],objectsScanned,scanComplexity); } quantumStuff(false); objectResearched=null; - computationRequired=computationRemaining=0; + totalComputationRemaining =0; } @Override @@ -292,10 +409,10 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa " Efficiency: " + EnumChatFormatting.YELLOW + Float.toString(mEfficiency / 100.0F) + EnumChatFormatting.RESET + " %", "PowerPass: " + EnumChatFormatting.BLUE + ePowerPass + EnumChatFormatting.RESET + " SafeVoid: " + EnumChatFormatting.BLUE + eSafeVoid, - "Computation Available: " + EnumChatFormatting.GREEN + eAvailableData + EnumChatFormatting.RESET, + "Computation Available: " + EnumChatFormatting.GREEN + eAvailableData +EnumChatFormatting.RESET+" / "+EnumChatFormatting.YELLOW + eRequiredData + EnumChatFormatting.RESET, "Computation Remaining:", - EnumChatFormatting.GREEN + Long.toString(computationRemaining / 20L) + EnumChatFormatting.RESET + " / " + - EnumChatFormatting.YELLOW + Long.toString(computationRequired / 20L) + EnumChatFormatting.GREEN + Long.toString(totalComputationRemaining / 20L) + EnumChatFormatting.RESET + " / " + + EnumChatFormatting.YELLOW + Long.toString(totalComputationRequired / 20L) }; } @@ -308,7 +425,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa @Override public void stopMachine() { super.stopMachine(); - computationRequired=computationRemaining=0; + totalComputationRequired = totalComputationRemaining =0; objectResearched=null; quantumStuff(false); -- cgit