[Opensim-dev] Refactoring SceneObjectGroup - Introducing Components

diva at metaverseink.com diva at metaverseink.com
Tue Dec 15 15:21:08 UTC 2009


I have a question. How does this impact, if it does, extensions of 
SceneObjectGroup? For example, I have a traffic simulation where 
Vehicles extend SOG. How will this be affected? Will I be using 
components instead?

Frisby, Adam wrote:
> Bumpity Bump. If I don’t hear any comments on this, I’m going to assume 
> the proposal is sound and have carte blanche to break OpenSim at my 
> whim. ;)
> 
>  
> 
> (find the original post for the attachment.)
> 
>  
> 
> Regards,
> 
>  
> 
> Adam
> 
>  
> 
> *From:* opensim-dev-bounces at lists.berlios.de 
> [mailto:opensim-dev-bounces at lists.berlios.de] *On Behalf Of *Frisby, Adam
> *Sent:* Friday, 11 December 2009 3:48 AM
> *To:* opensim-dev at lists.berlios.de
> *Subject:* [Opensim-dev] Refactoring SceneObjectGroup - Introducing 
> Components
> 
>  
> 
> Hi Folks,
> 
>  
> 
> I’ve got a fairly complicated proposal to deliver here today – the short 
> of it is; I’d like to go ahead and replace the current Scene Object 
> representation model – at a fairly comprehensive & complete level. Some 
> of you have had the misfortune of working with 
> SceneObjectPart/SceneObjectGroup and should understand what I am talking 
> about.
> 
>  
> 
> There are several stages to this proposal – but I would like to talk 
> about today the first big one (and a small outline of the larger project 
> – the reason for this being some of the later details require a little 
> more nutting out before I have a complete proposal for them).
> 
>  
> 
> So – the larger proposal in a nutshell; I would like to:
> 
> ·         Merge SceneObjectGroup & SceneObjectPart
> 
> ·         Enable full inheritance & linking (ie, hierarchical linking)
> 
> ·         Make programming with SceneObjects possible & reasonable from 
> the outside (ie have a clean API).
> 
> ·         Provide the ability to extend SceneObjects with “components” 
> to introduce new properties and behaviours.
> 
>  
> 
> The item I’d like to talk about today would be implementing Components. 
> Components are small C# classes that may be attached to any SceneObject 
> arbitrarily.
> 
>  
> 
> A component is any class inheriting from IComponent – IComponent carries 
> only two properties; a serialisation property (returns the current 
> ‘state’ for serialisation purposes), and a type property (which 
> recognises the ‘type’ of component that it is) – components allow you to 
> attach arbitrary data to an object for the purposes of interacting with 
> a region module. For instance, a “Mesh” module (which is my current best 
> example) would have a MeshComponent that included all the extra data to 
> tag an object with related to meshes – which would get serialised and 
> passed around with the main object. When deserialized – a “Factory” 
> handles making sure the MeshComponent is deserialized with the main object.
> 
>  
> 
> I’ve attached a document which is my current state of the whole proposal 
> which includes some examples & more detail. Please note that Phase 2 is 
> not finalised yet – and some decisions were discussed about changing two 
> facets in particular.
> 
> ·         Enabling inheritance of components+sceneobject to make 
> speedy-classes for common use cases (eg PrimObject inherits 
> PrimComponent and SceneObject)
> 
> ·         Allowing more than one factory potentially; for manufacturing 
> said speedy-classes.
> 
> ·         Note that these shorthand classes would still use the standard 
> .Has / .Get methods; they would just return ‘this’ where the particular 
> component type is concerned.
> 
>  
> 
> To begin with – I would like to implement components as an extra 
> non-serialised property of the SceneObjectPart; this will occur very 
> shortly after 0.7 is tagged; which I would like to do once ROBUST covers 
> all the main services (I heard something about late-december/early-jan); 
> this first stage should not break anything in particular – however once 
> that Is complete, I would like to migrate properties into components in 
> order to modularised the codebase better.
> 
>  
> 
> An example of this would be PrimData – primdata is unique to the Second 
> Life use case, and irrelevant to others; in this case, we’ll move 
> PrimData into a commonly accessed component (eg 
> “SceneObject.Get<PrimData>.Hollow = 0.9f;”) – once the move to 
> components is complete for the common data; then creating the final 
> SceneObject class which merges SceneObjectGroup+Part should be a fairly 
> painless process.
> 
>  
> 
> Please take a read of the document attached for more information – and I 
> am very keen to hear anyones thoughts as to use cases that this model 
> will make more difficult; or could not support. The goal with this 
> project is to make OpenSim support more with less – allowing third party 
> modules to really take OpenSim as a framework to the next level; and 
> make a more modular server for other clients & platforms.
> 
>  
> 
> Thanks!
> 
>  
> 
> Adam
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev



More information about the Opensim-dev mailing list