Models are built out of meshes by a descriptor, format to be decided. The descriptor will be built by means of a GUI tool. The descriptor can be human readable and for efficiency compiled into pure data form. Where meshes are attached to existing bones, the hierarchy of bones in the attached mesh is attached (by its root) to the receiving bone.
Most meshes are based around bones. The bones are used as named locators within the model, attachment points, and manipulative 'handles'. All meshes are skin meshes. Where no bones are present, a root bone is generated for the mesh at the origin.
Meshes and models can be interrogated to retrieve a bone for direct manipulation or attachment of another mesh.
Pioneer meshes may expose animations. These are added to a list of animations the model can play as it is built. The play call cascades to all member meshes.
Multiple animations can be played simultaneously, forward, backward, pingpong, looped etc.
Animations are to be used for ALL model-relevant effects, including thruster burns, light flashing, damage modelling (more later). The animation system will interrogate the game systems for relevant object states, such as hull condition / temperature.
Models can be interrogated for the states of animation on them- a good example here is landing gear. Some gear may take longer to unfold than others - there will be a method like float pModel->getAnimationState("GearUpDown"). A value of 1.0 indicates the animation is in the end position, 0.0 in the start. Obviously this would be a play once, forward or backward type of animation.
The construction tool allows the import of meshes (including UV maps) and skeletal data (including weighting). Initially this will be via .x (Microsoft DirectX) format, as it's widely supported and can be human readable. More importantly, I can get it to work.
The construction tool allows the merging of animations from a source file (xreffing from another model) if the bone names are identical. This behaviour is automatically done for all files in the same directory when importing a filename of 'REF'.
The construction tool allows the setting of animation duration by time, and also allow event scripts to be triggered at certain timepoints in the animation. Typically this will be used for flashing lights etc. See below.
The construction tool will also allow the creation of new single-frame, but long duration animations for timing effects like flashing lights.
The construction tool will allow the creation or setting of data-reactive animations - for example thruster burn. This could be a single frame animation, running a particle emitter which reacts to the appropriate thrust variable, or it could be a pseudorandom vibration animation where the amplitude is factored by thrust. More commonly it'll be a turret rotation / elevation.
It seems like a sensible idea to package certain attributes along with the components of a model; Consider a large ship with optional cargo modules. Attaching the modules to the ship increases its cargo space and / or types of cargo space according to the modules you add. As not all of these actually require models, this should probably be kept separate in an actual entity specification building tool.