feat(ui): add separate Left/Right ring slots in loadout manager
- Split accessories section into Left Ring and Right Ring selectors - Added Clothing and Pet buttons - Updated AccessoriesSelectorDialog to accept slot_filter parameter - Filter rings by Left Finger/Right Finger slot when selecting - Store current_left_ring and current_right_ring in loadout - Display ring effects (multi-effect support) in the UI Ring effects like 'Decreased Critical Damage Taken 4%, Increased Dodge Chance 4%' are now properly displayed.
This commit is contained in:
parent
1db965f92a
commit
2183b79ce8
|
|
@ -43,7 +43,7 @@ class AccessoriesSelectorDialog(QDialog):
|
||||||
clothing_selected = pyqtSignal(NexusClothing)
|
clothing_selected = pyqtSignal(NexusClothing)
|
||||||
pet_selected = pyqtSignal(NexusPet)
|
pet_selected = pyqtSignal(NexusPet)
|
||||||
|
|
||||||
def __init__(self, parent=None, initial_tab: str = "rings"):
|
def __init__(self, parent=None, initial_tab: str = "rings", slot_filter: str = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.setWindowTitle("Select Accessories - Entropia Nexus")
|
self.setWindowTitle("Select Accessories - Entropia Nexus")
|
||||||
self.setMinimumSize(900, 600)
|
self.setMinimumSize(900, 600)
|
||||||
|
|
@ -56,6 +56,8 @@ class AccessoriesSelectorDialog(QDialog):
|
||||||
self.selected_clothing: Optional[NexusClothing] = None
|
self.selected_clothing: Optional[NexusClothing] = None
|
||||||
self.selected_pet: Optional[NexusPet] = None
|
self.selected_pet: Optional[NexusPet] = None
|
||||||
|
|
||||||
|
self.slot_filter = slot_filter # "Left Finger" or "Right Finger" or None
|
||||||
|
|
||||||
self._setup_ui()
|
self._setup_ui()
|
||||||
|
|
||||||
# Set initial tab
|
# Set initial tab
|
||||||
|
|
@ -302,7 +304,12 @@ class AccessoriesSelectorDialog(QDialog):
|
||||||
tree.addTopLevelItem(item)
|
tree.addTopLevelItem(item)
|
||||||
return
|
return
|
||||||
|
|
||||||
for ring in self.all_rings:
|
# Filter rings by slot if specified
|
||||||
|
rings_to_show = self.all_rings
|
||||||
|
if self.slot_filter:
|
||||||
|
rings_to_show = [r for r in rings_to_show if r.slot == self.slot_filter]
|
||||||
|
|
||||||
|
for ring in rings_to_show:
|
||||||
item = QTreeWidgetItem()
|
item = QTreeWidgetItem()
|
||||||
item.setText(0, ring.name)
|
item.setText(0, ring.name)
|
||||||
# Format effects as string
|
# Format effects as string
|
||||||
|
|
|
||||||
|
|
@ -986,6 +986,8 @@ class LoadoutManagerDialog(QDialog):
|
||||||
self.current_weapon: Optional[WeaponStats] = None
|
self.current_weapon: Optional[WeaponStats] = None
|
||||||
self.current_armor_set: Optional[ArmorSet] = None
|
self.current_armor_set: Optional[ArmorSet] = None
|
||||||
self.equipped_armor: Optional[EquippedArmor] = None
|
self.equipped_armor: Optional[EquippedArmor] = None
|
||||||
|
self.current_left_ring: Optional[NexusRing] = None
|
||||||
|
self.current_right_ring: Optional[NexusRing] = None
|
||||||
|
|
||||||
# Armor slot widgets
|
# Armor slot widgets
|
||||||
self.slot_widgets: Dict[ArmorSlot, ArmorSlotWidget] = {}
|
self.slot_widgets: Dict[ArmorSlot, ArmorSlotWidget] = {}
|
||||||
|
|
@ -1369,19 +1371,53 @@ class LoadoutManagerDialog(QDialog):
|
||||||
heal_layout.addRow("Heal amount:", self.heal_amount_edit)
|
heal_layout.addRow("Heal amount:", self.heal_amount_edit)
|
||||||
right_layout.addWidget(self.heal_group)
|
right_layout.addWidget(self.heal_group)
|
||||||
|
|
||||||
# Accessories section (NEW)
|
# Accessories section (Rings, Clothing, Pets)
|
||||||
self.accessories_group = DarkGroupBox("💍 Accessories (Rings, Clothing, Pets)")
|
self.accessories_group = DarkGroupBox("💍 Accessories")
|
||||||
accessories_layout = QVBoxLayout(self.accessories_group)
|
accessories_layout = QVBoxLayout(self.accessories_group)
|
||||||
|
|
||||||
self.select_accessories_btn = QPushButton("🔍 Search Accessories from Nexus")
|
# Rings - Left and Right
|
||||||
self.select_accessories_btn.setObjectName("selectButton")
|
rings_layout = QHBoxLayout()
|
||||||
self.select_accessories_btn.clicked.connect(self._on_select_accessories)
|
|
||||||
accessories_layout.addWidget(self.select_accessories_btn)
|
|
||||||
|
|
||||||
# Display selected accessories
|
left_ring_layout = QVBoxLayout()
|
||||||
self.accessories_summary = QLabel("No accessories selected")
|
left_ring_layout.addWidget(QLabel("Left Ring:"))
|
||||||
self.accessories_summary.setStyleSheet("color: #888888; padding: 5px;")
|
self.left_ring_label = QLabel("None")
|
||||||
accessories_layout.addWidget(self.accessories_summary)
|
self.left_ring_label.setStyleSheet("color: #888888;")
|
||||||
|
left_ring_layout.addWidget(self.left_ring_label)
|
||||||
|
self.select_left_ring_btn = QPushButton("🔍 Select")
|
||||||
|
self.select_left_ring_btn.setObjectName("selectButton")
|
||||||
|
self.select_left_ring_btn.clicked.connect(self._on_select_left_ring)
|
||||||
|
left_ring_layout.addWidget(self.select_left_ring_btn)
|
||||||
|
rings_layout.addLayout(left_ring_layout)
|
||||||
|
|
||||||
|
right_ring_layout = QVBoxLayout()
|
||||||
|
right_ring_layout.addWidget(QLabel("Right Ring:"))
|
||||||
|
self.right_ring_label = QLabel("None")
|
||||||
|
self.right_ring_label.setStyleSheet("color: #888888;")
|
||||||
|
right_ring_layout.addWidget(self.right_ring_label)
|
||||||
|
self.select_right_ring_btn = QPushButton("🔍 Select")
|
||||||
|
self.select_right_ring_btn.setObjectName("selectButton")
|
||||||
|
self.select_right_ring_btn.clicked.connect(self._on_select_right_ring)
|
||||||
|
right_ring_layout.addWidget(self.select_right_ring_btn)
|
||||||
|
rings_layout.addLayout(right_ring_layout)
|
||||||
|
|
||||||
|
accessories_layout.addLayout(rings_layout)
|
||||||
|
|
||||||
|
# Clothing and Pets
|
||||||
|
other_accessories_layout = QHBoxLayout()
|
||||||
|
|
||||||
|
self.select_clothing_btn = QPushButton("👕 Clothing")
|
||||||
|
self.select_clothing_btn.setObjectName("selectButton")
|
||||||
|
self.select_clothing_btn.clicked.connect(self._on_select_clothing)
|
||||||
|
other_accessories_layout.addWidget(self.select_clothing_btn)
|
||||||
|
|
||||||
|
self.select_pet_btn = QPushButton("🐾 Pet")
|
||||||
|
self.select_pet_btn.setObjectName("selectButton")
|
||||||
|
self.select_pet_btn.clicked.connect(self._on_select_pet)
|
||||||
|
other_accessories_layout.addWidget(self.select_pet_btn)
|
||||||
|
|
||||||
|
accessories_layout.addLayout(other_accessories_layout)
|
||||||
|
|
||||||
|
right_layout.addWidget(self.accessories_group)
|
||||||
|
|
||||||
right_layout.addWidget(self.accessories_group)
|
right_layout.addWidget(self.accessories_group)
|
||||||
|
|
||||||
|
|
@ -1609,25 +1645,58 @@ class LoadoutManagerDialog(QDialog):
|
||||||
f"Break Chance: {enhancer.break_chance * 100:.1f}%"
|
f"Break Chance: {enhancer.break_chance * 100:.1f}%"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _on_select_accessories(self):
|
def _on_select_left_ring(self):
|
||||||
"""Open accessories selector dialog (rings, clothing, pets)."""
|
"""Open ring selector for left finger."""
|
||||||
from ui.accessories_selector import AccessoriesSelectorDialog
|
from ui.accessories_selector import AccessoriesSelectorDialog
|
||||||
dialog = AccessoriesSelectorDialog(self)
|
dialog = AccessoriesSelectorDialog(self, slot_filter="Left Finger")
|
||||||
dialog.ring_selected.connect(self._on_ring_selected)
|
dialog.ring_selected.connect(self._on_left_ring_selected)
|
||||||
|
dialog.exec()
|
||||||
|
|
||||||
|
def _on_select_right_ring(self):
|
||||||
|
"""Open ring selector for right finger."""
|
||||||
|
from ui.accessories_selector import AccessoriesSelectorDialog
|
||||||
|
dialog = AccessoriesSelectorDialog(self, slot_filter="Right Finger")
|
||||||
|
dialog.ring_selected.connect(self._on_right_ring_selected)
|
||||||
|
dialog.exec()
|
||||||
|
|
||||||
|
def _on_left_ring_selected(self, ring: NexusRing):
|
||||||
|
"""Handle left ring selection."""
|
||||||
|
self.current_left_ring = ring
|
||||||
|
effects_str = ", ".join([f"{k}: {v}" for k, v in ring.effects.items()]) if ring.effects else "No effects"
|
||||||
|
self.left_ring_label.setText(f"{ring.name}\n{effects_str}")
|
||||||
|
self.left_ring_label.setStyleSheet("color: #4caf50;")
|
||||||
|
|
||||||
|
def _on_right_ring_selected(self, ring: NexusRing):
|
||||||
|
"""Handle right ring selection."""
|
||||||
|
self.current_right_ring = ring
|
||||||
|
effects_str = ", ".join([f"{k}: {v}" for k, v in ring.effects.items()]) if ring.effects else "No effects"
|
||||||
|
self.right_ring_label.setText(f"{ring.name}\n{effects_str}")
|
||||||
|
self.right_ring_label.setStyleSheet("color: #4caf50;")
|
||||||
|
|
||||||
|
def _on_select_clothing(self):
|
||||||
|
"""Open clothing selector."""
|
||||||
|
from ui.accessories_selector import AccessoriesSelectorDialog
|
||||||
|
dialog = AccessoriesSelectorDialog(self, initial_tab="clothing")
|
||||||
dialog.clothing_selected.connect(self._on_clothing_selected)
|
dialog.clothing_selected.connect(self._on_clothing_selected)
|
||||||
|
dialog.exec()
|
||||||
|
|
||||||
|
def _on_select_pet(self):
|
||||||
|
"""Open pet selector."""
|
||||||
|
from ui.accessories_selector import AccessoriesSelectorDialog
|
||||||
|
dialog = AccessoriesSelectorDialog(self, initial_tab="pets")
|
||||||
dialog.pet_selected.connect(self._on_pet_selected)
|
dialog.pet_selected.connect(self._on_pet_selected)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
|
def _on_select_accessories(self):
|
||||||
|
"""Open accessories selector dialog (rings, clothing, pets) - legacy."""
|
||||||
|
self._on_select_left_ring()
|
||||||
|
|
||||||
def _on_ring_selected(self, ring: NexusRing):
|
def _on_ring_selected(self, ring: NexusRing):
|
||||||
"""Handle ring selection."""
|
"""Handle ring selection - legacy, routes to appropriate slot."""
|
||||||
effects_str = ", ".join([f"{k}: {v}" for k, v in ring.effects.items()]) if ring.effects else "No effects"
|
if ring.slot == "Left Finger":
|
||||||
QMessageBox.information(
|
self._on_left_ring_selected(ring)
|
||||||
self,
|
else:
|
||||||
"Ring Selected",
|
self._on_right_ring_selected(ring)
|
||||||
f"Selected: {ring.name}\n"
|
|
||||||
f"Effects: {effects_str}\n"
|
|
||||||
f"Slot: {ring.slot}"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _on_clothing_selected(self, clothing: NexusClothing):
|
def _on_clothing_selected(self, clothing: NexusClothing):
|
||||||
"""Handle clothing selection."""
|
"""Handle clothing selection."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue