#include "inventory/weapon.hpp" #include std::vector weapon_sets; std::vector weapons; Weapon::Weapon(WeaponType wtype, WeaponMaterial wmaterial) : type(wtype), material(wmaterial) { for (size_t i = 0; i < weapons.size(); i++) { const auto& w = weapons[i]; const auto& tileset = weapon_sets[w.weapon_tileset_id]; if (w.type == wtype && tileset.material == wmaterial) { weapon_index = i; return; } } weapon_index = (size_t)-1; // not found } void Weapon::AddWeaponFromTileset(size_t tileset_id, WeaponType type, float demage, float speed, float x, float y, float w, float h) { weapons.push_back({ tileset_id, SDL_FRect{x, y, w, h}, type, demage, speed, }); } void Weapon::Init(SDL_Renderer* renderer) { // Add the wood tileset weapon_sets.push_back({ IMG_LoadTexture(renderer, "Pixel_Crawler/Weapons/Wood/Wood.png"), {12, 7}, // size in tiles WeaponMaterial::WOOD }); // Generate weapons from the tileset grid AddWeaponFromTileset(0, WeaponType::LONGSWORD, 10, 1, 0, 0, 16, 48); AddWeaponFromTileset(0, WeaponType::HAMMER, 10, 1, 16, 16, 16, 32); AddWeaponFromTileset(0, WeaponType::SWORD, 10, 1, 32, 16, 16, 32); AddWeaponFromTileset(0, WeaponType::SPEER, 10, 1, 48, 0, 16, 48); } void Weapon::Draw(SDL_Renderer* renderer, float x, float y) { if (weapon_index >= weapons.size()) return; const WeaponSet& weaponset = weapons[weapon_index]; const WeaponTileSet& tileset = weapon_sets[weaponset.weapon_tileset_id]; SDL_FRect dest; float offset = 20; if (!flip) offset = 19; dest.x = Scale(x + offset); dest.y = Scale(y + 15); dest.w = Scale(static_cast(weaponset.tileset_position.w)); dest.h = Scale(static_cast(weaponset.tileset_position.h)); SDL_RenderTextureRotated(renderer, tileset.texture, &weaponset.tileset_position, &dest, 0.0, nullptr, flip ? SDL_FLIP_NONE : SDL_FLIP_HORIZONTAL); }