I have a new question for you all now related to the same project. Is it bad to do the following?
Code:
if(resman->Get_Item(2) != NULL && !player->AquireItem(*resman->Get_Item(2))) //true on item was placed successfuly false on fail.
{
allegro_message("Aquire Item Failed");
}
For some reason when I run this chunk of code - even without error checking the whole program freezes up.
Code:
bool Character::AquireItem(PAS_Item item) //Places an item in the inventory
{
for(int x = 0;x < 16;x++)
{
for(int y = 0;y < 7;y++)
{
switch(item.GetSize())
{
case 1:
if(inventory[x][y].GetID() == 0){inventory[x][y] = item;return true;}
case 2:
if(x != 15 && //checking for side of inventory to not go over the array bounds while checking for bad placements.
inventory[x][y].GetID() == 0 &&
inventory[x+1][y].GetID() == 0)
{
inventory[x][y] = item;
inventory[x+1][y].SetID(-1);
return true;
}
case 3:
if(y != 5 && y != 6 &&
inventory[x][y].GetID() == 0 &&
inventory[x][y+1].GetID() == 0 &&
inventory[x][y+2].GetID() == 0)
{
inventory[x][y] = item;
inventory[x][y+1].SetID(-1);
inventory[x][y+2].SetID(-1);
return true;
}
case 4:
if(x != 15 && y != 6 &&
inventory[x][y].GetID() == 0 &&
inventory[x][y+1].GetID() == 0 &&
inventory[x+1][y+1].GetID() == 0 &&
inventory[x+1][y].GetID() == 0)
{
inventory[x][y] = item;
inventory[x+1][y+1].SetID(-1);
inventory[x][y+1].SetID(-1);
inventory[x+1][y].SetID(-1);
return true;
}
case 6:
if(x != 15 && y != 5 && y != 6 &&
inventory[x][y].GetID() == 0 &&
inventory[x][y+1].GetID() == 0 &&
inventory[x+1][y+1].GetID() == 0 &&
inventory[x][y+2].GetID() == 0 &&
inventory[x+1][y+2].GetID() == 0 &&
inventory[x+1][y].GetID() == 0)
{
inventory[x][y] = item;
inventory[x][y+1].SetID(-1);
inventory[x+1][y].SetID(-1);
inventory[x+1][y+1].SetID(-1);
inventory[x+1][y+2].SetID(-1);
inventory[x][y+2].SetID(-1);
return true;
}
default:
return false;
}
}
}
return false;
}
Code:
PAS_Item* resource_manager::Get_Item(int which)
{
if(which >= 0 && which < Num_Item)return Item_List[which];
else return NULL;
}