mapcreator git · master
SDL3 2.5D game and engine using assets, with map editor
C++ 99.3%git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gzsrc/inventory/weapon.cpp raw
#include "inventory/weapon.hpp"
#include <iostream>
std::vector<WeaponTileSet> weapon_sets;
std::vector<WeaponSet> 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<int>(weaponset.tileset_position.w));
dest.h = Scale(static_cast<int>(weaponset.tileset_position.h));
SDL_RenderTextureRotated(renderer, tileset.texture, &weaponset.tileset_position, &dest,
0.0, nullptr,
flip ? SDL_FLIP_NONE : SDL_FLIP_HORIZONTAL);
}