diff --git a/src/net/ncplanner/plannerator/multiblock/generator/lite/GeneratorStage.java b/src/net/ncplanner/plannerator/multiblock/generator/lite/GeneratorStage.java index 0a16ddd5..a80d379c 100644 --- a/src/net/ncplanner/plannerator/multiblock/generator/lite/GeneratorStage.java +++ b/src/net/ncplanner/plannerator/multiblock/generator/lite/GeneratorStage.java @@ -18,6 +18,7 @@ public long getValue(){ public ArrayList> steps = new ArrayList<>(); public ArrayList> stageTransitions = new ArrayList<>(); public ArrayList> priorities = new ArrayList<>(); + public ArrayList> postProcessing = new ArrayList<>(); public void run(T multiblock, Random rand){ hits++; STEP:for(GeneratorMutator mutator : steps){ @@ -29,6 +30,16 @@ public void run(T multiblock, Random rand){ mutator.run(multiblock, rand); } } + public void runPostProcessing(T multiblock, Random rand){ + STEP:for(GeneratorMutator mutator : postProcessing){ + for(Condition c : mutator.conditions){ + c.hits++; + if(!c.check(rand))continue STEP; + } + mutator.hits++; + mutator.run(multiblock, rand); + } + } @Override public int getVariableCount(){ return vars.length; @@ -48,20 +59,26 @@ public void reset(){ for(Priority priority : priorities){ priority.reset(); } + for(GeneratorMutator step : postProcessing){ + step.reset(); + } } @Override public void convertFromObject(NCPFObject ncpf){ steps = ncpf.getRegisteredNCPFList("steps", GeneratorMutator.getRegisteredMutators()); stageTransitions = ncpf.getDefinedNCPFList("stage_transitions", StageTransition::new); priorities = ncpf.getDefinedNCPFList("priorities", Priority::new); + postProcessing = ncpf.getRegisteredNCPFList("post_processing", GeneratorMutator.getRegisteredMutators()); } @Override public void convertToObject(NCPFObject ncpf){ ncpf.setRegisteredNCPFList("steps", steps); ncpf.setDefinedNCPFList("stage_transitions", stageTransitions); ncpf.setDefinedNCPFList("priorities", priorities); + ncpf.setRegisteredNCPFList("post_processing", postProcessing); } public void setIndicies(T multiblock){ for(GeneratorMutator step : steps)step.setIndicies(multiblock); + for(GeneratorMutator step : postProcessing)step.setIndicies(multiblock); } } \ No newline at end of file diff --git a/src/net/ncplanner/plannerator/multiblock/generator/lite/LiteGenerator.java b/src/net/ncplanner/plannerator/multiblock/generator/lite/LiteGenerator.java index ccb35473..b0e0eed7 100644 --- a/src/net/ncplanner/plannerator/multiblock/generator/lite/LiteGenerator.java +++ b/src/net/ncplanner/plannerator/multiblock/generator/lite/LiteGenerator.java @@ -81,6 +81,7 @@ public void run(T multiblock, Random rand, T original, T priorityMultiblock, Con condition.hits++; if(!condition.check(rand))continue TRANSITION; } + currentStage.runPostProcessing(multiblock, rand); transition.hits++; lastUpdate = System.nanoTime(); if(transition.store.get()){ diff --git a/src/net/ncplanner/plannerator/multiblock/generator/lite/overhaulSFR/mutators/ClearInvalidMutator.java b/src/net/ncplanner/plannerator/multiblock/generator/lite/overhaulSFR/mutators/ClearInvalidMutator.java index 3056826e..a6b29ab8 100644 --- a/src/net/ncplanner/plannerator/multiblock/generator/lite/overhaulSFR/mutators/ClearInvalidMutator.java +++ b/src/net/ncplanner/plannerator/multiblock/generator/lite/overhaulSFR/mutators/ClearInvalidMutator.java @@ -26,22 +26,6 @@ public void run(LiteOverhaulSFR multiblock, Random rand){ } } } - //now check for fully-insulated fuel cells. - for(int x = 0; x=adjacentSpaces)multiblock.blocks[x][y][z] = -1; - } - } - } } @Override public int getSettingCount(){ diff --git a/src/net/ncplanner/plannerator/ncpf/io/NCPFObject.java b/src/net/ncplanner/plannerator/ncpf/io/NCPFObject.java index a0975c64..07614316 100644 --- a/src/net/ncplanner/plannerator/ncpf/io/NCPFObject.java +++ b/src/net/ncplanner/plannerator/ncpf/io/NCPFObject.java @@ -25,7 +25,7 @@ public void setDefinedNCPFObject(String key, DefinedNCPFObject object){ object.convertToObject(ncpf); setNCPFObject(key, ncpf); } - + public > V getDefinedNCPFList(String key, Supplier objectSupplier){ return (V)getDefinedNCPFList(key, new ArrayList<>(), objectSupplier); } @@ -48,7 +48,7 @@ public void setDefinedNCPFList(String key, List } setNCPFList(key, ncpf); } - + public void getDefined3DArray(String name, T[][][] array, List indicies){ NCPFList list3 = getNCPFList(name); for(int x = 0; x void setDefined3DArray(String name, T[][][] array } setNCPFList(name, list3); } - + public T getRegisteredNCPFObject(String key, HashMap> registry){ String type = getNCPFObject(key).getString("type"); Supplier supplier = registry.get(type); - if(supplier==null)throw new IllegalArgumentException("Cannot load unregistered object: "+type+"!"); + if(supplier==null) + throw new IllegalArgumentException("Cannot load unregistered object: "+type+"!"); return getDefinedNCPFObject(key, supplier); } public void setRegisteredNCPFObject(String key, RegisteredNCPFObject object){ setDefinedNCPFObject(key, object); getNCPFObject(key).setString("type", object.type); } - + public > V getRegisteredNCPFList(String key, HashMap> registry){ return (V)getRegisteredNCPFList(key, new ArrayList<>(), registry); } public > V getRegisteredNCPFList(String key, V list, HashMap> registry){ NCPFList ncpf = getNCPFList(key); + if(ncpf==null)return list; for(int i = 0; i supplier = registry.get(type); - if(supplier==null)throw new IllegalArgumentException("Cannot load unregistered object: "+type+"!"); + if(supplier==null) + throw new IllegalArgumentException("Cannot load unregistered object: "+type+"!"); T object = supplier.get(); list.add(object); object.convertFromObject(obj); @@ -115,7 +118,7 @@ public void setRegisteredNCPFList(String key, L } setNCPFList(key, ncpf); } - + public void getRecipe3DArray(String name, NCPFElement[][][] array, T[][][] design){ NCPFList list3 = getNCPFList(name); int X = -1; @@ -141,7 +144,8 @@ public void getRecipe3DArray(String name, N Z++; } int idx = list3.getNCPFList(X).getNCPFList(Y).getInteger(Z); - if(idx>-1)array[x][y][z] = design[x][y][z].getModule(NCPFBlockRecipesModule::new).recipes.get(idx); + if(idx>-1) + array[x][y][z] = design[x][y][z].getModule(NCPFBlockRecipesModule::new).recipes.get(idx); } } } @@ -165,27 +169,27 @@ public void setRecipe3DArray(String name, N } setNCPFList(name, list3); } - + public void getVariable(String key, SettingVariable setting){ setting.set(setting.convertFromObject(getNCPFObject(key))); } public void setVariable(String key, SettingVariable setting){ setNCPFObject(key, setting.convertToObject()); } - + public int[] getIntArray(String key){ NCPFList list = getNCPFList(key); int[] arr = new int[list.size()]; for(int i = 0; i list = new NCPFList<>(); for(int i : value)list.add(i); setNCPFList(key, list); } - + public NCPFObject getNCPFObject(String key){ Object o = get(key); if(o instanceof NCPFObject)return (NCPFObject)o; @@ -231,7 +235,7 @@ public Object set(String key, Object value){ if(value==null)return remove(key);//never hold nulls! return put(key, value); } - + //just so I don't change types accidentally public void setNCPFObject(String key, NCPFObject value){ set(key, value); @@ -274,7 +278,8 @@ public void setIndex(String name, T element, List ind } public NCPFElementReference getDefinedModuleOrElementReference(String block){ NCPFElementReference reference = getDefinedNCPFObject(block, NCPFElementReference::new); - if(reference.definition.typeMatches(NCPFModuleElement::new))return reference.copyTo(NCPFModuleReference::new); + if(reference.definition.typeMatches(NCPFModuleElement::new)) + return reference.copyTo(NCPFModuleReference::new); return reference; } -} \ No newline at end of file +} diff --git a/src/net/ncplanner/plannerator/planner/gui/menu/MenuGenerator.java b/src/net/ncplanner/plannerator/planner/gui/menu/MenuGenerator.java index f943d8e0..0bd147f9 100644 --- a/src/net/ncplanner/plannerator/planner/gui/menu/MenuGenerator.java +++ b/src/net/ncplanner/plannerator/planner/gui/menu/MenuGenerator.java @@ -282,6 +282,32 @@ public void draw(double deltaTime){ stage.priorities.add(new Priority<>()); rebuildGUI(); })); + stageSettings.add(new Label(0, 0, 0, 36, "Post-Processing Mutators", true)); + for(GeneratorMutator mutator : stage.postProcessing){ + if(expand(stageSettings.add(new Label(0, 0, 0, 32, mutator.mutator.getTitle()){ + Button del = add(new Button(0, 0, height, height, "X", true, true).addAction(() -> { + stage.postProcessing.remove(mutator); + rebuildGUI(); + })); + @Override + public void draw(double deltaTime){ + del.x = width-del.width; + super.draw(deltaTime); + } + }.setTooltip(mutator.getTooltip())), mutator)){ + addConditionSettings(mutator.conditions); + addExpandedSettings(mutator); + addSettings(stageSettings.add(new Label(0, 0, 0, 30, "Mutator Settings").setTooltip(mutator.mutator.getTooltip())), mutator.mutator); + } + } + stageSettings.add(new Button(0, 0, 0, 32, "Add Post-Processing Mutator", true).addAction(() -> { + new MenuPickMutator<>(gui, this, multiblock, (mutator)->{ + new MenuPickGeneratorMutator<>(gui, this, mutator, (genMutator)->{ + stage.postProcessing.add(genMutator); + rebuildGUI(); + }).open(); + }).open(); + })); stageSettings.add(new Label(0, 0, 0, 36, "Stage Transitions", true)); for(int i = 0; i transition = stage.stageTransitions.get(i);