SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/gui/components/TooltipPanel.java

80 lines
2.8 KiB
Java

package speiger.src.coreengine.rendering.gui.components;
import java.util.List;
import java.util.UUID;
import speiger.src.collections.objects.lists.ObjectArrayList;
import speiger.src.collections.objects.lists.ObjectList;
import speiger.src.collections.objects.maps.impl.hash.Object2ObjectLinkedOpenHashMap;
import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap;
import speiger.src.collections.objects.utils.maps.Object2ObjectMaps;
import speiger.src.coreengine.math.misc.ColorUtils;
import speiger.src.coreengine.rendering.gui.GuiComponent;
import speiger.src.coreengine.rendering.gui.helper.box.IGuiBox;
import speiger.src.coreengine.rendering.gui.helper.box.ParentBox;
import speiger.src.coreengine.rendering.gui.helper.constrains.Constrains;
import speiger.src.coreengine.rendering.gui.helper.constrains.MenuConstrain;
import speiger.src.coreengine.rendering.gui.helper.constrains.ParentConstrain;
public class TooltipPanel extends PanelComponent
{
ObjectList<UUID> helperList = new ObjectArrayList<>();
List<GuiComponent> indexedComponents = new ObjectArrayList<>();
Object2ObjectMap<UUID, GuiComponent> renderedTooltips = new Object2ObjectLinkedOpenHashMap<>();
int color = ColorUtils.BLACK;
int borderColor = ColorUtils.DARK_GRAY;
IGuiBox box = new ParentBox(1.2F);
@Override
public void init()
{
super.init();
addBox(box);
}
public void updateTooltips(Object2ObjectMap<UUID, GuiComponent> newTooltips)
{
helperList.addAll(renderedTooltips.keySet());
helperList.removeAll(newTooltips.keySet());
if(helperList.size() > 0)
{
for(int i = 0;i<helperList.size();i++)
{
GuiComponent com = renderedTooltips.remove(helperList.get(i));
removeChild(com);
indexedComponents.remove(com);
}
helperList.clear();
}
newTooltips.keySet().removeAll(renderedTooltips.keySet());
for(Object2ObjectMap.Entry<UUID, GuiComponent> entry : Object2ObjectMaps.fastIterable(newTooltips))
{
renderedTooltips.put(entry.getKey(), entry.getValue());
indexedComponents.add(entry.getValue());
addChild(entry.getValue(), new Constrains(new ParentConstrain(3.2F), new MenuConstrain<>(indexedComponents, () -> 1F), null, null));
}
float[] data = new float[]{
Float.MAX_VALUE,
Float.MAX_VALUE,
Float.MIN_VALUE,
Float.MIN_VALUE
};
for(GuiComponent child : indexedComponents)
{
if(child.isVisible()) child.calculateActualBounds(data, false);
}
bounds(data[2]-data[0] + 6.4F, data[3]-data[1] + 2.5F);
}
@Override
protected boolean renderSelf(int mouseX, int mouseY, float particalTicks)
{
getRenderer().drawQuad(getBox(), -0.01F, color).drawQuad(box, 0F, borderColor);
return true;
}
public float isOutsideScreen(int mouseX, int width)
{
return mouseX + getBox().getWidth() > width ? -(getBox().getWidth() + 5F) : 10F;
}
}