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.
If placeable is skeletally attached but the parent mesh is not playing any animations, must update transform manually when the parent's transform changes.
Added a warning log print if a custom component type is re-registered, and an error print if component with same typeid but different name is registered.
Keep track of custom component types received from the server so that we don't echo them back on the first call of ProcessSyncState() on the client.
Initial entity parenting. An entity can be added as a child to another. EC_Placeable uses the parent entity automatically (no need to set parentRef)
Initial hierarchical txml save. When entity is removed from scene, remove its children also. Added Scene::RootLevelEntities() to get the entities without parent.
Hierarchic binary scene save.
Handle child entities in SceneDesc / EntityDesc.
Initial network protocol support for hierarchic scene. New protocol version introduced.
Send entity ID's as full 32bit in SetEntityParent message, to differentiate between unacked and replicated ID's. Keep a memory of the unacked-to-real ID mapping on the server per client to allow clients to send entity parentings properly at creation.