Polyphase Game Engine
Loading...
Searching...
No Matches
Property.h
Go to the documentation of this file.
1#pragma once
2
3#include "PolyphaseAPI.h"
4#include "Datum.h"
5
6enum class ByteExtra
7{
8 None,
11};
12
14{
15public:
16 Property();
18 const std::string& name,
19 Object* owner,
20 void* data,
21 uint32_t count = 1,
22 DatumChangeHandlerFP changeHandler = nullptr,
23 Datum extra = NULL_DATUM,
24 int32_t enumCount = 0,
25 const char** enumStrings = nullptr);
26 virtual ~Property();
27
28 Property(const Property& src);
29
30 Property& operator=(const Property& src);
31
32
33 virtual void ReadStream(Stream& stream, uint32_t version, bool net, bool external) override;
34 virtual void WriteStream(Stream& stream, bool net) const override;
35 virtual uint32_t GetSerializationSize(bool net) const override;
36
37 virtual bool IsProperty() const override;
38 virtual void DeepCopy(const Datum& src, bool forceInternalStorage) override;
39 virtual void Destroy() override;
40
41 void PushBackVector(void* value = nullptr);
42 void EraseVector(uint32_t index);
43 void ResizeVector(uint32_t count);
44 Property& MakeVector(uint8_t minCount = 0, uint8_t maxCount = 255);
45 bool IsVector() const;
46 bool IsArray() const;
47
48 void CreateExtraData() const;
49 void DestroyExtraData() const;
50
51#if EDITOR
52 static void SetCategory(const char* category);
53 static void ClearCategory();
54#endif
55
56protected:
57
58 virtual void Reset() override;
59
60public:
61
62 static const char* sCategory;
63
64 std::string mName;
65 mutable Datum* mExtra = nullptr;
66 void* mVector = nullptr;
67 uint8_t mMinCount = 0;
68 uint8_t mMaxCount = 255;
69 bool mIsVector = false;
70#if EDITOR
71 std::string mDisplayName; // Display name for editor UI
72 int32_t mEnumCount = 0;
73 const char** mEnumStrings = nullptr;
74 const char* mCategory = "";
75#endif
76};
77
78#if EDITOR
79struct ScopedPropertyCategory
80{
81 ScopedPropertyCategory(const char* catName) { Property::SetCategory(catName); }
82 ~ScopedPropertyCategory() { Property::ClearCategory(); }
83};
84
85#define SCOPED_CATEGORY(CatName) ScopedPropertyCategory scopedCat(CatName);
86#else
87#define SCOPED_CATEGORY(CatName)
88#endif
DatumType
Definition Datum.h:28
bool(* DatumChangeHandlerFP)(class Datum *prop, uint32_t index, const void *newValue)
Definition Datum.h:17
#define NULL_DATUM
Definition Datum.h:15
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
ByteExtra
Definition Property.h:7
@ ExclusiveFlagWidget
Definition Datum.h:164
virtual void Destroy()
Definition Datum.cpp:2019
virtual uint32_t GetSerializationSize(bool net) const
Definition Datum.cpp:594
Datum & operator=(const Datum &src)
Definition Datum.cpp:1534
virtual void ReadStream(Stream &stream, uint32_t version, bool net, bool external)
Definition Datum.cpp:394
virtual void Reset()
Definition Datum.cpp:2508
virtual void DeepCopy(const Datum &src, bool forceInternalStorage)
Definition Datum.cpp:2039
virtual bool IsProperty() const
Definition Datum.cpp:1950
virtual void WriteStream(Stream &stream, bool net) const
Definition Datum.cpp:510
Definition Object.h:13
Definition Property.h:14
static const char * sCategory
Definition Property.h:62
std::string mName
Definition Property.h:64
Definition Stream.h:21