mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 15:50:20 +00:00
Enhanced the C-key character screen with a 3-column layout featuring a 3D character model preview (with drag-to-rotate), item icons loaded from BLP textures via ItemDisplayInfo.dbc, and a stats panel showing base + equipment bonuses. Fixed selection circle clipping under terrain by adding a Z offset, and corrected faction hostility logic that was wrongly marking hostile mobs as friendly.
75 lines
2.4 KiB
C++
75 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <unordered_map>
|
|
#include <glm/glm.hpp>
|
|
|
|
namespace wowee {
|
|
namespace pipeline { class AssetManager; }
|
|
namespace rendering { class CharacterRenderer; }
|
|
namespace rendering { class TerrainManager; }
|
|
namespace game {
|
|
|
|
class EntityManager;
|
|
|
|
struct NpcSpawnDef {
|
|
std::string mapName;
|
|
uint32_t entry = 0;
|
|
std::string name;
|
|
std::string m2Path;
|
|
uint32_t level;
|
|
uint32_t health;
|
|
glm::vec3 canonicalPosition; // WoW canonical coords (+X north, +Y west, +Z up)
|
|
bool inputIsServerCoords = false; // if true, input XYZ are server/wire order
|
|
float rotation; // radians around Z
|
|
float scale;
|
|
bool isCritter; // critters don't do humanoid emotes
|
|
uint32_t faction = 0; // faction template ID from creature_template
|
|
uint32_t npcFlags = 0; // NPC interaction flags from creature_template
|
|
};
|
|
|
|
struct NpcInstance {
|
|
uint64_t guid;
|
|
uint32_t renderInstanceId;
|
|
float emoteTimer; // countdown to next random emote
|
|
float emoteEndTimer; // countdown until emote animation finishes
|
|
bool isEmoting;
|
|
bool isCritter;
|
|
};
|
|
|
|
class NpcManager {
|
|
public:
|
|
void clear(rendering::CharacterRenderer* cr, EntityManager* em);
|
|
void initialize(pipeline::AssetManager* am,
|
|
rendering::CharacterRenderer* cr,
|
|
EntityManager& em,
|
|
const std::string& mapName,
|
|
const glm::vec3& playerCanonical,
|
|
const rendering::TerrainManager* terrainManager);
|
|
void update(float deltaTime, rendering::CharacterRenderer* cr);
|
|
|
|
uint32_t findRenderInstanceId(uint64_t guid) const;
|
|
|
|
private:
|
|
std::vector<NpcSpawnDef> loadSpawnDefsFromFile(const std::string& path) const;
|
|
std::vector<NpcSpawnDef> loadSpawnDefsFromAzerothCoreDb(
|
|
const std::string& basePath,
|
|
const std::string& mapName,
|
|
const glm::vec3& playerCanonical,
|
|
pipeline::AssetManager* am) const;
|
|
|
|
void loadCreatureModel(pipeline::AssetManager* am,
|
|
rendering::CharacterRenderer* cr,
|
|
const std::string& m2Path,
|
|
uint32_t modelId);
|
|
|
|
std::vector<NpcInstance> npcs;
|
|
std::unordered_map<std::string, uint32_t> loadedModels; // path -> modelId
|
|
uint64_t nextGuid = 0xF1300000DEAD0001ULL;
|
|
uint32_t nextModelId = 100;
|
|
};
|
|
|
|
} // namespace game
|
|
} // namespace wowee
|