More changes, reorganization

This commit is contained in:
MachineMuse 2012-12-17 21:17:28 -07:00
parent b958f0d07f
commit d43a78dcf8
25 changed files with 598 additions and 308 deletions

View file

@ -0,0 +1,80 @@
package machinemuse.general.geometry;
/**
* A class representing an RGBA colour and various helper functions. Mainly to
* improve readability elsewhere.
*
* @author MachineMuse
*/
public class Colour {
/**
* The RGBA values are stored as floats from 0.0F (nothing) to 1.0F (full
* saturation/opacity)
*/
public float r, g, b, a;
/**
* Constructor. Just sets the RGBA values to the parameters.
*/
public Colour(float r, float g, float b, float a) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
/**
* Secondary constructor. Sets RGB accordingly and sets alpha to 1.0F (full
* opacity)
*/
public Colour(float r, float g, float b) {
this(r, g, b, 1.0F);
}
/**
* Takes colours in the integer format that Minecraft uses, and converts.
*/
public Colour(int c) {
this.a = (c >> 24 & 255) / 255.0F;
this.r = (c >> 16 & 255) / 255.0F;
this.g = (c >> 8 & 255) / 255.0F;
this.b = (c & 255) / 255.0F;
}
/**
* Returns this colour as an int in Minecraft's format (I think)
*
* @return int value of this colour
*/
public int getInt() {
int val = 0;
val = val | ((int) (a * 255) << 24);
val = val | ((int) (b * 255) << 16);
val = val | ((int) (g * 255) << 8);
val = val | ((int) (r * 255));
return val;
}
/**
* Returns a colour with RGB set to the same value ie. a shade of grey.
*/
public static Colour getGreyscale(float value, float alpha) {
return new Colour(value, value, value, alpha);
}
/**
* Returns a colour at interval interval along a linear gradient from this
* to target
*/
public Colour interpolate(Colour target, float interval) {
float complement = 1 - interval;
return new Colour(
this.r * complement + target.r * interval,
this.g * complement + target.g * interval,
this.b * complement + target.b * interval,
this.a * complement + target.a * interval);
}
}

View file

@ -0,0 +1,27 @@
package machinemuse.general.geometry;
public class Point2D {
private float x;
private float y;
public Point2D(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public void setX(float x) {
this.x = x;
}
public void setY(float y) {
this.y = y;
}
}

View file

@ -1,26 +1,88 @@
package machinemuse.powersuits.client;
import machinemuse.powersuits.gui.MuseGui;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.storage.MapData;
import net.minecraftforge.client.IItemRenderer;
public class EquipmentRenderer implements IItemRenderer {
private static final boolean useRenderHelper = true;
/**
* Forge checks this to see if our custom renderer will handle a certain
* type of rendering.
*
* type can be:
*
* ENTITY - When the item is floating in the world, e.g. after being tossed
* or dropped by a mob.
*
* INVENTORY - Drawing it on an inventory slot.
*
* EQUIPPED - Rendering the item in an entity's hand e.g. endermen.
*
* FIRST_PERSON_MAP - Drawing it in the viewing player's hand
*/
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return useRenderHelper;
}
/**
* Called to actually render the item. type is as above, item is the item to
* render, and data is some extra data depending on the type.
*
*/
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
switch (type) {
case ENTITY:
RenderBlocks renderEntity = (RenderBlocks) data[0];
EntityItem entityEntity = (EntityItem) data[1];
break;
case INVENTORY:
RenderBlocks renderInventory = (RenderBlocks) data[0];
break;
case EQUIPPED:
RenderBlocks renderEquipped = (RenderBlocks) data[0];
EntityLiving entityEquipped = (EntityLiving) data[1];
break;
case FIRST_PERSON_MAP:
EntityPlayer playerFirstPerson = (EntityPlayer) data[0];
RenderEngine engineFirstPerson = (RenderEngine) data[1];
MapData mapDataFirstPerson = (MapData) data[2];
break;
default:
}
MuseGui muse = new MuseGui();
muse.drawCircleAround(8, 8, 8);
}
/**
* Whether or not to use the RenderHelper for this item. Helper can be:
*
* ENTITY_ROTATION - Isometric rotation, for block items
*
* ENTITY_BOBBING - Up-and-down bobbing effect for EntityItem
*
* EQUIPPED_BLOCK - Determines if the currently equipped item should be
* rendered as a 3D block or as a 2D texture.
*
* BLOCK_3D - Determines if the item should equate to a block that has
* RenderBlocks.renderItemIn3d return true
*
* INVENTORY_BLOCK - Determines if the item should be rendered in GUI
* inventory slots as a 3D block or as a 2D texture.
*/
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item,
ItemRendererHelper helper) {
return false;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
MuseGui muse = new MuseGui();
muse.drawCircleAround(8, 8, 8);
}
}

