PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
Resources.hpp
1#pragma once
2
3#include "PixelBullet/Serialization/Node.hpp"
4#include "PixelBullet/Threading/ThreadPool.hpp"
5
6#include <chrono>
7#include <map>
8#include <memory>
9#include <typeindex>
10#include <unordered_map>
11
12namespace PixelBullet
13{
17
18 class Resource;
19
21 {
22 public:
23 Resources();
24 ~Resources() = default;
25
29 void Update();
30
34 std::shared_ptr<Resource> Find(const std::type_index& typeIndex, const Node& node) const;
35
39 template <typename T>
40 std::shared_ptr<T> Find(const Node& node) const
41 {
42 auto it = m_Resources.find(typeid(T));
43 if (it == m_Resources.end())
44 {
45 return nullptr;
46 }
47
48 for (const auto& [key, resource] : it->second)
49 {
50 if (key == node)
51 {
52 return std::dynamic_pointer_cast<T>(resource);
53 }
54 }
55 return nullptr;
56 }
57
61 void Add(const Node& node, const std::shared_ptr<Resource>& resource);
62
66 void Remove(const std::shared_ptr<Resource>& resource);
67
72
73 private:
74 // Resources are stored by type and then by a key (Node).
75 std::unordered_map<std::type_index, std::map<Node, std::shared_ptr<Resource>>> m_Resources;
76
77 // Time point for the last purge.
78 std::chrono::steady_clock::time_point m_LastPurgeTime;
79
80 // Purge interval (we purge every 5 seconds).
81 std::chrono::seconds m_PurgeInterval = std::chrono::seconds(5);
82
83 // Thread pool for resource loading.
84 ThreadPool m_ThreadPool;
85 };
86} // namespace PixelBullet
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition Node.hpp:51
Definition Resources.hpp:21
ThreadPool & GetThreadPool()
Gets the resource loader thread pool.
Definition Resources.cpp:92
void Add(const Node &node, const std::shared_ptr< Resource > &resource)
Adds a new resource.
Definition Resources.cpp:65
std::shared_ptr< T > Find(const Node &node) const
Template helper to find a resource of type T.
Definition Resources.hpp:40
std::shared_ptr< Resource > Find(const std::type_index &typeIndex, const Node &node) const
Finds a resource by type and node.
Definition Resources.cpp:47
void Update()
Performs periodic cleanup of unused resources.
Definition Resources.cpp:12
void Remove(const std::shared_ptr< Resource > &resource)
Removes a resource.
Definition Resources.cpp:75
A fixed-size pool of threads.
Definition ThreadPool.hpp:18