예제 #1
0
        public Blueprint(string poolIdentifier, string name, Entity entity)
        {
            this.poolIdentifier = poolIdentifier;
            this.name = name;

            var allComponents = entity.GetComponents();
            var componentIndices = entity.GetComponentIndices();
            components = new ComponentBlueprint[allComponents.Length];
            for (int i = 0, componentsLength = allComponents.Length; i < componentsLength; i++) {
                components[i] = new ComponentBlueprint(componentIndices[i], allComponents[i]);
            }
        }
예제 #2
0
        internal void AddEntity(Entity mEntity)
        {
            _entities.Add(mEntity);

            foreach (var tag in mEntity.GetTags())
            {
                if (!_taggedEntities.ContainsKey(tag)) _taggedEntities.Add(tag, new HashSet<Entity>());
                _taggedEntities[tag].Add(mEntity);
            }

            foreach (var component in mEntity.GetComponents())
            {
                var componentType = component.GetType();

                if (!_componentEntities.ContainsKey(componentType))
                {
                    _componentEntities.Add(componentType, new HashSet<Entity>());
                    _components.Add(componentType, new HashSet<Component>());
                }

                _componentEntities[componentType].Add(mEntity);
                _components[componentType].Add(component);
            }
        }
예제 #3
0
        internal void RemoveEntity(Entity mEntity)
        {
            _entities.Remove(mEntity);

            foreach (var tag in mEntity.GetTags()) _taggedEntities[tag].Remove(mEntity);
            foreach (var component in mEntity.GetComponents())
            {
                var componentType = component.GetType();
                _componentEntities[componentType].Remove(mEntity);
                _components[componentType].Remove(component);
            }
        }
예제 #4
0
 public void UtilizeEntity(Entity entity)
 {
     var components = entity.GetComponents();
     entity.ClearComponents();
     AddToSync(entity, SyncState.Remove);
 }
예제 #5
0
        public static void DrawComponents(Context context, Entity entity, bool hideInBlueprintInspector = false)
        {
            bool[] unfoldedComponents;
            if(!_contextToUnfoldedComponents.TryGetValue(context, out unfoldedComponents)) {
                unfoldedComponents = new bool[context.totalComponents];
                for (int i = 0; i < unfoldedComponents.Length; i++) {
                    unfoldedComponents[i] = true;
                }
                _contextToUnfoldedComponents.Add(context, unfoldedComponents);
            }

            EntitasEditorLayout.BeginVerticalBox();
            {
                EntitasEditorLayout.BeginHorizontal();
                {
                    EditorGUILayout.LabelField("Components (" + entity.GetComponents().Length + ")", EditorStyles.boldLabel);
                    if(GUILayout.Button("▸", GUILayout.Width(21), GUILayout.Height(14))) {
                        for (int i = 0; i < unfoldedComponents.Length; i++) {
                            unfoldedComponents[i] = false;
                        }
                    }
                    if(GUILayout.Button("▾", GUILayout.Width(21), GUILayout.Height(14))) {
                        for (int i = 0; i < unfoldedComponents.Length; i++) {
                            unfoldedComponents[i] = true;
                        }
                    }
                }
                EntitasEditorLayout.EndHorizontal();

                EditorGUILayout.Space();

                var index = drawAddComponentMenu(entity, hideInBlueprintInspector);
                if(index >= 0) {
                    var componentType = entity.contextInfo.componentTypes[index];
                    var component = (IComponent)Activator.CreateInstance(componentType);
                    entity.AddComponent(index, component);
                }

                EditorGUILayout.Space();

                EntitasEditorLayout.BeginHorizontal();
                {
                    _componentNameSearchTerm = EditorGUILayout.TextField("Search", _componentNameSearchTerm);

                    const string clearButtonControlName = "Clear Button";
                    GUI.SetNextControlName(clearButtonControlName);
                    if(GUILayout.Button("x", GUILayout.Width(19), GUILayout.Height(14))) {
                        _componentNameSearchTerm = string.Empty;
                        GUI.FocusControl(clearButtonControlName);
                    }
                }
                EntitasEditorLayout.EndHorizontal();

                EditorGUILayout.Space();

                var indices = entity.GetComponentIndices();
                var components = entity.GetComponents();
                for (int i = 0; i < components.Length; i++) {
                    DrawComponent(unfoldedComponents, entity, indices[i], components[i]);
                }
            }
            EntitasEditorLayout.EndVertical();
        }