Add support for enemies' loot
This commit is contained in:
@@ -55,8 +55,8 @@ public class EquipmentWindow extends DecoratedWindow {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(WindowManager manager) {
|
||||
super.onOpen(manager);
|
||||
public void onOpen(WindowManager manager, Object... args) {
|
||||
super.onOpen(manager, args);
|
||||
|
||||
cancelBtn.setAction(manager::close);
|
||||
eqGrid.setOnSelect(this::updateItemDetails);
|
||||
@@ -72,14 +72,14 @@ public class EquipmentWindow extends DecoratedWindow {
|
||||
for (var child : eqGrid.getChildren()) {
|
||||
var slot = (ItemIconView) child;
|
||||
slot.setItem(player.getEquipmentItem(i++));
|
||||
slot.setAction(handleItem(slot));
|
||||
slot.setAction(handleClick(slot));
|
||||
}
|
||||
|
||||
weapon.setItem(player.getWeapon());
|
||||
ammo.setItem(player.getAmmunition());
|
||||
}
|
||||
|
||||
private Consumer<Item> handleItem(ItemIconView slot) {
|
||||
private Consumer<Item> handleClick(ItemIconView slot) {
|
||||
return item -> {
|
||||
useBtn.setText(getButtonTitle(item));
|
||||
eqItemMenu.select(0);
|
||||
|
||||
83
src/main/java/com/bartlomiejpluta/demo/gui/LootWindow.java
Normal file
83
src/main/java/com/bartlomiejpluta/demo/gui/LootWindow.java
Normal file
@@ -0,0 +1,83 @@
|
||||
package com.bartlomiejpluta.demo.gui;
|
||||
|
||||
import com.bartlomiejpluta.base.api.context.Context;
|
||||
import com.bartlomiejpluta.base.api.gui.*;
|
||||
import com.bartlomiejpluta.base.lib.gui.VGridOptionChoice;
|
||||
import com.bartlomiejpluta.demo.entity.Enemy;
|
||||
import com.bartlomiejpluta.demo.entity.Player;
|
||||
import com.bartlomiejpluta.demo.runner.DemoRunner;
|
||||
import com.bartlomiejpluta.demo.world.item.Item;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class LootWindow extends DecoratedWindow implements Inflatable {
|
||||
private final Player player;
|
||||
|
||||
@Ref("loot")
|
||||
private VGridOptionChoice lootMenu;
|
||||
|
||||
private Item[] loot;
|
||||
|
||||
private ItemIconView[] slots = new ItemIconView[Enemy.MAX_LOOT];
|
||||
|
||||
public LootWindow(Context context, GUI gui, Map<String, Component> refs) {
|
||||
super(context, gui, refs);
|
||||
this.player = ((DemoRunner) context.getGameRunner()).getPlayer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInflate() {
|
||||
for (int i = 0; i < Enemy.MAX_LOOT; ++i) {
|
||||
var itemView = new ItemIconView(context, gui, Map.of());
|
||||
itemView.setMargin(5f);
|
||||
lootMenu.add(itemView);
|
||||
slots[i] = itemView;
|
||||
itemView.setAction(this::handleClick);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(WindowManager manager, Object[] args) {
|
||||
super.onOpen(manager, args);
|
||||
|
||||
var creature = (Enemy) args[0];
|
||||
this.loot = creature.getLoot();
|
||||
updateSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(WindowManager manager) {
|
||||
super.onClose(manager);
|
||||
|
||||
clearSlots();
|
||||
this.loot = null;
|
||||
}
|
||||
|
||||
private void handleClick(Item item) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.pushItemToEquipment(item)) {
|
||||
for (int i = 0; i < Enemy.MAX_LOOT; i++) {
|
||||
if (loot[i] == item) {
|
||||
loot[i] = null;
|
||||
slots[i].setItem(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSlots() {
|
||||
for (int i = 0; i < Enemy.MAX_LOOT; ++i) {
|
||||
slots[i].setItem(loot[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private void clearSlots() {
|
||||
for (var slot : slots) {
|
||||
slot.setItem(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user