docs: add agent skill guides and update CMake build instructions

This commit is contained in:
AndreaRigoni
2026-04-17 09:36:24 +00:00
parent 1288fc3a41
commit bca63a7fc8
10 changed files with 521 additions and 26 deletions

View File

@@ -0,0 +1,49 @@
# Skill: Core Object & Property System
This skill defines the patterns for implementing and working with the `uLib` core object model.
## Context
- **Base Class**: `uLib::Object`
- **Property System**: `uLib::Property<T>`
- **Registration**: All objects must register their properties for UI visibility and serialization.
## Implementation Patterns
### 1. Defining an Object
Inherit from `uLib::Object` and use the `ULIB_PROPERTY` macro for members.
```cpp
class MyObject : public uLib::Object {
public:
ULIB_PROPERTY(double, Speed, 0.0)
ULIB_PROPERTY(std::string, Description, "None")
MyObject() {
// Required for property visibility in PropertyEditor
ULIB_ACTIVATE_PROPERTIES(*this)
}
};
```
### 2. Property Access
Properties can be treated like their underlying types or accessed via `.Get()`/`.Set()`.
```cpp
obj.Speed = 10.5; // Triggers Updated() signal
double s = obj.Speed; // Implicit conversion
obj.Speed.SetRange(0.0, 100.0); // Setting metadata
```
### 3. Serialization
Implement `serialize` overloads for different archive types. Use `hrp` (Human Readable Property) to name fields.
```cpp
template <class ArchiveT>
void serialize(ArchiveT &ar, const unsigned int version) {
ar & boost::serialization::make_nvp("InstanceName", this->GetInstanceName());
ar & boost::serialization::make_hrp("Speed", Speed, "m/s");
}
```
## Checklist
- [ ] Inherit from `uLib::Object`.
- [ ] Use `ULIB_PROPERTY` for members that should appear in the GUI.
- [ ] Call `ULIB_ACTIVATE_PROPERTIES` in the constructor.
- [ ] Implement `serialize` if persistence is required.