Skip to content

Commit

Permalink
Gui improvements (GregTechCE#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
TechLord22 committed Jul 18, 2021
1 parent 45a48b6 commit a296226
Show file tree
Hide file tree
Showing 64 changed files with 257 additions and 153 deletions.
137 changes: 86 additions & 51 deletions src/main/java/gregtech/api/gui/GuiTextures.java

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions src/main/java/gregtech/api/gui/ModularUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ public static Builder defaultBuilder() {
return new Builder(GuiTextures.BACKGROUND, 176, 166);
}

public static Builder defaultBuilder(TextureArea logo) {
return new Builder(GuiTextures.BACKGROUND, 176, 166, logo);
}

public static Builder borderedBuilder() {
return new Builder(GuiTextures.BORDERED_BACKGROUND, 195, 136);
}
Expand Down Expand Up @@ -134,14 +138,20 @@ public static class Builder {
private ImmutableList.Builder<Runnable> openListeners = ImmutableList.builder();
private ImmutableList.Builder<Runnable> closeListeners = ImmutableList.builder();
private TextureArea background;
private TextureArea logo;
private int width, height;
private int nextFreeWidgetId = 0;

public Builder(TextureArea background, int width, int height) {
this(background, width, height, GuiTextures.GREGTECH_LOGO);
}

public Builder(TextureArea background, int width, int height, TextureArea logo) {
Preconditions.checkNotNull(background);
this.background = background;
this.width = width;
this.height = height;
this.logo = logo;
}

public Builder widget(Widget widget) {
Expand Down Expand Up @@ -218,6 +228,11 @@ public Builder bindCloseListener(Runnable onContainerClose) {
return this;
}

public Builder logo(int x, int y) {
this.image(x, y, 16, 16, this.logo);
return this;
}

public ModularUI build(IUIHolder holder, EntityPlayer player) {
return new ModularUI(widgets.build(), openListeners.build(), closeListeners.build(), background, width, height, holder, player);
}
Expand Down
29 changes: 23 additions & 6 deletions src/main/java/gregtech/api/recipes/RecipeMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import gregtech.api.recipes.crafttweaker.CTRecipe;
import gregtech.api.recipes.crafttweaker.CTRecipeBuilder;
import gregtech.api.unification.material.IMaterial;
import gregtech.api.unification.material.type.Material;
import gregtech.api.unification.ore.OrePrefix;
import gregtech.api.util.EnumValidationResult;
import gregtech.api.util.GTLog;
Expand Down Expand Up @@ -57,7 +56,9 @@ public class RecipeMap<R extends RecipeBuilder<R>> {
private final int minOutputs, maxOutputs;
private final int minFluidInputs, maxFluidInputs;
private final int minFluidOutputs, maxFluidOutputs;
private final TByteObjectMap<TextureArea> slotOverlays;
protected final TByteObjectMap<TextureArea> slotOverlays;
protected TextureArea specialTexture;
protected int[] specialTexturePosition;
protected TextureArea progressBarTexture;
protected MoveType moveType;
public final boolean isHidden;
Expand Down Expand Up @@ -301,9 +302,11 @@ private double jeiProgressBar() {
//this DOES NOT include machine control widgets or binds player inventory
public ModularUI.Builder createUITemplate(DoubleSupplier progressSupplier, IItemHandlerModifiable importItems, IItemHandlerModifiable exportItems, FluidTankList importFluids, FluidTankList exportFluids) {
ModularUI.Builder builder = ModularUI.defaultBuilder();
builder.widget(new ProgressWidget(progressSupplier, 77, 22, 21, 20, progressBarTexture, moveType));
builder.widget(new ProgressWidget(progressSupplier, 78, 23, 20, 20, progressBarTexture, moveType));
addInventorySlotGroup(builder, importItems, importFluids, false);
addInventorySlotGroup(builder, exportItems, exportFluids, true);
if (this.specialTexture != null && this.specialTexturePosition != null)
addSpecialTexture(builder);
return builder;
}

Expand All @@ -320,8 +323,8 @@ protected void addInventorySlotGroup(ModularUI.Builder builder, IItemHandlerModi
int[] inputSlotGrid = determineSlotsGrid(itemInputsCount);
int itemSlotsToLeft = inputSlotGrid[0];
int itemSlotsToDown = inputSlotGrid[1];
int startInputsX = isOutputs ? 106 : 69 - itemSlotsToLeft * 18;
int startInputsY = 32 - (int) (itemSlotsToDown / 2.0 * 18);
int startInputsX = isOutputs ? 106 : 70 - itemSlotsToLeft * 18;
int startInputsY = 33 - (int) (itemSlotsToDown / 2.0 * 18);
boolean wasGroupOutput = itemHandler.getSlots() + fluidHandler.getTanks() == 12;
if (wasGroupOutput) startInputsY -= 9;
for (int i = 0; i < itemSlotsToDown; i++) {
Expand All @@ -345,7 +348,10 @@ protected void addInventorySlotGroup(ModularUI.Builder builder, IItemHandlerModi
for (int i = 0; i < fluidInputsCount; i++) {
int x = isOutputs ? startInputsX + 18 * (i % 3) : startInputsX + itemSlotsToLeft * 18 - 18 - 18 * (i % 3);
int y = startSpecY + (i / 3) * 18;
addSlot(builder, x, y, i, itemHandler, fluidHandler, !invertFluids, isOutputs);
if (itemHandler.getSlots() >= 9)
addSlot(builder, x, y + 2, i, itemHandler, fluidHandler, !invertFluids, isOutputs);
else
addSlot(builder, x, y, i, itemHandler, fluidHandler, !invertFluids, isOutputs);
}
}
}
Expand Down Expand Up @@ -395,6 +401,17 @@ protected static int[] determineSlotsGrid(int itemInputsCount) {
return new int[]{itemSlotsToLeft, itemSlotsToDown};
}

protected RecipeMap<R> setSpecialTexture(int x, int y, int width, int height, TextureArea area) {
this.specialTexturePosition = new int[]{x, y, width, height};
this.specialTexture = area;
return this;
}

protected ModularUI.Builder addSpecialTexture(ModularUI.Builder builder) {
builder.image(specialTexturePosition[0], specialTexturePosition[1], specialTexturePosition[2], specialTexturePosition[3], specialTexture);
return builder;
}


public List<Recipe> getRecipeList() {
return Collections.unmodifiableList(recipeList);
Expand Down
87 changes: 52 additions & 35 deletions src/main/java/gregtech/api/recipes/RecipeMaps.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class RecipeMaps {
@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> COMPRESSOR_RECIPES = new RecipeMap<>("compressor", 1, 1, 1, 1, 0, 0, 0, 0, new SimpleRecipeBuilder().duration(400).EUt(2))
.setSlotOverlay(false, false, GuiTextures.COMPRESSOR_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_BENDING, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_COMPRESS, MoveType.HORIZONTAL);


@ZenProperty
Expand Down Expand Up @@ -72,9 +72,6 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> FORMING_PRESS_RECIPES = new RecipeMapFormingPress("forming_press", 2, 6, 1, 1, 0, 0, 0, 0, 1, new SimpleRecipeBuilder())
.setSlotOverlay(false, false, false, GuiTextures.PRESS_OVERLAY_1)
.setSlotOverlay(false, false, true, GuiTextures.PRESS_OVERLAY_2)
.setSlotOverlay(true, false, GuiTextures.PRESS_OVERLAY_3)
.setProgressBar(GuiTextures.PROGRESS_BAR_COMPRESS, MoveType.HORIZONTAL);


Expand All @@ -89,12 +86,12 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> PLASMA_ARC_FURNACE_RECIPES = new RecipeMap<>("plasma_arc_furnace", 1, 1, 1, 4, 1, 1, 0, 1, new SimpleRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_ARC_FURNACE, MoveType.HORIZONTAL);


@ZenProperty
public static final RecipeMap<ArcFurnaceRecipeBuilder> ARC_FURNACE_RECIPES = new RecipeMap<>("arc_furnace", 1, 1, 1, 4, 1, 1, 0, 0, new ArcFurnaceRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_ARC_FURNACE, MoveType.HORIZONTAL);

/**
* Example:
Expand All @@ -114,7 +111,7 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> SIFTER_RECIPES = new RecipeMap<>("sifter", 1, 1, 0, 6, 0, 0, 0, 0, new SimpleRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_SIFT, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_SIFT, MoveType.VERTICAL_INVERTED);

/**
* Example:
Expand Down Expand Up @@ -169,7 +166,7 @@ public class RecipeMaps {
public static final RecipeMap<SimpleRecipeBuilder> AUTOCLAVE_RECIPES = new RecipeMap<>("autoclave", 1, 1, 1, 1, 1, 1, 0, 0, new SimpleRecipeBuilder())
.setSlotOverlay(false, false, GuiTextures.DUST_OVERLAY)
.setSlotOverlay(true, false, GuiTextures.CRYSTAL_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_CRYSTALLIZATION, MoveType.HORIZONTAL);

/**
* Example:
Expand Down Expand Up @@ -254,7 +251,9 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<IntCircuitRecipeBuilder> FLUID_HEATER_RECIPES = new RecipeMap<>("fluid_heater", 1, 1, 0, 0, 1, 1, 1, 1, new IntCircuitRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setSlotOverlay(false, true, GuiTextures.HEATING_OVERLAY_1)
.setSlotOverlay(true, true, GuiTextures.HEATING_OVERLAY_2)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);

/**
* Example:
Expand All @@ -271,7 +270,10 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<IntCircuitRecipeBuilder> DISTILLERY_RECIPES = new RecipeMap<>("distillery", 1, 1, 0, 1, 1, 1, 1, 1, new IntCircuitRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW_MULTIPLE, MoveType.HORIZONTAL);
.setSlotOverlay(false, true, GuiTextures.BEAKER_OVERLAY_1)
.setSlotOverlay(true, true, GuiTextures.BEAKER_OVERLAY_4)
.setSlotOverlay(true, false, GuiTextures.DUST_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW_MULTIPLE, MoveType.HORIZONTAL);

/**
* Example:
Expand Down Expand Up @@ -345,7 +347,8 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<FusionRecipeBuilder> FUSION_RECIPES = new RecipeMap<>("fusion_reactor", 0, 0, 0, 0, 2, 2, 1, 1, new FusionRecipeBuilder());
public static final RecipeMap<FusionRecipeBuilder> FUSION_RECIPES = new RecipeMap<>("fusion_reactor", 0, 0, 0, 0, 2, 2, 1, 1, new FusionRecipeBuilder())
.setProgressBar(GuiTextures.PROGRESS_BAR_FUSION, MoveType.HORIZONTAL);

/**
* Examples:
Expand All @@ -366,9 +369,10 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> CENTRIFUGE_RECIPES = new RecipeMap<>("centrifuge", 0, 1, 0, 6, 0, 1, 0, 6, new SimpleRecipeBuilder().EUt(5))
.setSlotOverlay(false, false, true, GuiTextures.EXTRACTOR_OVERLAY)
.setSlotOverlay(false, true, true, GuiTextures.DARK_CANISTER_OVERLAY)
public static final RecipeMap<SimpleRecipeBuilder> CENTRIFUGE_RECIPES = new RecipeMap<>("centrifuge", 0, 2, 0, 6, 0, 1, 0, 6, new SimpleRecipeBuilder().EUt(5))
.setSlotOverlay(false, false, false, GuiTextures.EXTRACTOR_OVERLAY)
.setSlotOverlay(false, false, true, GuiTextures.CANISTER_OVERLAY)
.setSlotOverlay(false, true, true, GuiTextures.CENTRIFUGE_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_EXTRACT, MoveType.HORIZONTAL);

/**
Expand All @@ -395,10 +399,11 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> ELECTROLYZER_RECIPES = new RecipeMap<>("electrolyzer", 0, 1, 0, 6, 0, 1, 0, 6, new SimpleRecipeBuilder())
.setSlotOverlay(false, false, true, GuiTextures.CHARGER_OVERLAY)
.setSlotOverlay(false, true, true, GuiTextures.DARK_CANISTER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_EXTRACT, MoveType.HORIZONTAL);
public static final RecipeMap<SimpleRecipeBuilder> ELECTROLYZER_RECIPES = new RecipeMap<>("electrolyzer", 0, 2, 0, 6, 0, 1, 0, 6, new SimpleRecipeBuilder())
.setSlotOverlay(false, false, false, GuiTextures.LIGHTNING_OVERLAY_1)
.setSlotOverlay(false, false, true, GuiTextures.CANISTER_OVERLAY)
.setSlotOverlay(false, true, true, GuiTextures.LIGHTNING_OVERLAY_2)
.setProgressBar(GuiTextures.PROGRESS_BAR_EXTRACT, MoveType.HORIZONTAL);

/**
* Example:
Expand Down Expand Up @@ -429,7 +434,10 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<ImplosionRecipeBuilder> IMPLOSION_RECIPES = new RecipeMap<>("implosion_compressor", 2, 3, 1, 2, 0, 0, 0, 0, new ImplosionRecipeBuilder().duration(20).EUt(30));
public static final RecipeMap<ImplosionRecipeBuilder> IMPLOSION_RECIPES = new RecipeMap<>("implosion_compressor", 2, 3, 1, 2, 0, 0, 0, 0, new ImplosionRecipeBuilder().duration(20).EUt(30))
.setSlotOverlay(false, false, true, GuiTextures.IMPLOSION_OVERLAY_1)
.setSlotOverlay(false, false, false, GuiTextures.IMPLOSION_OVERLAY_2)
.setSlotOverlay(true, false, true, GuiTextures.DUST_OVERLAY);

/**
* Example:
Expand Down Expand Up @@ -461,12 +469,13 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<ChemicalReactorRecipeBuilder> CHEMICAL_RECIPES = new RecipeMap<>("chemical_reactor", 0, 2, 0, 2, 0, 3, 0, 2, new ChemicalReactorRecipeBuilder().EUt(30))
.setSlotOverlay(false, false, false, GuiTextures.MOLECULAR_OVERLAY_1)
.setSlotOverlay(false, false, true, GuiTextures.MOLECULAR_OVERLAY_2)
.setSlotOverlay(false, true, GuiTextures.MOLECULAR_OVERLAY_3)
.setSlotOverlay(true, false, GuiTextures.VIAL_OVERLAY_1)
.setSlotOverlay(true, true, GuiTextures.VIAL_OVERLAY_2)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW_MULTIPLE, MoveType.HORIZONTAL);
.setSlotOverlay(false, false, false, GuiTextures.MOLECULAR_OVERLAY_1)
.setSlotOverlay(false, false, true, GuiTextures.MOLECULAR_OVERLAY_2)
.setSlotOverlay(false, true, false, GuiTextures.MOLECULAR_OVERLAY_3)
.setSlotOverlay(false, true, true, GuiTextures.MOLECULAR_OVERLAY_4)
.setSlotOverlay(true, false, GuiTextures.VIAL_OVERLAY_1)
.setSlotOverlay(true, true, GuiTextures.VIAL_OVERLAY_2)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW_MULTIPLE, MoveType.HORIZONTAL);

/**
* Example:
Expand Down Expand Up @@ -505,7 +514,7 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<UniversalDistillationRecipeBuilder> DISTILLATION_RECIPES = new RecipeMap<>("distillation_tower", 0, 0, 0, 1, 1, 1, 1, 12, new UniversalDistillationRecipeBuilder());
public static final RecipeMap<UniversalDistillationRecipeBuilder> DISTILLATION_RECIPES = new RecipeMapDistillationTower("distillation_tower", 0, 0, 0, 1, 1, 1, 1, 12, new UniversalDistillationRecipeBuilder());

/**
* Example:
Expand All @@ -520,7 +529,10 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> CRACKING_RECIPES = new RecipeMap<>("cracker", 0, 0, 0, 0, 2, 2, 1, 2, new SimpleRecipeBuilder());
public static final RecipeMap<SimpleRecipeBuilder> CRACKING_RECIPES = new RecipeMap<>("cracker", 0, 0, 0, 0, 2, 2, 1, 2, new SimpleRecipeBuilder())
.setSlotOverlay(false, true, GuiTextures.CRACKING_OVERLAY_1)
.setSlotOverlay(true, true, GuiTextures.CRACKING_OVERLAY_2)
.setProgressBar(GuiTextures.PROGRESS_BAR_CRACKING, MoveType.HORIZONTAL);

/**
* Example:
Expand Down Expand Up @@ -571,8 +583,8 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<IntCircuitRecipeBuilder> BENDER_RECIPES = new RecipeMap<>("metal_bender", 2, 2, 1, 1, 0, 0, 0, 0, new IntCircuitRecipeBuilder())
.setSlotOverlay(false, false, false, GuiTextures.BENDER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_COMPRESS, MoveType.HORIZONTAL);
.setSlotOverlay(false, false, false, GuiTextures.BENDER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_BENDING, MoveType.HORIZONTAL);


@ZenProperty
Expand Down Expand Up @@ -615,6 +627,7 @@ public class RecipeMaps {
.setSlotOverlay(false, false, GuiTextures.PIPE_OVERLAY_1)
.setSlotOverlay(true, false, false, GuiTextures.PIPE_OVERLAY_2)
.setSlotOverlay(true, false, true, GuiTextures.DUST_OVERLAY)
.setSpecialTexture(98, 24, 5, 18, GuiTextures.PROGRESS_BAR_LATHE_BASE)
.setProgressBar(GuiTextures.PROGRESS_BAR_LATHE, MoveType.HORIZONTAL);

/**
Expand All @@ -632,7 +645,7 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<CutterRecipeBuilder> CUTTER_RECIPES = new RecipeMap<>("cutting_saw", 1, 1, 1, 2, 0, 1, 0, 0, new CutterRecipeBuilder())
.setSlotOverlay(false, false, GuiTextures.BOX_OVERLAY)
.setSlotOverlay(false, false, GuiTextures.SAWBLADE_OVERLAY)
.setSlotOverlay(true, false, false, GuiTextures.CUTTER_OVERLAY)
.setSlotOverlay(true, false, true, GuiTextures.DUST_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_SLICE, MoveType.HORIZONTAL);
Expand Down Expand Up @@ -669,21 +682,22 @@ public class RecipeMaps {

@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> FORGE_HAMMER_RECIPES = new RecipeMap<>("forge_hammer", 1, 1, 1, 1, 0, 0, 0, 0, new SimpleRecipeBuilder())
.setSlotOverlay(false, false, GuiTextures.HAMMER_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_HAMMER, MoveType.VERTICAL);
.setSlotOverlay(false, false, GuiTextures.HAMMER_OVERLAY)
.setSpecialTexture(78, 42, 20, 6, GuiTextures.PROGRESS_BAR_HAMMER_BASE)
.setProgressBar(GuiTextures.PROGRESS_BAR_HAMMER, MoveType.VERTICAL);


@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> PACKER_RECIPES = new RecipeMap<>("packer", 2, 2, 1, 1, 0, 0, 0, 0, new SimpleRecipeBuilder().EUt(12).duration(10))
.setSlotOverlay(false, false, true, GuiTextures.BOX_OVERLAY)
.setSlotOverlay(true, false, GuiTextures.BOXED_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_PACKER, MoveType.HORIZONTAL);


@ZenProperty
public static final RecipeMap<SimpleRecipeBuilder> UNPACKER_RECIPES = new RecipeMap<>("unpacker", 2, 2, 1, 2, 0, 0, 0, 0, new SimpleRecipeBuilder().EUt(12).duration(10))
.setSlotOverlay(false, false, GuiTextures.BOXED_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL);
.setProgressBar(GuiTextures.PROGRESS_BAR_UNPACKER, MoveType.HORIZONTAL);


/**
Expand All @@ -698,7 +712,10 @@ public class RecipeMaps {
*/

@ZenProperty
public static final RecipeMap<AmplifierRecipeBuilder> AMPLIFIERS = new RecipeMap<>("uuamplifier", 1, 1, 0, 0, 0, 0, 1, 1, new AmplifierRecipeBuilder().EUt(32));
public static final RecipeMap<AmplifierRecipeBuilder> AMPLIFIERS = new RecipeMap<>("uuamplifier", 1, 1, 0, 0, 0, 0, 1, 1, new AmplifierRecipeBuilder().EUt(32))
.setSlotOverlay(false, false, GuiTextures.EXTRACTOR_OVERLAY)
.setSlotOverlay(true, true, GuiTextures.UUA_SLOT_OVERLAY)
.setProgressBar(GuiTextures.PROGRESS_BAR_EXTRACT, MoveType.HORIZONTAL);

@ZenProperty
public static final RecipeMapAssemblyLine<SimpleRecipeBuilder> ASSEMBLY_LINE_RECIPES = new RecipeMapAssemblyLine<>("assembly_line", 4, 16, 1, 1, 0, 4, 0, 0, new SimpleRecipeBuilder())
Expand Down
Loading

0 comments on commit a296226

Please sign in to comment.