Initial support for registering unknown components as EC_PlaceholderComponent, when sufficient data is available.
Create placeholder component typeId by hashing the typeName if not explicitly specified.
New network message for transmitting structure of PlaceholderComponents across the wire.
Created a new protocol version for sending the static-structure component descriptions. Not sent to protocol v1 (original).
Renamed SceneAPI's RegisterCustomComponentType() to RegisterComponentType(). Added function IsComponentTypeRegistered() which checks both factories and registered placeholder types.
IComponent: Implement creating QObject properties for dynamic component attributes. This change wont affect any staticly structured components. It will add reading and writing dynamic component properties directly from a variable (mostly nice for scripting). Example: ent.dynamicComponent.CreateAttribute('int', 'My cool attribute'); ent.dynamicComponent.myCoolAttribute = 10; print(ent.dynamicComponent.myCoolAttribute); Works for all IAttribute types via QVariant (IAttribute::FromQVariant and IAttribute::ToQVariant) just like you would use EC_DynamicComponent::SetAttribute writing and EC_DynamicComponent::Attribute for reading.
CoreStringUtils: Add function for camel casing and checking for alphanumeric strings.
Allow creation of attribute dynamic properties to EC_PlaceholderComponent, whose attributes are dynamically allocated, but is still supposed to mimic a static-structured component. Fixed moc creation for EC_PlaceholderComponent.
Added example scene for creating a custom static-structured component from script.
Use our own ComputeHash() for making up component type ID's. When computing type ID from name, use the form of typename without EC_ prefix.
Read protocol version from webclient login.
Allow updating a placeholder component description.