Inventory - Czyli zawartość plecaka w grze RPG
Ostatnio zmodyfikowano 2024-08-15 17:08
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 20:31:27 Jednak z lewym na prawy też mam problem. Wcześniej miałem prawy inventory wypełniony itemami i nie zauważyłem błędu. if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { if( activePanel == activeInventoryPanel::Left ) { if( inventoryLeft->inventory->items.size() == 0 ) { activePanel = activeInventoryPanel::Right; cursor = 0; } else if( cursor + inventoryLeft->scroll * itemsInRow >= inventoryLeft->inventory->items.size() - 1 ) { activePanel = activeInventoryPanel::Right; cursor = cursor / itemsInRow * itemsInRow; } else if( cursor % itemsInRow == itemsInRow - 1 ) { activePanel = activeInventoryPanel::Right; cursor = cursor / itemsInRow * itemsInRow; } else { cursor += 1; } } else { if( cursor % itemsInRow != itemsInRow - 1 ) { if( cursor + 1 + inventoryRight->scroll * itemsInRow < inventoryRight->inventory->items.size() ) cursor += 1; } } }
|
|
pekfos |
» 2024-08-05 21:20:08 A czemu nie tak samo jak w poprzednim przypadku? |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 21:30:10 Ponieważ przechodząc z lewego inventory do prawego, powinno zaznaczyć pierwszy item z prawej strony a nie ostatni .. Nie potrafię tego opisać kodem. Tu powinno zaznaczać zioło. |
|
pekfos |
» 2024-08-05 23:18:04 |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-05 23:27:54 Cursor = 0 w tym akurat wypadku. Chodzi o to by cursor był zawsze wielokrotnością itemsInRow. Czyli żeby był po lewej stronie prawego inventory w taki sposób, by wskazywał item |
|
pekfos |
» 2024-08-05 23:41:51 Czyli tak samo jak w poprzednim przypadku, plus cursor -= cursor % itemsInRow;
? |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-06 00:11:02 Właśnie o coś takiego mi chodziło. Teraz wszystko działa jak należy. Kod: if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { if( activePanel == activeInventoryPanel::Left ) { if( inventoryLeft->inventory->items.size() == 0 ) { activePanel = activeInventoryPanel::Right; cursor = 0; } else if(( cursor + inventoryLeft->scroll * itemsInRow >= inventoryLeft->inventory->items.size() - 1 ) || cursor % itemsInRow == itemsInRow - 1 ) { activePanel = activeInventoryPanel::Right; int diff = cursor + inventoryRight->scroll * itemsInRow -( inventoryRight->inventory->items.size() - 1 ); if( diff > 0 ) cursor -= diff; cursor -= cursor % itemsInRow; } else { cursor += 1; } } else { if( cursor % itemsInRow != itemsInRow - 1 ) { if( cursor + 1 + inventoryRight->scroll * itemsInRow < inventoryRight->inventory->items.size() ) cursor += 1; } } }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-07 16:29:38 Sortowanie elementów według listy itemsstd::vector < Item * > sortedItems; std::vector < int > sortedItemsCounts;
sortedItems.clear(); sortedItemsCounts.clear();
for( auto & item: items ) { sortedItems.push_back( item ); sortedItemsCounts.push_back( 0 ); }
for( int i = 0; i < inventory->items.size(); i++ ) for( int j = 0; j < sortedItems.size(); j++ ) { if( inventory->items[ i ] == sortedItems[ j ] ) sortedItemsCounts[ j ] += inventory->counts[ i ]; }
std::vector < Item * > s; std::vector < int > c;
s.clear(); c.clear();
for( int i = 0; i < sortedItems.size(); i++ ) { if( sortedItemsCounts[ i ] > 0 ) { s.push_back( sortedItems[ i ] ); c.push_back( sortedItemsCounts[ i ] ); } }
sortedItems = s; sortedItemsCounts = c;
|
|
1 2 « 3 » 4 |