added stackable functionality to items and improved inventory management

This commit is contained in:
2025-12-13 12:13:01 +01:00
parent b380e218f6
commit 97da3982d1
9 changed files with 99 additions and 26 deletions

View File

@@ -5,6 +5,7 @@ import de.miaurizius.jgame2d.core.enums.Direction;
import de.miaurizius.jgame2d.core.enums.EntityType;
import de.miaurizius.jgame2d.core.enums.GameState;
import de.miaurizius.jgame2d.core.handlers.KeyHandler;
import de.miaurizius.jgame2d.entity.item.KeyObj;
import de.miaurizius.jgame2d.entity.item.ShieldWoodObj;
import de.miaurizius.jgame2d.entity.item.SwordNormalObj;
import de.miaurizius.jgame2d.entity.projectile.FireballObj;
@@ -150,11 +151,10 @@ public class Player extends Entity {
}
// INVENTORY ITEMS
else {
if(inventory.size() == maxInvSize) {
if(!canObtainItem(panel.obj[panel.currentMap.getIndex()][index])) {
panel.ui.addMessage("Your inventory is full!");
return;
}
inventory.add(panel.obj[panel.currentMap.getIndex()][index]);
panel.playSE(1);
panel.ui.addMessage("Picked up " + panel.obj[panel.currentMap.getIndex()][index].name + "!");
}
@@ -289,9 +289,9 @@ public class Player extends Entity {
currentShield = selectedItem;
getDefense();
}
if(selectedItem.consumable) {
selectedItem.use(this);
}
if(selectedItem.consumable)
if(selectedItem.use(this))
if(selectedItem.amt > 1) selectedItem.amt--; else inventory.remove(selectedItem);
}
public void setDefaultPositions() {
worldX = panel.tileSize * 23;
@@ -320,7 +320,7 @@ public class Player extends Entity {
dexterity = 1;
exp = 0;
nextLevelExp = 5;
coins = 0;
coins = 500;
currentWeapon = new SwordNormalObj(panel);
currentShield = new ShieldWoodObj(panel);
projectile = new FireballObj(panel);
@@ -331,6 +331,7 @@ public class Player extends Entity {
inventory.clear();
inventory.add(currentWeapon);
inventory.add(currentShield);
inventory.add(new KeyObj(panel));
}
public int getAttack() {
attackArea = currentWeapon.attackArea;
@@ -373,5 +374,29 @@ public class Player extends Entity {
break;
}
}
public int searchItemInInventory(String itemName) {
for(int i = 0; i < inventory.size(); i++) {
if(inventory.get(i).name.equals(itemName)) {
return i;
}
}
return 999;
}
public boolean canObtainItem(Entity item) {
int i = searchItemInInventory(item.name);
if(item.stackable) {
if(i != 999) {
inventory.get(i).amt++;
return true;
} else if(inventory.size() != maxInvSize) {
inventory.add(item);
return true;
}
} else if(inventory.size() != maxInvSize) {
inventory.add(item);
return true;
}
return false;
}
}