/*
* Copyright 2016 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.terasology.rendering.nui.layers.ingame.inventory;
import org.terasology.utilities.Assets;
import org.terasology.math.TeraMath;
import org.terasology.math.geom.Quat4f;
import org.terasology.math.geom.Vector2i;
import org.terasology.math.geom.Vector3f;
import org.terasology.rendering.assets.mesh.Mesh;
import org.terasology.rendering.assets.texture.Texture;
import org.terasology.rendering.assets.texture.TextureRegion;
import org.terasology.rendering.nui.BaseInteractionListener;
import org.terasology.rendering.nui.Canvas;
import org.terasology.rendering.nui.CoreWidget;
import org.terasology.rendering.nui.InteractionListener;
import org.terasology.rendering.nui.LayoutConfig;
import org.terasology.rendering.nui.UIWidget;
import org.terasology.rendering.nui.databinding.Binding;
import org.terasology.rendering.nui.databinding.DefaultBinding;
import org.terasology.rendering.nui.skin.UISkin;
import org.terasology.rendering.nui.widgets.TooltipLine;
import org.terasology.rendering.nui.widgets.TooltipLineRenderer;
import org.terasology.rendering.nui.widgets.UIList;
import java.util.ArrayList;
import java.util.List;
public class ItemIcon extends CoreWidget {
@LayoutConfig
private Binding<TextureRegion> icon = new DefaultBinding<>();
@LayoutConfig
private Binding<Mesh> mesh = new DefaultBinding<>();
@LayoutConfig
private Binding<Texture> meshTexture = new DefaultBinding<>();
@LayoutConfig
private Binding<Integer> quantity = new DefaultBinding<>(1);
private InteractionListener listener = new BaseInteractionListener();
private UIList<TooltipLine> tooltip;
public ItemIcon() {
tooltip = new UIList<>();
tooltip.setInteractive(false);
tooltip.setSelectable(false);
final UISkin defaultSkin = Assets.getSkin("core:itemTooltip").get();
tooltip.setSkin(defaultSkin);
tooltip.setItemRenderer(new TooltipLineRenderer(defaultSkin));
tooltip.bindList(new DefaultBinding<>(new ArrayList<>()));
}
@Override
public void onDraw(Canvas canvas) {
if (getIcon() != null) {
canvas.drawTexture(getIcon());
} else if (getMesh() != null && getMeshTexture() != null) {
Quat4f rot = new Quat4f(TeraMath.PI / 6, -TeraMath.PI / 12, 0);
canvas.drawMesh(getMesh(), getMeshTexture(), canvas.getRegion(), rot, new Vector3f(), 1.0f);
}
if (getQuantity() > 1) {
canvas.drawText(Integer.toString(getQuantity()));
}
List<TooltipLine> tooltipLines = tooltip.getList();
if (tooltipLines != null && !tooltipLines.isEmpty()) {
canvas.addInteractionRegion(listener);
}
}
@Override
public Vector2i getPreferredContentSize(Canvas canvas, Vector2i sizeHint) {
if (icon != null) {
TextureRegion texture = icon.get();
if (texture != null) {
return texture.size();
}
}
return new Vector2i();
}
@Override
public float getTooltipDelay() {
return 0;
}
public void bindIcon(Binding<TextureRegion> binding) {
icon = binding;
}
public TextureRegion getIcon() {
return icon.get();
}
public void setIcon(TextureRegion val) {
icon.set(val);
}
public void bindQuantity(Binding<Integer> binding) {
quantity = binding;
}
public int getQuantity() {
return quantity.get();
}
public void setQuantity(int val) {
quantity.set(val);
}
public void bindMesh(Binding<Mesh> binding) {
mesh = binding;
}
public Mesh getMesh() {
return mesh.get();
}
public void setMesh(Mesh val) {
mesh.set(val);
}
public void bindMeshTexture(Binding<Texture> binding) {
meshTexture = binding;
}
public Texture getMeshTexture() {
return meshTexture.get();
}
public void setMeshTexture(Texture val) {
meshTexture.set(val);
}
public void bindTooltipLines(Binding<List<TooltipLine>> lines) {
tooltip.bindList(lines);
}
public void setTooltipLines(List<TooltipLine> lines) {
tooltip.setList(lines);
}
@Override
public UIWidget getTooltip() {
if (tooltip.getList().size() > 0) {
return tooltip;
} else {
return null;
}
}
}