View file

@ -1,136 +0,0 @@
package machinemuse.powersuits.client;
import machinemuse.powersuits.common.ContainerTinkerTable;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.IInventory;
import org.lwjgl.opengl.GL11;
public class GuiTinkerTable extends GuiContainer {
public IInventory[] armorInventory;
public GuiTinkerTable(ContainerTinkerTable container) {
super(container);
this.xSize = 256;
this.ySize = 226;
}
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui()
{
super.initGui();
}
public void refresh() {
for (int i = 0; i < 4; i++) {
}
}
// public void drawNthItem(ItemStack stack, int n) {
// // TBI
// // draw item
// // draw a button if it's moddable
// }
//
// public void drawSelection() {
// // if(selectedSlot != null) {
// // drawCircleAround(selectedSlot.position, renderEngine, selectedSlot);
// // }
// // for (Augmentation a : Augmentation.getAllAugs()) {
// // if (a.canGoInSlot(selectedSlot.getType())) {
// //
// // }
// // }
//
// }
// public void drawLayout(AugLayout layout) {
//
// }
//
// public void drawBackground() {
// this.drawDefaultBackground();
// this.drawRectangularBackground();
// }
//
// public void drawScreen(int par1, int par2, float par3) {
// super.drawScreen(par1, par2, par3);
// drawBackground();
// drawItemList();
// if (editingItem != null && editingLayout != null) {
// drawLayout(editingLayout);
// if (selectedSlot != null) {
// drawSelection();
// }
// }
// }
//
// public void drawItemList() {
// List<ItemStack> items = new ArrayList<ItemStack>();
// for (int i = 0; i < 4; i++) {
// ItemStack item = editingPlayer.inventory.armorItemInSlot(i);
// this.drawItemAt(new Point2Df(0, 0), this.mc.renderEngine, item);
// items.add(item);
// }
// for (int i = 0; i < 9; i++) {
// items.add(editingPlayer.inventory.mainInventory[i]);
// }
// this.drawItemsOnVerticalLine(items, new Point2Df(-0.9f, 0), 0.9f,
// this.mc.renderEngine);
// }
/**
* Draw the foreground layer for the GuiContainer (everything in front of
* the items)
*/
protected void drawGuiContainerForegroundLayer(int par1, int par2)
{
int x = 0;
int y = 0;
int color = 0;
double weight = 0.0;
double capacity = 0.0;
this.fontRenderer.drawString("Weight: " + weight, 8, 104,
color);
this.fontRenderer.drawString("Capacity: " + capacity, 8, 114,
color);
this.fontRenderer.drawString("Speed: " + capacity, 8, 124,
color);
}
protected void drawAugmentationContainerBackground(int paddingX,
int paddingY, int j) {
int n = 0; // set N to the number of augs in that item, plus 1
for (int i = 0; i < n; i++) {
this.drawTexturedModalRect(
paddingX + 35, // where on the screen
paddingY + 8 + 18 * j,
0, // where in the texture
227,
18 * i, // how much
18);
}
}
/**
* Draw the background layer for the GuiContainer (everything behind the
* items)
*/
protected void drawGuiContainerBackgroundLayer(float par1, int par2,
int par3)
{
int textureIndex = this.mc.renderEngine
.getTexture("/img/tinktablegui.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.renderEngine.bindTexture(textureIndex);
int paddingX = (this.width - this.xSize) / 2;
int paddingY = (this.height - this.ySize) / 2;
int numrows = 5;
this.drawTexturedModalRect(paddingX, paddingY, 0, 0, this.xSize,
this.ySize);
}
}

View file

@ -1,147 +0,0 @@
package machinemuse.powersuits.client;
import java.util.List;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
public class MuseGui extends GuiScreen {
protected static RenderItem itemRenderer = new RenderItem();
private final boolean usePretty = true;
private static final int numSegments = 360;
private static final int xcenter = 8;
private static final int ycenter = 8;
private static final Tessellator tesselator = Tessellator.instance;
public static final double theta = (2 * Math.PI) / numSegments;
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui() {
super.initGui();
this.controlList.clear();
Keyboard.enableRepeatEvents(true);
}
public void drawRectangularBackground() {
GL11.glEnable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor4f(0.5f, 0.5f, 0.5f, 0.8f);
GL11.glVertex2d(0, 0);
GL11.glVertex2d(width - 10, 0);
GL11.glVertex2d(width - 10, height - 10);
GL11.glVertex2d(0, height - 10);
GL11.glEnd();
}
public void drawItemsOnVerticalLine(List<ItemStack> items, Point2Df offset,
float lineheight, RenderEngine engine) {
if (items.size() < 1) {
return;
} else if (items.size() < 2) {
drawItemAt(offset, engine, items.get(0));
} else {
int top = (int) (offset.getAbsY(height) - height * lineheight / 2);
int bottom = (int) (offset.getAbsY(height) + height * lineheight
/ 2);
Point2Df position = new Point2Df(offset.x, top * 2.0f / height - 1);
int step = (top - bottom) / (items.size() - 1);
for (int i = 0; i < items.size(); i++) {
drawItemAt(position, engine, items.get(i));
position.y += step;
}
}
}
public void drawItemAt(Point2Df p, RenderEngine engine,
ItemStack item) {
itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, engine,
item, p.getAbsX(width) - xcenter, p.getAbsY(height) - ycenter);
}
public void drawCircleAround(float xoffset, float yoffset, float radius) {
int start = (int) (System.currentTimeMillis() / 4 % 360);
double x = radius * Math.sin(theta * start);
double y = radius * Math.cos(theta * start);
double tf = Math.tan(theta);
double rf = Math.cos(theta);
double tx;
double ty;
Colour c = new Colour(0.0f, 1.0f, 0.0f, 0.0f);
GL11.glEnable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glBegin(GL11.GL_LINE_LOOP);
for (int i = 0; i < numSegments; i++) {
GL11.glColor4f(c.r, c.g, c.b, c.a);
GL11.glVertex2d(x + xoffset, y + yoffset);
tx = y;
ty = -x;
x += tx * tf;
y += ty * tf;
x *= rf;
y *= rf;
c.r += theta / 7;
c.b += theta / 7;
c.a += theta / 2;
}
GL11.glEnd();
}
public static class Colour {
public float r;
public float g;
public float b;
public float a;
public Colour(float r, float g, float b, float a) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
public Colour(float r, float g, float b) {
this(r, g, b, 1.0F);
}
public Colour(int c) {
this.r = (c >> 16 & 255) / 255.0F;
this.g = (c >> 8 & 255) / 255.0F;
this.b = (c & 255) / 255.0F;
this.a = 1.0F;
}
}
public static class Point2Df {
/*
* point representation where [-1,-1] is the top left corner of the
* screen and [1,1] is the bottom right.
*/
public float x;
public float y;
public Point2Df(float x, float y) {
this.x = x;
this.y = y;
}
public int getAbsX(int width) {
return (int) ((x + 1) * width / 2);
}
public int getAbsY(int height) {
return (int) ((y + 1) * height / 2);
}
}
}

