string Inventory::getInventoryString() { stringstream result; result << "{"; vector<Entity*> inventoryItems = getVectorItems(); for (vector<Entity*>::iterator i = inventoryItems.begin(); i != inventoryItems.end(); i++) { Entity* theItem = *i; InventoryItem* theInventoryItem = theItem->getInventoryItem(); if (theInventoryItem->getType() == "INVENTORYFOOD") { result << "F"; result << theInventoryItem->getItem()->getID() << ":"; result << theInventoryItem->getCurrentStackCount() << ":"; result << ((InventoryFood*)theInventoryItem)->getFoodState(); } else if (theInventoryItem->getType() == "INVENTORYEQUIPMENT") { result << "E"; result << theInventoryItem->getItem()->getID() << ":"; result << theInventoryItem->getCurrentStackCount() << ":"; result << ((InventoryEquipment*)theInventoryItem)->getSmithingMaterial()->getID(); } else if (theInventoryItem->getType() == "INVENTORYBOOST") { result << "B"; result << theInventoryItem->getItem()->getID() << ":"; result << theInventoryItem->getCurrentStackCount() << ":"; } else { result << theInventoryItem->getItem()->getID() << ":"; result << theInventoryItem->getCurrentStackCount() << ":"; } result << ","; } result << "}"; return result.str(); }
std::string Inventory::getReloadText() { std::ostringstream oss; oss << "-- Player's inventory" << std::endl; oss << "-- Items in Backpack" << std::endl; for( size_t backpackNr=0; backpackNr<backpackItems.size(); ++backpackNr ) { InventoryItem* curBackpackItem = backpackItems[ backpackNr ]; Item* curItem = curBackpackItem->getItem(); oss << "DawnInterface.restoreItemInBackpack( itemDatabase[\"" << curItem->getID() << "\"], " << curBackpackItem->getInventoryPosX() << ", " << curBackpackItem->getInventoryPosY() << ", " << curBackpackItem->getCurrentStackSize() << " );" << std::endl; } oss << "-- equipped Items" << std::endl; size_t numEquippable = static_cast<size_t>( ItemSlot::COUNT ); for( size_t curEquippable=0; curEquippable<numEquippable; ++curEquippable ) { if( equippedItems[ curEquippable ] != NULL ) { Item* curItem = equippedItems[ curEquippable ]->getItem(); /* if the item is two-handed and we're inspecting the off-hand slot don't output it. */ if( !( curItem->isTwoHandedWeapon() == true && curEquippable == static_cast<size_t>( ItemSlot::OFF_HAND ) ) ) { oss << "DawnInterface.restoreWieldItem( " << curEquippable << ", " << "itemDatabase[\"" << curItem->getID() << "\"] " << ");" << std::endl; } } } return oss.str(); }
InventoryItem* Inventory::getItemAt( size_t invPosX, size_t invPosY ) { assert( !isPositionFree( invPosX, invPosY ) ); size_t numBackItems = backpackItems.size(); for( size_t curBackItemNr=0; curBackItemNr<numBackItems; ++curBackItemNr ) { InventoryItem* curItem = backpackItems[ curBackItemNr ]; size_t itemPosX = curItem->getInventoryPosX(); size_t itemPosY = curItem->getInventoryPosY(); size_t itemSizeX = curItem->getItem()->getSizeX(); size_t itemSizeY = curItem->getItem()->getSizeY(); if( itemPosX <= invPosX && itemPosX + itemSizeX > invPosX && itemPosY <= invPosY && itemPosY + itemSizeY > invPosY ) { return curItem; } } // should have found an item so should never reach here abort(); }
void Player::update(float frameTime, LevelController* lc) { // 1-Press NoClip if (noClipButtonReleased && input->isKeyDown(VK_F2)) { noClip = !noClip; noClipButtonReleased = false; } else { noClipButtonReleased = true; } velocityX = getVelocity().x; velocityY = getVelocity().y; // Handle NoClip if (noClip) { if (input->isKeyDown(PLAYER_RIGHT)) { velocityX = playerNS::NOCLIP_SPEED * frameTime; orientation = Right; } else if (input->isKeyDown(PLAYER_LEFT)) { velocityX = -playerNS::NOCLIP_SPEED * frameTime; orientation = Left; } else { velocityX = 0; } if (input->isKeyDown(PLAYER_UP)) { velocityY = -playerNS::NOCLIP_SPEED * frameTime; orientation = Up; } else if (input->isKeyDown(PLAYER_DOWN)) { velocityY = playerNS::NOCLIP_SPEED * frameTime; orientation = Down; } else { velocityY = 0; } velocity = VECTOR2(velocityX, velocityY); frameDelay = 1000000; Item* activeItem = inventory->getActiveItem()->getItem(); if (inventory->getActiveItem()->getItem()->getItemType() == Item::Equipable) { Gun* gun = dynamic_cast<Gun*>(activeItem); if (gun != 0) { gun->update(frameTime, orientation, getX(), getY(), input, lc); } } Entity::update(frameTime); return; } // Set Obj Vars levelController = lc; // Debug Messages OSD::instance()->addLine("Jump Distance: " + std::to_string(jumpdistance) + " / " + std::to_string(playerNS::JUMP_HEIGHT)); OSD::instance()->addLine("Can | Left: " + std::to_string(canMoveLeft(true)) + " | Right: " + std::to_string(canMoveRight(true)) + " | Up: " + std::to_string(canMoveUp(true)) + " | Down: " + std::to_string(canMoveDown(true))); // Stuck Hotfix if (!canMoveLeft() && !canMoveRight() && !canMoveUp() && !canMoveDown()) { setX(spawnPos.x); setY(spawnPos.y); } // Update Guns inventory->update(frameTime, input); // Boss Audio if (lc->getMapX() * -1.0 > 1900) { audio->stopCue(BK_MUSIC); audio->playCue(BOSS_MUSIC); } // Start of Player Movement if (healthStatus != Dead) { if (!canMoveDown()) { if (!input->isKeyDown(PLAYER_UP) && !input->isKeyDown(PLAYER_JUMP)) canJump = true; canFall = false; falling = false; } else { canFall = true; falling = true; } // Move Left and Right if (input->isKeyDown(PLAYER_RIGHT) && canMoveRight()) { velocityX = playerNS::SPEED * frameTime; while (!canMoveRight()) { spriteData.x -= 0.1; velocityX = 0; } orientation = Right; } else if (input->isKeyDown(PLAYER_LEFT) && canMoveLeft()) { velocityX = -playerNS::SPEED * frameTime; while (!canMoveLeft()) { spriteData.x += 0.1; velocityX = 0; } orientation = Left; } else { velocityX = 0; if (input->isKeyDown(PLAYER_UP)) { orientation = Up; } if (input->isKeyDown(PLAYER_DOWN)) { orientation = Down; } } // Handle Jumping if (jumping || (((input->isKeyDown(PLAYER_JUMP) || input->isKeyDown(PLAYER_UP)) && canMoveUp() && canJump))) { jumpdistance = jumpOriginY - getY(); if (canJump && !jumping) jumpOriginY = getY(); if (jumpdistance > playerNS::JUMP_HEIGHT || !canMoveUp()) { jumping = false; canJump = false; falling = true; } else { if (!jumping) velocityY = -playerNS::JUMP_SPEED * frameTime; else velocityY += 0.5 * frameTime; jumping = true; canJump = false; } } if (!jumping) jumpOriginY = getY(); if (falling && !jumping) { if (canMoveDown()) { velocityY = playerNS::FALLING_SPEED * frameTime; } else { velocityY = 0; } } // Handle Stuck while (canMoveUp() && !canMoveDown() && !canMoveLeft() && !canMoveRight()) { spriteData.y -= 0.1; } while (!canMoveUp() && !canMoveDown() && !canMoveLeft() && canMoveRight()) { spriteData.x += 0.1; } while (!canMoveUp() && !canMoveDown() && canMoveLeft() && !canMoveRight()) { spriteData.x -= 0.1; } // Final Sanity Check if (!canMoveLeft() && velocityX < 0 || !canMoveRight() && velocityX > 0) velocityX = 0; if (!canMoveUp() && velocityY < 0 || !canMoveDown() && velocityY > 0) velocityY = 0; setVelocity(VECTOR2(velocityX, velocityY)); // Handle Orientations if (input->isKeyDown(PLAYER_UP)) orientation = Up; else if (input->isKeyDown(PLAYER_DOWN)) orientation = Down; switch (orientation) { case Right: currentFrame = 953; spriteData.flipHorizontal = true; break; case Down: currentFrame = 954; break; case Left: currentFrame = 953; spriteData.flipHorizontal = false; break; case Up: currentFrame = 952; break; } // Draw Items Item* activeItem = inventory->getActiveItem()->getItem(); if (inventory->getActiveItem()->getItem()->getItemType() == Item::Equipable) { Gun* gun = dynamic_cast<Gun*>(activeItem); if (gun != 0) { gun->update(frameTime, orientation, getX(), getY(), input, lc); } } // Crate Collision if (lc->collidedWithCrate() == 1 && lc->getCrateItem() != -1) { audio->playCue(RELOAD); if (lc->collidedWithCrate() == 1 && lc->getCrateItem() != -1) { int itemid = lc->getCrateItem(); InventoryItem *invItem; std::vector<InventoryItem*>* itemList = inventory->getItems(); switch (itemid) { case playerNS::ItemType::shotGun: shotgun = new Shotgun(); shotgun->initialize(gameptr, 136, 41, 2, gunTexture); shotgun->setCurrentFrame(6); invItem = new InventoryItem(shotgun); break; case playerNS::ItemType::machineGun: machineGun = new MachineGun(); machineGun->initialize(gameptr, 136, 41, 2, gunTexture); machineGun->setCurrentFrame(0); invItem = new InventoryItem(machineGun); break; case 3: break; } for (int i = 0; i < itemList->size(); i++) { InventoryItem *iItem = itemList->at(i); Item* item = iItem->getItem(); Item* newItem = invItem->getItem(); if (item->getItemType() == Item::Equipable && newItem->getItemType() == Item::Equipable) { Gun* gunInvItem = dynamic_cast<Gun*>(item); Gun* gunNewItem = dynamic_cast<Gun*>(newItem); if (gunInvItem->getGunId() == gunNewItem->getGunId()) { gunInvItem->addAmmo(); lc->setCrateCollided(0); return; // Should this be return or break? } } else if (item->getItemType() == Item::Usable && newItem->getItemType() == Item::Usable) { lc->setCrateCollided(0); return; } // Should this be return or break? } inventory->addItem(invItem); lc->setCrateCollided(0); lc->setCrateItem(-1); } } Entity::update(frameTime); } }