LkEngine 0.1.2
 
Loading...
Searching...
No Matches
MaterialAsset.h
1#pragma once
2
3#include "LkEngine/Asset/Asset.h"
4
5#include "LkEngine/Renderer/Texture.h"
6#include "LkEngine/Renderer/Material.h"
7
8
9namespace LkEngine {
10
11 class LMaterialAsset : public LAsset
12 {
13 public:
14 explicit LMaterialAsset(const TObjectPtr<LMaterial>& Material);
15 LMaterialAsset(const bool bIsTransparent = false);
16 LMaterialAsset() = delete;
17 ~LMaterialAsset() = default;
18
19 glm::vec3& GetAlbedoColor();
20 void SetAlbedoColor(const glm::vec3& color);
21
22 float& GetMetalness();
23 void SetMetalness(float value);
24
25 float& GetRoughness();
26 void SetRoughness(float value);
27
28 float& GetEmission();
29 void SetEmission(float value);
30
31 FORCEINLINE bool IsValid() const { return (Material != nullptr); }
32
33 TObjectPtr<LMaterial> GetMaterial() const { return Material; }
34
35 void SetMaterial(TObjectPtr<LMaterial> Material)
36 {
37 LK_CORE_VERIFY(Material);
38 Material = Material;
39 }
40
41 void SetTransparency(float transparency);
42 float& GetTransparency();
43 bool IsTransparent() const { return bTransparent; }
44
45 TObjectPtr<LTexture2D> GetAlbedoMap();
46 void SetAlbedoMap(TObjectPtr<LTexture2D> texture);
47 void ClearAlbedoMap();
48
49 TObjectPtr<LTexture2D> GetNormalMap();
50 void SetNormalMap(TObjectPtr<LTexture2D> texture);
51
52 TObjectPtr<LTexture2D> GetMetalnessMap();
53 void SetMetalnessMap(TObjectPtr<LTexture2D> texture);
54 void ClearMetalnessMap();
55
56 TObjectPtr<LTexture2D> GetRoughnessMap();
57 void SetRoughnessMap(TObjectPtr<LTexture2D> texture);
58 void ClearRoughnessMap();
59
60 FORCEINLINE static EAssetType GetStaticType() { return EAssetType::Material; }
61
62 private:
63 void SetDefaults();
64
65 private:
66 TObjectPtr<LMaterial> Material = nullptr;
67 bool bTransparent = false;
68
69 friend class LMaterialEditor;
70
72 };
73
74
75 class LMaterialTable : public LObject
76 {
77 public:
78 LMaterialTable(const uint32_t InMaterialCount = 0);
81
82 void SetMaterial(const uint32_t Index, const FAssetHandle AssetHandle);
83
84 FORCEINLINE FAssetHandle GetMaterial(const uint32_t Index) const
85 {
86 LK_CORE_ASSERT(HasMaterial(Index), "GetMaterial failed for index: {}", Index);
87 return Materials.at(Index);
88 }
89
90 void ClearMaterial(const uint32_t Index);
91 void InsertLast(const FAssetHandle Material);
92
93 FORCEINLINE bool HasMaterial(const uint32_t Index) const
94 {
95 return (Materials.find(Index) != Materials.end());
96 }
97
98 FORCEINLINE uint32_t GetMaterialCount() const { return MaterialCount; }
99
100 FORCEINLINE void SetMaterialCount(const uint32_t InMaterialCount)
101 {
102 MaterialCount = InMaterialCount;
103 }
104
108 void Clear();
109
110 std::map<uint32_t, FAssetHandle>& GetMaterials() { return Materials; }
111 const std::map<uint32_t, FAssetHandle>& GetMaterials() const { return Materials; }
112
113 private:
114 std::map<uint32_t, FAssetHandle> Materials{};
115 uint32_t MaterialCount = 0;
116
118 };
119
120
121
122}
Definition Asset.h:21
Definition MaterialAsset.h:12
Definition MaterialAsset.h:76
Definition Object.h:46
Definition ObjectPtr.h:102
#define LASSET(Class)
Definition CoreMacros.h:316
#define LCLASS(Class)
Definition CoreMacros.h:226
Definition Asset.h:11
EAssetType
Definition AssetTypes.h:24
Definition UUID.h:13