Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Inventory - Czyli zawartość plecaka w grze RPG

Ostatnio zmodyfikowano 2024-08-15 17:08
Autor Wiadomość
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.

C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) {
   
   
// TO-DO
   
   
if( activePanel == activeInventoryPanel::Left ) {
       
// ACTIVE PANEL 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; // jak obliczyc cursor ?
           
       
}
       
else if( cursor % itemsInRow == itemsInRow - 1 ) {
           
activePanel = activeInventoryPanel::Right;
           
cursor = cursor / itemsInRow * itemsInRow; // jak obliczyc cursor ?
           
       
}
       
else {
           
cursor += 1;
       
}
       
    }
   
else {
       
// ACTIVE PANEL RIGHT
       
if( cursor % itemsInRow != itemsInRow - 1 ) {
           
if( cursor + 1 + inventoryRight->scroll * itemsInRow < inventoryRight->inventory->items.size() )
               
 cursor += 1;
           
       
}
    }
   
}
P-181415
pekfos
» 2024-08-05 21:20:08
A czemu nie tak samo jak w poprzednim przypadku?
P-181416
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.

noEzGIF
noEzGIF
P-181417
pekfos
» 2024-08-05 23:18:04
C/C++
cursor = 0;
?
P-181419
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
P-181421
pekfos
» 2024-08-05 23:41:51
Czyli tak samo jak w poprzednim przypadku, plus
C/C++
cursor -= cursor % itemsInRow;
?
P-181422
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:
C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) || sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) {
   
   
if( activePanel == activeInventoryPanel::Left ) {
       
// ACTIVE PANEL 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 {
       
// ACTIVE PANEL RIGHT
       
if( cursor % itemsInRow != itemsInRow - 1 ) {
           
if( cursor + 1 + inventoryRight->scroll * itemsInRow < inventoryRight->inventory->items.size() )
               
 cursor += 1;
           
       
}
    }
   
}
P-181423
tBane
Temat założony przez niniejszego użytkownika
» 2024-08-07 16:29:38
Sortowanie elementów według listy items

C/C++
// SORT THE ITEMS
std::vector < Item * > sortedItems;
std::vector < int > sortedItemsCounts;

sortedItems.clear();
sortedItemsCounts.clear();

for( auto & item: items ) {
   
// create sorted items list
   
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++ ) {
   
// adding items to sorted items list
   
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++ ) {
   
// delete items who count is zero
   
if( sortedItemsCounts[ i ] > 0 ) {
       
s.push_back( sortedItems[ i ] );
       
c.push_back( sortedItemsCounts[ i ] );
   
}
}

sortedItems = s;
sortedItemsCounts = c;
P-181424
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona