예제 #1
0
        // Old uuid and new sceneobjectgroup
        public AuraMetaEntity CreateAuraForNewlyCreatedEntity(SceneObjectPart part)
        {
            AuraMetaEntity ent = new AuraMetaEntity(part.ParentGroup.Scene,
                                                    part.GetWorldPosition(),
                                                    MetaEntity.TRANSLUCENT,
                                                    new Vector3(0, 254, 0),
                                                    part.Scale
                                                    );

            m_NewlyCreatedEntityAura.Add(part.UUID, ent);
            return(ent);
        }
        /// <summary>
        /// Search for a corresponding group UUID in the scene. If not found, then the revisioned group this CMEntity represents has been deleted. Mark the metaentity appropriately.
        /// If a matching UUID is found in a scene object group, compare the two for differences. If differences exist, Mark the metaentity appropriately.
        /// </summary>
        public void FindDifferences()
        {
            List <EntityBase> sceneEntityList = new List <EntityBase>(m_Entity.Scene.GetEntities());

            DiffersFromSceneGroup = false;
            // if group is not contained in scene's list
            if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID))
            {
                foreach (SceneObjectPart part in m_UnchangedEntity.Parts)
                {
                    // if scene list no longer contains this part, display translucent part and mark with red aura
                    if (!ContainsKey(sceneEntityList, part.UUID))
                    {
                        // if already displaying a red aura over part, make sure its red
                        if (m_AuraEntities.ContainsKey(part.UUID))
                        {
                            m_AuraEntities[part.UUID].SetAura(new Vector3(254, 0, 0), part.Scale);
                        }
                        else
                        {
                            AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                          part.GetWorldPosition(),
                                                                          MetaEntity.TRANSLUCENT,
                                                                          new Vector3(254, 0, 0),
                                                                          part.Scale
                                                                          );
                            m_AuraEntities.Add(part.UUID, auraGroup);
                        }
                        SceneObjectPart metaPart = m_Entity.GetLinkNumPart(part.LinkNum);
                        SetPartTransparency(metaPart, MetaEntity.TRANSLUCENT);
                    }
                    // otherwise, scene will not contain the part. note: a group can not remove a part without changing group id
                }

                // a deleted part has no where to point a beam particle system,
                // if a metapart had a particle system (maybe it represented a moved part) remove it
                if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                {
                    m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                    m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                }

                DiffersFromSceneGroup = true;
            }
            // if scene list does contain group, compare each part in group for differences and display beams and auras appropriately
            else
            {
                MarkWithDifferences((SceneObjectGroup)GetGroupByUUID(sceneEntityList, m_UnchangedEntity.UUID));
            }
        }
예제 #3
0
 // Old uuid and new sceneobjectgroup
 public AuraMetaEntity CreateAuraForNewlyCreatedEntity(SceneObjectPart part)
 {
     AuraMetaEntity ent = new AuraMetaEntity(part.ParentGroup.Scene,
                                             part.GetWorldPosition(),
                                             MetaEntity.TRANSLUCENT,
                                             new Vector3(0,254,0),
                                             part.Scale
                                             );
     m_NewlyCreatedEntityAura.Add(part.UUID, ent);
     return ent;
 }
예제 #4
0
        /// <summary>
        /// Returns true if there was a change between meta entity and the entity group, false otherwise.
        /// If true is returned, it is assumed the metaentity's appearance has changed to reflect the difference (though clients haven't been updated).
        /// </summary>
        public bool MarkWithDifferences(SceneObjectGroup sceneEntityGroup)
        {
            SceneObjectPart sceneEntityPart;
            SceneObjectPart metaEntityPart;
            Diff            differences;
            bool            changed = false;

            // Use "UnchangedEntity" to do comparisons because its text, transparency, and other attributes will be just as the user
            // had originally saved.
            // m_Entity will NOT necessarily be the same entity as the user had saved.
            foreach (SceneObjectPart UnchangedPart in m_UnchangedEntity.Children.Values)
            {
                //This is the part that we use to show changes.
                metaEntityPart = m_Entity.GetLinkNumPart(UnchangedPart.LinkNum);
                if (sceneEntityGroup.Children.ContainsKey(UnchangedPart.UUID))
                {
                    sceneEntityPart = sceneEntityGroup.Children[UnchangedPart.UUID];
                    differences     = Difference.FindDifferences(UnchangedPart, sceneEntityPart);
                    if (differences != Diff.NONE)
                    {
                        metaEntityPart.Text = "CHANGE: " + differences.ToString();
                    }
                    if (differences != 0)
                    {
                        // Root Part that has been modified
                        if ((differences & Diff.POSITION) > 0)
                        {
                            // If the position of any part has changed, make sure the RootPart of the
                            // meta entity is pointing with a beam particle system
                            if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                            {
                                m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                                m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                            }
                            BeamMetaEntity beamGroup = new BeamMetaEntity(m_Entity.Scene,
                                                                          m_UnchangedEntity.RootPart.GetWorldPosition(),
                                                                          MetaEntity.TRANSLUCENT,
                                                                          sceneEntityPart,
                                                                          new Vector3(0, 0, 254)
                                                                          );
                            m_BeamEntities.Add(m_UnchangedEntity.RootPart.UUID, beamGroup);
                        }

                        if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                        {
                            m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                            m_AuraEntities.Remove(UnchangedPart.UUID);
                        }
                        AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                      UnchangedPart.GetWorldPosition(),
                                                                      MetaEntity.TRANSLUCENT,
                                                                      new Vector3(0, 0, 254),
                                                                      UnchangedPart.Scale
                                                                      );
                        m_AuraEntities.Add(UnchangedPart.UUID, auraGroup);
                        SetPartTransparency(metaEntityPart, MetaEntity.TRANSLUCENT);

                        DiffersFromSceneGroup = true;
                    }
                    else // no differences between scene part and meta part
                    {
                        if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                        {
                            m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                            m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                        }
                        if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                        {
                            m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                            m_AuraEntities.Remove(UnchangedPart.UUID);
                        }
                        SetPartTransparency(metaEntityPart, MetaEntity.NONE);
                    }
                }
                else  //The entity currently in the scene is missing parts from the metaentity saved, so mark parts red as deleted.
                {
                    if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                    {
                        m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                        m_AuraEntities.Remove(UnchangedPart.UUID);
                    }
                    AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                  UnchangedPart.GetWorldPosition(),
                                                                  MetaEntity.TRANSLUCENT,
                                                                  new Vector3(254, 0, 0),
                                                                  UnchangedPart.Scale
                                                                  );
                    m_AuraEntities.Add(UnchangedPart.UUID, auraGroup);
                    SetPartTransparency(metaEntityPart, MetaEntity.TRANSLUCENT);

                    DiffersFromSceneGroup = true;
                }
            }
            return(changed);
        }