View file

@ -1,5 +1,6 @@
package machinemuse.powersuits.common;
import machinemuse.powersuits.common.block.BlockTinkerTable;
import net.minecraft.block.Block;
import net.minecraft.block.StepSound;
import net.minecraft.block.material.Material;
@ -101,7 +102,6 @@ public class Config extends Configuration {
PowerArmorLegs(2, "powerArmorLegs", "Power Armor Legs"),
PowerArmorFeet(3, "powerArmorFeet", "Power Armor Feet"),
PowerTool(4, "powerTool", "Power Tool"),
Augmentation(5, "modularAugmentation", "Modular Augmentation"),
;

View file

@ -1,6 +1,6 @@
package machinemuse.powersuits.common;
import machinemuse.powersuits.client.GuiTinkerTable;
import machinemuse.powersuits.gui.GuiTinkerTable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.IGuiHandler;
@ -10,13 +10,12 @@ public class GuiHandler implements IGuiHandler {
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world,
int x, int y, int z) {
return new ContainerTinkerTable(player, world, x, y, z);
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world,
int x, int y, int z) {
return new GuiTinkerTable(new ContainerTinkerTable(player, world, x, y,
z));
return new GuiTinkerTable(player);
}
}

View file

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import machinemuse.powersuits.client.ClientPacketHandler;
import machinemuse.powersuits.common.block.BlockTinkerTable;
import machinemuse.powersuits.common.item.ItemPowerArmor;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.common.Configuration;
@ -55,7 +57,6 @@ public class PowersuitsMod {
allItems.add(new ItemPowerArmor(
Config.Items.values()[i]));
}
allItems.add(new ItemAugmentation(Config.Items.Augmentation));
proxy.registerRenderers();
NetworkRegistry.instance().registerGuiHandler(this, guiHandler);

View file

@ -0,0 +1,9 @@
package machinemuse.powersuits.common.augmentation;
public abstract class Augmentation {
public abstract String getName();
public abstract float getWeight();
public abstract boolean isValidForSlot(int slot);
}

View file

@ -1,5 +1,9 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.block;
import machinemuse.powersuits.common.CommonProxy;
import machinemuse.powersuits.common.Config;
import machinemuse.powersuits.common.PowersuitsMod;
import machinemuse.powersuits.common.Config.Blocks;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

View file

@ -0,0 +1,5 @@
package machinemuse.powersuits.common.item;
public interface IModularItem {
}

View file

@ -1,5 +1,7 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.item;
import machinemuse.powersuits.common.CommonProxy;
import machinemuse.powersuits.common.Config;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumArmorMaterial;
@ -9,8 +11,9 @@ import net.minecraft.util.DamageSource;
import net.minecraftforge.common.ISpecialArmor;
import cpw.mods.fml.common.registry.LanguageRegistry;
public class ItemPowerArmor extends ItemArmor implements ISpecialArmor {
protected ItemPowerArmor(Config.Items item) {
public class ItemPowerArmor extends ItemArmor implements ISpecialArmor,
IModularItem {
public ItemPowerArmor(Config.Items item) {
super(Config.getAssignedItemID(item), // itemID
EnumArmorMaterial.IRON, // Material
item.iconIndex, // Texture index

View file

@ -1,8 +1,8 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.item;
import net.minecraft.item.Item;
public class ItemPowerTool extends Item {
public class ItemPowerTool extends Item implements IModularItem {
public ItemPowerTool(int par1) {
super(par1);

View file

@ -1,7 +1,8 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import java.util.List;
public abstract class AugLayout {
private List<AugSlot> slots;

View file

@ -1,8 +1,9 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import java.util.ArrayList;
import java.util.List;
public class AugSlot {
private List<AugSlot> connectedSlots;
private SlotType type;

View file

@ -1,7 +1,8 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import java.util.ArrayList;
import machinemuse.powersuits.common.item.ItemPowerArmor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;

View file

@ -1,7 +1,9 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import java.util.ArrayList;
import machinemuse.powersuits.common.item.ItemPowerArmor;
import machinemuse.powersuits.common.item.ItemPowerTool;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;

View file

@ -1,8 +1,10 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import java.util.ArrayList;
import java.util.List;
import machinemuse.powersuits.common.Config;
import machinemuse.powersuits.common.Config.Items;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

View file

@ -1,4 +1,4 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import net.minecraft.block.Block;
import net.minecraft.inventory.IInventory;

View file

@ -1,4 +1,4 @@
package machinemuse.powersuits.common;
package machinemuse.powersuits.common.trash;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;

View file

@ -0,0 +1,29 @@
package machinemuse.powersuits.gui;
import java.util.List;
import machinemuse.general.geometry.Point2D;
public abstract class Clickable {
private Point2D position;
public Clickable() {
position = new Point2D(0, 0);
}
public Clickable(Point2D point) {
position = point;
}
public Point2D getPosition() {
return position;
}
public void setPosition(Point2D position) {
this.position = position;
}
public abstract boolean hitBox(float x, float y);
public abstract List<String> getToolTip();
}

View file

@ -0,0 +1,19 @@
package machinemuse.powersuits.gui;
import java.util.List;
public class ClickableAugmentation extends Clickable {
@Override
public boolean hitBox(float x, float y) {
// TODO Auto-generated method stub
return false;
}
@Override
public List<String> getToolTip() {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -0,0 +1,29 @@
package machinemuse.powersuits.gui;
import java.util.List;
import machinemuse.general.geometry.Point2D;
import net.minecraft.item.ItemStack;
public class ClickableItem extends Clickable {
public static final Point2D offset = new Point2D(8, 8);
private ItemStack item;
public ClickableItem(ItemStack item, Point2D pos) {
super(pos);
this.item = item;
}
@Override
public boolean hitBox(float x, float y) {
boolean hitx = Math.abs(x - getPosition().getX()) < offset.getX();
boolean hity = Math.abs(y - getPosition().getY()) < offset.getY();
return hitx && hity;
}
@Override
public List<String> getToolTip() {
return item.getTooltip(null, false);
}
}

View file

@ -0,0 +1,87 @@
package machinemuse.powersuits.gui;
import java.util.ArrayList;
import machinemuse.general.geometry.Colour;
import machinemuse.powersuits.common.item.IModularItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class GuiTinkerTable extends MuseGui {
protected EntityPlayer player;
protected ArrayList<ItemStack> modularItems;
public GuiTinkerTable(EntityPlayer player) {
this.player = player;
this.modularItems = new ArrayList<ItemStack>();
this.xSize = 256;
this.ySize = 226;
}
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui()
{
super.initGui();
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
ItemStack stack = player.inventory.getStackInSlot(i);
if (stack != null && stack.getItem() instanceof IModularItem) {
modularItems.add(stack);
}
}
}
public void refresh() {
for (int i = 0; i < 4; i++) {
}
}
// public void drawNthItem(ItemStack stack, int n) {
// // TBI
// // draw item
// // draw a button if it's moddable
// }
//
// public void drawSelection() {
// // if(selectedSlot != null) {
// // drawCircleAround(selectedSlot.position, renderEngine, selectedSlot);
// // }
// // for (Augmentation a : Augmentation.getAllAugs()) {
// // if (a.canGoInSlot(selectedSlot.getType())) {
// //
// // }
// // }
//
// }
// public void drawLayout(AugLayout layout) {
//
// }
//
public void drawBackground() {
this.drawDefaultBackground();
this.drawRectangularBackground();
}
public void drawScreen(int par1, int par2, float par3) {
super.drawScreen(par1, par2, par3);
drawBackground();
drawItemList();
Colour colour = Colour.getGreyscale(1.0F, 1.0F);
// if (editingItem != null && editingLayout != null) {
// drawLayout(editingLayout);
// if (selectedSlot != null) {
// drawSelection();
// }
// }
}
public void drawItemList() {
this.drawItemsOnVerticalLine(modularItems, -0.9F, 0.0F,
0.9f,
this.mc.renderEngine);
}
}

View file

@ -0,0 +1,212 @@
package machinemuse.powersuits.gui;
import java.util.ArrayList;
import machinemuse.general.geometry.Colour;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
public class MuseGui extends GuiScreen {
protected static RenderItem itemRenderer = new RenderItem();
private final boolean usePretty = true;
private static final int numSegments = 360;
private static final int xcenter = 8;
private static final int ycenter = 8;
private static final Tessellator tesselator = Tessellator.instance;
private long creationTime;
int xSize, ySize;
public static final double theta = (2 * Math.PI) / numSegments;
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui() {
super.initGui();
this.controlList.clear();
Keyboard.enableRepeatEvents(true);
creationTime = System.currentTimeMillis();
}
public void drawRectangularBackground() {
int xpadding = (width - xSize) / 2;
int ypadding = (height - ySize) / 2;
drawGradientRect(
xpadding, ypadding,
xpadding + xSize, ypadding + ySize,
Colour.getGreyscale(0.8f, 0.8f),
Colour.getGreyscale(0.3f, 0.8f));
// GL11.glEnable(GL11.GL_BLEND);
// GL11.glEnable(GL11.GL_LINE_SMOOTH);
// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
// GL11.glBegin(GL11.GL_QUADS);
// GL11.glColor4f(0.5f, 0.5f, 0.5f, 0.8f);
// GL11.glVertex2d(0, 0);
// GL11.glVertex2d(width - 10, 0);
// GL11.glVertex2d(width - 10, height - 10);
// GL11.glVertex2d(0, height - 10);
// GL11.glEnd();
}
public void drawItemsOnVerticalLine(ArrayList<ItemStack> items,
float xoffset,
float yoffset,
float lineheight, RenderEngine engine) {
if (items.size() < 1) {
return;
} else if (items.size() < 2) {
drawItemAt(xoffset, yoffset, engine, items.get(0));
} else {
float step = 2 * lineheight / (items.size() - 1);
for (int i = 0; i < items.size(); i++) {
drawItemAt(xoffset, yoffset - lineheight + i * step, engine,
items.get(i));
}
}
}
/**
* Returns absolute screen coordinates (0 to width) from a relative
* coordinate (-1.0F to +1.0F)
*
* @param relx
* Relative X coordinate
* @return Absolute X coordinate
*/
public int absX(float relx) {
int absx = (int) ((relx + 1) * xSize / 2);
int xpadding = (width - xSize) / 2;
return absx + xpadding;
}
/**
* Returns absolute screen coordinates (0 to width) from a relative
* coordinate (-1.0F to +1.0F)
*
* @param relx
* Relative Y coordinate
* @return Absolute Y coordinate
*/
public int absY(float rely) {
int absy = (int) ((rely + 1) * ySize / 2);
int ypadding = (height - ySize) / 2;
return absy + ypadding;
}
/**
* Draws the specified itemstack at the *relative* coordinates x,y. Used
* mainly in clickables.
*/
public void drawItemAt(float x, float y, RenderEngine engine,
ItemStack item) {
GL11.glEnable(GL11.GL_DEPTH_TEST);
// GL11.glDepthFunc(GL11.GL_GREATER);
GL11.glDisable(GL11.GL_LIGHTING);
itemRenderer.zLevel = 100.0F;
itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, engine,
item, absX(x) - xcenter, absY(y) - ycenter);
Minecraft.getMinecraft().fontRenderer.drawString(
item.getItem().getItemDisplayName(item).substring(12, 16),
absX(x) - xcenter, absY(y) - ycenter,
Colour.getGreyscale(1.0F, 1.0F).getInt());
// drawCircleAround(absX(x), absY(y), 8);
itemRenderer.zLevel = 0.0F;
GL11.glDisable(GL11.GL_DEPTH_TEST);
// GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glEnable(GL11.GL_LIGHTING);
}
public static void drawCircleAround(float xoffset, float yoffset,
float radius) {
int start = (int) (System.currentTimeMillis() / 4 % 360);
double x = radius * Math.sin(theta * start);
double y = radius * Math.cos(theta * start);
double tf = Math.tan(theta);
double rf = Math.cos(theta);
double tx;
double ty;
Colour c = new Colour(0.0f, 1.0f, 0.0f, 0.0f);
texturelessOn();
GL11.glBegin(GL11.GL_LINE_LOOP);
for (int i = 0; i < numSegments; i++) {
GL11.glColor4f(c.r, c.g, c.b, c.a);
GL11.glVertex2d(x + xoffset, y + yoffset);
tx = y;
ty = -x;
x += tx * tf;
y += ty * tf;
x *= rf;
y *= rf;
c.r += theta / 7;
c.b += theta / 7;
c.a += theta / 2;
}
GL11.glEnd();
texturelessOff();
}
/**
* Call before doing any pure geometry (ie. with colours rather than
* textures).
*/
public static void texturelessOn() {
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glShadeModel(GL11.GL_SMOOTH);
}
/**
* Call after doing pure geometry (ie. with colours) to go back to the
* texture mode (default).
*/
public static void texturelessOff() {
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
/**
* Draws a rectangle with a vertical gradient between the specified colors.
*/
protected void drawGradientRect(int left, int top, int right, int bottom,
Colour c1, Colour c2)
{
texturelessOn();
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.setColorRGBA_F(c1.r, c1.g, c1.b, c1.a);
tessellator.addVertex((double) right, (double) top,
(double) this.zLevel);
tessellator
.addVertex((double) left, (double) top, (double) this.zLevel);
tessellator.setColorRGBA_F(c2.r, c2.g, c2.b, c2.a);
tessellator.addVertex((double) left, (double) bottom,
(double) this.zLevel);
tessellator.addVertex((double) right, (double) bottom,
(double) this.zLevel);
tessellator.draw();
texturelessOff();
}
}