From 1a96932bca7f50f7962250e53198d863fed7476a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 25 Aug 2022 20:46:28 +0200 Subject: [PATCH] Create basic scaffolding for stackable items --- data.mv.db | Bin 32768 -> 40960 bytes maps/551e1afc-9cda-4d9f-8817-bfd831fc0a75.dat | Bin 23444 -> 24032 bytes .../demo/gui/ItemIconView.java | 18 ++++++++- .../demo/world/item/ItemStack.java | 5 +++ .../demo/world/weapon/Ammunition.java | 35 ++++++++++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/bartlomiejpluta/demo/world/item/ItemStack.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/world/weapon/Ammunition.java diff --git a/data.mv.db b/data.mv.db index c8a0751fb3a7d4877901bf51f6220d0a9d5d0944..852d8bcbc753cdc02226ea859de59864d9a04412 100644 GIT binary patch literal 40960 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 literal 32768 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 diff --git a/maps/551e1afc-9cda-4d9f-8817-bfd831fc0a75.dat b/maps/551e1afc-9cda-4d9f-8817-bfd831fc0a75.dat index 3cd53833560f157a3ab15ad58daddeed2b52a248..9047a075d1dd9e2ecc6a007119243b92a30d344d 100644 GIT binary patch delta 151 zcmbQTo$HiYEWU}Ec~U?0Cr?z5oV-AtZ?c?@z~lyPp2-U|*d}T4ZI;qV L6yJQ@QBno~A6XKS diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java b/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java index 6d77057..704584c 100644 --- a/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java +++ b/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.demo.gui; +import A.fonts; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.gui.Color; import com.bartlomiejpluta.base.api.gui.Component; @@ -11,6 +12,7 @@ import com.bartlomiejpluta.base.api.input.KeyEvent; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.lib.gui.IconView; import com.bartlomiejpluta.demo.world.item.Item; +import com.bartlomiejpluta.demo.world.item.ItemStack; import lombok.Getter; import lombok.NonNull; import lombok.Setter; @@ -18,11 +20,10 @@ import lombok.Setter; import java.util.Map; import java.util.function.Consumer; -import java.util.Map; - public class ItemIconView extends IconView { private final Color normal; private final Color hover; + private final Color textColor; @Getter private Item item; @@ -34,9 +35,12 @@ public class ItemIconView extends IconView { super(context, gui, refs); this.normal = gui.createColor(); this.hover = gui.createColor(); + this.textColor = gui.createColor(); normal.setRGBA(0x444444FF); hover.setRGBA(0x888888FF); + textColor.setRGBA(0xFFFFFFFF); + super.setScale(2f); addEventListener(KeyEvent.TYPE, this::handleKeyEvent); @@ -93,5 +97,15 @@ public class ItemIconView extends IconView { gui.closePath(); super.draw(screen, gui); + + if (item != null && item instanceof ItemStack stack) { + gui.beginPath(); + gui.setFontFace(fonts.roboto_regular.uid); + gui.setFontSize(17); + gui.putText(x + 15, y + 5, String.valueOf(stack.count())); + gui.setFillColor(textColor); + gui.fill(); + gui.closePath(); + } } } diff --git a/src/main/java/com/bartlomiejpluta/demo/world/item/ItemStack.java b/src/main/java/com/bartlomiejpluta/demo/world/item/ItemStack.java new file mode 100644 index 0000000..fa8ec6e --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/world/item/ItemStack.java @@ -0,0 +1,5 @@ +package com.bartlomiejpluta.demo.world.item; + +public interface ItemStack extends Item { + int count(); +} diff --git a/src/main/java/com/bartlomiejpluta/demo/world/weapon/Ammunition.java b/src/main/java/com/bartlomiejpluta/demo/world/weapon/Ammunition.java new file mode 100644 index 0000000..171cc1f --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/world/weapon/Ammunition.java @@ -0,0 +1,35 @@ +package com.bartlomiejpluta.demo.world.weapon; + +import com.bartlomiejpluta.base.api.context.ContextHolder; +import com.bartlomiejpluta.base.api.icon.Icon; +import com.bartlomiejpluta.base.lib.icon.IconDelegate; +import com.bartlomiejpluta.demo.world.item.ItemStack; +import lombok.Getter; +import lombok.NonNull; + +public class Ammunition extends IconDelegate implements ItemStack { + private int count; + + @Getter + private final String name; + + public Ammunition(@NonNull String id, int count) { + this(DB.dao.ammunition.find(id), count); + } + + public Ammunition(@NonNull DB.model.AmmunitionModel template, int count) { + super(createIcon(template)); + this.name = template.getName(); + this.count = count; + } + + @Override + public int count() { + return count; + } + + private static Icon createIcon(DB.model.AmmunitionModel template) { + var icons = template.getIcon().split(","); + return ContextHolder.INSTANCE.getContext().createIcon(A.iconsets.get(icons[0]).uid, Integer.parseInt(icons[1]), Integer.parseInt(icons[2])); + } +}