Tramway SDK
resource.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_RESOURCE_H
4#define TRAM_SDK_FRAMEWORK_RESOURCE_H
5
6#include <framework/uid.h>
8
9namespace tram {
10
11class Resource {
12public:
13 enum Status {
14 UNLOADED, //< Resource not in memory. Can't be used.
15 LOADED, //< Resource loaded in memory, but still needs some processing (like uploading to video memory).
16 READY, //< Resource is ready for sus.
17 };
18
20
21 inline Resource::Status GetStatus() const { return status; }
22 inline name_t GetName() const { return name; }
23 inline size_t GetReferences() const { return references; }
24 inline bool IsLoadFailed() const { return load_fail; }
25
26 inline void AddReference() { references++; }
27 inline void RemoveReference() { references--; }
28
29 virtual void LoadFromDisk() = 0;
30 virtual void LoadFromMemory() = 0;
31
33
34 virtual void Unload() = 0;
35protected:
38 bool load_fail = false;
39 size_t references = 0;
40};
41
42
43namespace Async { void RequestResource (EntityComponent* requester, Resource* requested_resource); }
44
45template <typename T>
47public:
49 ~ResourceProxy() { set(nullptr); }
50 void set(Resource* new_res){
51 if (resource) {
54 }
55
56 resource = new_res;
57
58 if (resource) {
60
64 }
65 }
66 }
67 T* get() { return (T*)resource; }
68 T* operator= (Resource* res) { set(res); return get(); }
69 T* operator->() { return (T*)resource; }
70 T& operator*() { return *((T*)resource); }
71 explicit operator bool() { return resource != nullptr; }
72protected:
74 Resource* resource = nullptr;
75};
76
77}
78
79#endif // TRAM_SDK_FRAMEWORK_RESOURCE_H
Component base class.
Definition: entitycomponent.h:16
size_t resources_waiting
Definition: entitycomponent.h:32
Definition: resource.h:11
virtual void Unload()=0
name_t name
Definition: resource.h:37
void Load()
Definition: resource.h:32
name_t GetName() const
Definition: resource.h:22
void RemoveReference()
Definition: resource.h:27
Resource::Status GetStatus() const
Definition: resource.h:21
virtual void LoadFromDisk()=0
Resource(name_t name)
Definition: resource.h:19
Status
Definition: resource.h:13
@ LOADED
Definition: resource.h:15
@ READY
Definition: resource.h:16
@ UNLOADED
Definition: resource.h:14
bool IsLoadFailed() const
Definition: resource.h:24
size_t references
Definition: resource.h:39
virtual void LoadFromMemory()=0
Status status
Definition: resource.h:36
size_t GetReferences() const
Definition: resource.h:23
void AddReference()
Definition: resource.h:26
bool load_fail
Definition: resource.h:38
Definition: resource.h:46
T * operator->()
Definition: resource.h:69
Resource * resource
Definition: resource.h:74
void set(Resource *new_res)
Definition: resource.h:50
T & operator*()
Definition: resource.h:70
T * get()
Definition: resource.h:67
ResourceProxy(EntityComponent *parent)
Definition: resource.h:48
EntityComponent * parent
Definition: resource.h:73
~ResourceProxy()
Definition: resource.h:49
T * operator=(Resource *res)
Definition: resource.h:68
void CancelRequest(EntityComponent *requester, Resource *resource)
Cancels a resource load request.
Definition: async.cpp:126
void RequestResource(EntityComponent *requester, Resource *resource)
Adds a resource to the loading queue.
Definition: async.cpp:91
Serialization, i.e.
Interned string type.
Definition: uid.h:10