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)
|
||||
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)
|
||||
self.setWindowTitle("Select Accessories - Entropia Nexus")
|
||||
self.setMinimumSize(900, 600)
|
||||
|
|
@ -56,6 +56,8 @@ class AccessoriesSelectorDialog(QDialog):
|
|||
self.selected_clothing: Optional[NexusClothing] = None
|
||||
self.selected_pet: Optional[NexusPet] = None
|
||||
|
||||
self.slot_filter = slot_filter # "Left Finger" or "Right Finger" or None
|
||||
|
||||
self._setup_ui()
|
||||
|
||||
# Set initial tab
|
||||
|
|
@ -302,7 +304,12 @@ class AccessoriesSelectorDialog(QDialog):
|
|||
tree.addTopLevelItem(item)
|
||||
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.setText(0, ring.name)
|
||||
# Format effects as string
|
||||
|
|
|
|||
|
|
@ -986,6 +986,8 @@ class LoadoutManagerDialog(QDialog):
|
|||
self.current_weapon: Optional[WeaponStats] = None
|
||||
self.current_armor_set: Optional[ArmorSet] = None
|
||||
self.equipped_armor: Optional[EquippedArmor] = None
|
||||
self.current_left_ring: Optional[NexusRing] = None
|
||||
self.current_right_ring: Optional[NexusRing] = None
|
||||
|
||||
# Armor slot widgets
|
||||
self.slot_widgets: Dict[ArmorSlot, ArmorSlotWidget] = {}
|
||||
|
|
@ -1369,19 +1371,53 @@ class LoadoutManagerDialog(QDialog):
|
|||
heal_layout.addRow("Heal amount:", self.heal_amount_edit)
|
||||
right_layout.addWidget(self.heal_group)
|
||||
|
||||
# Accessories section (NEW)
|
||||
self.accessories_group = DarkGroupBox("💍 Accessories (Rings, Clothing, Pets)")
|
||||
# Accessories section (Rings, Clothing, Pets)
|
||||
self.accessories_group = DarkGroupBox("💍 Accessories")
|
||||
accessories_layout = QVBoxLayout(self.accessories_group)
|
||||
|
||||
self.select_accessories_btn = QPushButton("🔍 Search Accessories from Nexus")
|
||||
self.select_accessories_btn.setObjectName("selectButton")
|
||||
self.select_accessories_btn.clicked.connect(self._on_select_accessories)
|
||||
accessories_layout.addWidget(self.select_accessories_btn)
|
||||
# Rings - Left and Right
|
||||
rings_layout = QHBoxLayout()
|
||||
|
||||
# Display selected accessories
|
||||
self.accessories_summary = QLabel("No accessories selected")
|
||||
self.accessories_summary.setStyleSheet("color: #888888; padding: 5px;")
|
||||
accessories_layout.addWidget(self.accessories_summary)
|
||||
left_ring_layout = QVBoxLayout()
|
||||
left_ring_layout.addWidget(QLabel("Left Ring:"))
|
||||
self.left_ring_label = QLabel("None")
|
||||
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)
|
||||
|
||||
|
|
@ -1609,25 +1645,58 @@ class LoadoutManagerDialog(QDialog):
|
|||
f"Break Chance: {enhancer.break_chance * 100:.1f}%"
|
||||
)
|
||||
|
||||
def _on_select_accessories(self):
|
||||
"""Open accessories selector dialog (rings, clothing, pets)."""
|
||||
def _on_select_left_ring(self):
|
||||
"""Open ring selector for left finger."""
|
||||
from ui.accessories_selector import AccessoriesSelectorDialog
|
||||
dialog = AccessoriesSelectorDialog(self)
|
||||
dialog.ring_selected.connect(self._on_ring_selected)
|
||||
dialog = AccessoriesSelectorDialog(self, slot_filter="Left Finger")
|
||||
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.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.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):
|
||||
"""Handle ring selection."""
|
||||
effects_str = ", ".join([f"{k}: {v}" for k, v in ring.effects.items()]) if ring.effects else "No effects"
|
||||
QMessageBox.information(
|
||||
self,
|
||||
"Ring Selected",
|
||||
f"Selected: {ring.name}\n"
|
||||
f"Effects: {effects_str}\n"
|
||||
f"Slot: {ring.slot}"
|
||||
)
|
||||
"""Handle ring selection - legacy, routes to appropriate slot."""
|
||||
if ring.slot == "Left Finger":
|
||||
self._on_left_ring_selected(ring)
|
||||
else:
|
||||
self._on_right_ring_selected(ring)
|
||||
|
||||
def _on_clothing_selected(self, clothing: NexusClothing):
|
||||
"""Handle clothing selection."""
|
||||
|
|
|
|||
Loading…
Reference in New Issue