예제 #5
0
        /// <summary>
        /// Returns true if there was a change between meta entity and the entity group, false otherwise.
        /// If true is returned, it is assumed the metaentity's appearance has changed to reflect the difference (though clients haven't been updated).
        /// </summary>
        public bool MarkWithDifferences(SceneObjectGroup sceneEntityGroup)
        {
            SceneObjectPart sceneEntityPart;
            SceneObjectPart metaEntityPart;
            Diff differences;
            bool changed = false;

            // Use "UnchangedEntity" to do comparisons because its text, transparency, and other attributes will be just as the user
            // had originally saved.
            // m_Entity will NOT necessarily be the same entity as the user had saved.
            foreach (SceneObjectPart UnchangedPart in m_UnchangedEntity.Parts)
            {
                //This is the part that we use to show changes.
                metaEntityPart = m_Entity.GetLinkNumPart(UnchangedPart.LinkNum);
                if (sceneEntityGroup.ContainsPart(UnchangedPart.UUID))
                {
                    sceneEntityPart = sceneEntityGroup.GetChildPart(UnchangedPart.UUID);
                    differences = Difference.FindDifferences(UnchangedPart, sceneEntityPart);
                    if (differences != Diff.NONE)
                        metaEntityPart.Text = "CHANGE: " + differences.ToString();
                    if (differences != 0)
                    {
                        // Root Part that has been modified
                        if ((differences & Diff.POSITION) > 0)
                        {
                            // If the position of any part has changed, make sure the RootPart of the
                            // meta entity is pointing with a beam particle system
                            if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                            {
                                m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                                m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                            }
                            BeamMetaEntity beamGroup = new BeamMetaEntity(m_Entity.Scene,
                                                                          m_UnchangedEntity.RootPart.GetWorldPosition(),
                                                                          MetaEntity.TRANSLUCENT,
                                                                          sceneEntityPart,
                                                                          new Vector3(0, 0, 254)
                                                                          );
                            m_BeamEntities.Add(m_UnchangedEntity.RootPart.UUID, beamGroup);
                        }

                        if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                        {
                            m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                            m_AuraEntities.Remove(UnchangedPart.UUID);
                        }
                        AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                      UnchangedPart.GetWorldPosition(),
                                                                      MetaEntity.TRANSLUCENT,
                                                                      new Vector3(0, 0, 254),
                                                                      UnchangedPart.Scale
                                                                      );
                        m_AuraEntities.Add(UnchangedPart.UUID, auraGroup);
                        SetPartTransparency(metaEntityPart, MetaEntity.TRANSLUCENT);

                        DiffersFromSceneGroup = true;
                    }
                    else // no differences between scene part and meta part
                    {
                        if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                        {
                            m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                            m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                        }
                        if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                        {
                            m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                            m_AuraEntities.Remove(UnchangedPart.UUID);
                        }
                        SetPartTransparency(metaEntityPart, MetaEntity.NONE);
                    }
                }
                else  //The entity currently in the scene is missing parts from the metaentity saved, so mark parts red as deleted.
                {
                    if (m_AuraEntities.ContainsKey(UnchangedPart.UUID))
                    {
                        m_AuraEntities[UnchangedPart.UUID].HideFromAll();
                        m_AuraEntities.Remove(UnchangedPart.UUID);
                    }
                    AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                  UnchangedPart.GetWorldPosition(),
                                                                  MetaEntity.TRANSLUCENT,
                                                                  new Vector3(254, 0, 0),
                                                                  UnchangedPart.Scale
                                                                  );
                    m_AuraEntities.Add(UnchangedPart.UUID, auraGroup);
                    SetPartTransparency(metaEntityPart, MetaEntity.TRANSLUCENT);

                    DiffersFromSceneGroup = true;
                }
            }
            
            return changed;
        }
예제 #6
0
        /// <summary>
        /// Search for a corresponding group UUID in the scene. If not found, then the revisioned group this CMEntity represents has been deleted. Mark the metaentity appropriately.
        /// If a matching UUID is found in a scene object group, compare the two for differences. If differences exist, Mark the metaentity appropriately.
        /// </summary>
        public void FindDifferences()
        {
            List<EntityBase> sceneEntityList = new List<EntityBase>(m_Entity.Scene.GetEntities());
            DiffersFromSceneGroup = false;
            // if group is not contained in scene's list
            if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID))
            {
                foreach (SceneObjectPart part in m_UnchangedEntity.Parts)
                {
                    // if scene list no longer contains this part, display translucent part and mark with red aura
                    if (!ContainsKey(sceneEntityList, part.UUID))
                    {
                        // if already displaying a red aura over part, make sure its red
                        if (m_AuraEntities.ContainsKey(part.UUID))
                        {
                            m_AuraEntities[part.UUID].SetAura(new Vector3(254, 0, 0), part.Scale);
                        }
                        else
                        {
                            AuraMetaEntity auraGroup = new AuraMetaEntity(m_Entity.Scene,
                                                                          part.GetWorldPosition(),
                                                                          MetaEntity.TRANSLUCENT,
                                                                          new Vector3(254, 0, 0),
                                                                          part.Scale
                                                                          );
                            m_AuraEntities.Add(part.UUID, auraGroup);
                        }
                        SceneObjectPart metaPart = m_Entity.GetLinkNumPart(part.LinkNum);
                        SetPartTransparency(metaPart, MetaEntity.TRANSLUCENT);
                    }
                    // otherwise, scene will not contain the part. note: a group can not remove a part without changing group id
                }

                // a deleted part has no where to point a beam particle system,
                // if a metapart had a particle system (maybe it represented a moved part) remove it
                if (m_BeamEntities.ContainsKey(m_UnchangedEntity.RootPart.UUID))
                {
                    m_BeamEntities[m_UnchangedEntity.RootPart.UUID].HideFromAll();
                    m_BeamEntities.Remove(m_UnchangedEntity.RootPart.UUID);
                }

                DiffersFromSceneGroup = true;
            }
            // if scene list does contain group, compare each part in group for differences and display beams and auras appropriately
            else
            {
                MarkWithDifferences((SceneObjectGroup)GetGroupByUUID(sceneEntityList, m_UnchangedEntity.UUID));
            }
        }