Skip to content

Commit

Permalink
Add an climate pillar on the left side of the greenhouse gui
Browse files Browse the repository at this point in the history
  • Loading branch information
Nedelosk committed Dec 25, 2016
1 parent d4f9c69 commit 5bd4ba3
Show file tree
Hide file tree
Showing 10 changed files with 173 additions and 20 deletions.
7 changes: 4 additions & 3 deletions src/main/java/forestry/api/core/EnumTemperature.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
******************************************************************************/
package forestry.api.core;

import forestry.core.utils.ClimateUtil;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
Expand All @@ -22,6 +21,8 @@ public enum EnumTemperature {
NONE("None", "habitats/ocean"), ICY("Icy", "habitats/snow"), COLD("Cold", "habitats/taiga"),
NORMAL("Normal", "habitats/plains"), WARM("Warm", "habitats/jungle"), HOT("Hot", "habitats/desert"), HELLISH("Hellish", "habitats/nether");

public static EnumTemperature[] VALUES = values();

public final String name;
public final String iconIndex;

Expand All @@ -35,7 +36,7 @@ public String getName() {
}

@SideOnly(Side.CLIENT)
public TextureAtlasSprite getIcon() {
public TextureAtlasSprite getSprite() {
return ForestryAPI.textureManager.getDefault(iconIndex);
}

Expand Down Expand Up @@ -72,7 +73,7 @@ public static EnumTemperature getFromBiome(Biome biome, World world, BlockPos po
if (BiomeHelper.isBiomeHellish(biome)) {
return HELLISH;
}
float temperature = ClimateUtil.getTemperature(world, pos);
float temperature = ForestryAPI.climateManager.getInfo(world, pos).getTemperature();
return getFromValue(temperature);
}
}
2 changes: 1 addition & 1 deletion src/main/java/forestry/core/gui/ledgers/ClimateLedger.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void draw(int x, int y) {
drawBackground(x, y);

// Draw icon
drawSprite(temperature.getIcon(), x + 3, y + 4);
drawSprite(temperature.getSprite(), x + 3, y + 4);

if (!isFullyOpened()) {
return;
Expand Down
36 changes: 24 additions & 12 deletions src/main/java/forestry/greenhouse/gui/GuiGreenhouse.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,21 +69,23 @@ public GuiGreenhouse(EntityPlayer player, TileGreenhouse tile) {
x+=50 + (previous.getHandlerSlot() != null ? 20 : 0);
widgetManager.add(new WidgetCamouflageTab(widgetManager, guiLeft + x, guiTop - 25, inventory.getMultiblockLogic().getController(), tile, CamouflageManager.DOOR));

widgetManager.add(new WidgetClimatePillar(widgetManager, guiLeft- 23, guiTop + 5));

fieldsEnabeled = true;

temperatureField = new GuiTextField(0, fontRendererObj, guiLeft + 63, guiTop + 30, 50, 10);
humidityField = new GuiTextField(1, fontRendererObj, guiLeft + 63, guiTop + 60, 50, 10);
}

@Override
public void initGui() {
super.initGui();

temperatureField = new GuiTextField(0, fontRendererObj, guiLeft + 63, guiTop + 30, 50, 10);
humidityField = new GuiTextField(1, fontRendererObj, guiLeft + 63, guiTop + 60, 50, 10);
temperatureField = new GuiTextField(0, fontRendererObj, guiLeft + 64, guiTop + 31, 50, 10);
humidityField = new GuiTextField(1, fontRendererObj, guiLeft + 64, guiTop + 61, 50, 10);

temperatureField.setValidator(numberFilter);
humidityField.setValidator(numberFilter);

temperatureField.setEnableBackgroundDrawing(false);
humidityField.setEnableBackgroundDrawing(false);

IGreenhouseController controller = inventory.getMultiblockLogic().getController();
if (controller == null || controller.getControlClimate() == ClimateInfo.MAX) {
Expand Down Expand Up @@ -119,19 +121,29 @@ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOEx
temperatureField.mouseClicked(mouseX, mouseY, mouseButton);
humidityField.mouseClicked(mouseX, mouseY, mouseButton);
IClimateControlProvider provider = inventory.getMultiblockLogic().getController();
IClimateInfo info = provider.getControlClimate();
if (temperatureWasFocused && !temperatureField.isFocused()) {
if (temperatureWasFocused && !temperatureField.isFocused() || humidityWasFocused && !humidityField.isFocused()) {
float temp = parseField(temperatureField);
temperatureField.setText(Float.toString(temp));
provider.setControlClimate(new ClimateInfo(temp, info.getHumidity()));
} else if (humidityWasFocused && !humidityField.isFocused()) {
float hum = parseField(humidityField);
humidityField.setText(Float.toString(hum));
provider.setControlClimate(new ClimateInfo(info.getTemperature(), hum));
setClimate(provider, temp, hum);
}
Proxies.net.sendToServer(new PacketUpdateClimateControl(provider));
}
}

public void setClimate(float temp){
setClimate(inventory.getMultiblockLogic().getController(), temp);
}

public void setClimate(IClimateControlProvider provider, float temp){
IClimateInfo info = provider.getControlClimate();
setClimate(provider, temp, info.getHumidity());
}

public void setClimate(IClimateControlProvider provider, float temp, float hum){
temperatureField.setText(Float.toString(temp));
humidityField.setText(Float.toString(hum));
provider.setControlClimate(new ClimateInfo(temp, hum));
}

private float parseField(GuiTextField field) {
String text = field.getText();
Expand Down
132 changes: 132 additions & 0 deletions src/main/java/forestry/greenhouse/gui/WidgetClimatePillar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
package forestry.greenhouse.gui;

import java.util.ArrayList;
import java.util.List;

import forestry.api.core.EnumTemperature;
import forestry.api.genetics.AlleleManager;
import forestry.core.gui.tooltips.ToolTip;
import forestry.core.gui.widgets.Widget;
import forestry.core.gui.widgets.WidgetManager;
import forestry.core.proxy.Proxies;
import forestry.core.render.TextureManager;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class WidgetClimatePillar extends Widget {

private final List<ClimateButton> buttons = new ArrayList<>();

public WidgetClimatePillar(WidgetManager manager, int xPos, int yPos) {
super(manager, xPos, yPos);
this.width = 23;
this.height = 90;
for(int i = 1;i < 6;i++){
EnumTemperature temp = EnumTemperature.VALUES[i];
float value;
switch (temp) {
case ICY:
value = 0.0F;
break;
case COLD:
value = 0.2F;
break;
case WARM:
value = 0.9F;
break;
case HOT:
value = 1.2F;
break;
default:
value = 0.5F;
break;
}
buttons.add(new ClimateButton(this, temp, value, xPos + 5, yPos + 5 + (i - 1) * 16));
}
}

@Override
public void draw(int startX, int startY) {
Proxies.render.bindTexture(manager.gui.textureFile);
manager.gui.drawTexturedModalRect(startX + xPos, startY + yPos, 216, 25, width, height);
for(ClimateButton button : buttons){
button.draw(startX, startY);
}
}

@Override
public ToolTip getToolTip(int mouseX, int mouseY) {
for(ClimateButton button : buttons){
if(button.isMouseOver(mouseX, mouseY)){
return button.getToolTip();
}
}
return null;
}

@Override
public boolean handleMouseRelease(int mouseX, int mouseY, int eventType) {
mouseX-=manager.gui.getGuiLeft();
mouseY-=manager.gui.getGuiTop();
if(isMouseOver(mouseX, mouseY)){
return true;
}
return false;
}

@Override
public void handleMouseClick(int mouseX, int mouseY, int mouseButton) {
mouseX-=manager.gui.getGuiLeft();
mouseY-=manager.gui.getGuiTop();
for(ClimateButton button : buttons){
if(button.isMouseOver(mouseX, mouseY)){
((GuiGreenhouse)manager.gui).setClimate(button.value);
}
}
}

private static class ClimateButton{
final WidgetClimatePillar parent;
final EnumTemperature temperature;
final float value;
final int xPos, yPos;

public ClimateButton(WidgetClimatePillar parent, EnumTemperature temperature, float value, int xPos, int yPos) {
this.parent = parent;
this.temperature = temperature;
this.value = value;
this.xPos = xPos;
this.yPos = yPos;
}

public void draw(int startX, int startY) {
parent.drawSprite(temperature.getSprite(), startX + xPos, startY + yPos);
}

public ToolTip getToolTip() {
return toolTip;
}

public boolean isMouseOver(int mouseX, int mouseY) {
return mouseX >= xPos && mouseX <= xPos + 16 && mouseY >= yPos && mouseY <= yPos + 16;
}

protected final ToolTip toolTip = new ToolTip(250) {
@Override
@SideOnly(Side.CLIENT)
public void refresh() {
toolTip.clear();
toolTip.add("T: " + AlleleManager.climateHelper.toDisplay(temperature));
toolTip.add("V: " + value);
}
};
}

protected void drawSprite(TextureAtlasSprite sprite, int x, int y) {
GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0F);
Proxies.render.bindTexture(TextureManager.getInstance().getGuiTextureMap());
manager.gui.drawTexturedModalRect(x, y, sprite, 16, 16);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,14 @@ public boolean setCamouflageBlock(String type, ItemStack camouflageBlock, boolea
return false;
}
if (sendClientUpdate && world.isRemote) {
for (IMultiblockComponent comp : connectedParts) {
if (comp instanceof ICamouflagedTile) {
ICamouflagedTile camBlock = (ICamouflagedTile) comp;
if (camBlock.getCamouflageType().equals(type)) {
world.markBlockRangeForRenderUpdate(camBlock.getCoordinates(), camBlock.getCoordinates());
}
}
}
Proxies.net.sendToServer(new PacketCamouflageSelectServer(this, type, CamouflageSelectionType.MULTIBLOCK));
}
MinecraftForge.EVENT_BUS.post(new CamouflageChangeEvent(this, null, this, type));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"textures": {
"texture": "blocks/glass_green",
"particle": "#blocks/glass_green"
"particle": "blocks/glass_green"
},
"elements": [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"textures": {
"texture": "blocks/glass_green",
"particle": "#blocks/glass_green",
"particle": "blocks/glass_green",
"log_oak": "blocks/log_oak"
},
"elements": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"textures": {
"texture": "blocks/glass_green",
"particle": "#blocks/glass_green"
"particle": "blocks/glass_green"
},
"elements": [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"textures": {
"texture": "blocks/glass_green",
"particle": "#blocks/glass_green",
"particle": "blocks/glass_green",
"log_oak": "blocks/log_oak"
},
"elements": [
Expand Down
Binary file modified src/main/resources/assets/forestry/textures/gui/greenhouse.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 5bd4ba3

Please sign in to comment.