Exemple #1
0
        virtual protected internal Cv_EntityComponent[] ModifyEntity(Cv_Entity entity, XmlNodeList overrides)
        {
            var modifiedComponents = new List <Cv_EntityComponent>();

            foreach (XmlElement componentNode in overrides)
            {
                var componentID = Cv_EntityComponent.GetID(componentNode.Name);
                var component   = entity.GetComponent(componentID);

                if (component != null)
                {
                    component.VInitialize(componentNode);
                    component.VOnChanged();
                    modifiedComponents.Add(component);
                }
                else
                {
                    component = CreateComponent(componentNode);
                    if (component != null)
                    {
                        entity.AddComponent(component);
                        modifiedComponents.Add(component);
                    }
                }
            }

            return(modifiedComponents.ToArray());
        }
Exemple #2
0
        virtual protected internal Cv_Entity CreateEntity(string entityTypeResource, Cv_EntityID parent, Cv_EntityID serverEntityID, string resourceBundle, Cv_SceneID sceneID, string sceneName)
        {
            Cv_XmlResource resource;

            resource = Cv_ResourceManager.Instance.GetResource <Cv_XmlResource>(entityTypeResource, resourceBundle, CaravelApp.Instance.EditorRunning);

            XmlElement root = ((Cv_XmlResource.Cv_XmlData)resource.ResourceData).RootNode;

            if (root == null)
            {
                Cv_Debug.Error("Failed to load entity resource file: " + entityTypeResource);
                return(null);
            }

            Cv_EntityID entityId = serverEntityID;

            if (entityId == Cv_EntityID.INVALID_ENTITY)
            {
                lock (m_Mutex)
                {
                    entityId = GetNextEntityID();
                }
            }

            var entity = new Cv_Entity(entityId, resourceBundle, sceneName, sceneID);

            if (!entity.Initialize(entityTypeResource, root, parent))
            {
                Cv_Debug.Error("Failed to initialize entity: " + entityTypeResource);
                return(null);
            }

            foreach (var componentNode in root.ChildNodes)
            {
                if (componentNode.GetType() != typeof(XmlElement))
                {
                    continue;
                }

                var component = CreateComponent((XmlElement)componentNode);

                if (component != null)
                {
                    entity.AddComponent(component);
                }
                else
                {
                    return(null);
                }
            }

            return(entity);
        }