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]); } }
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); } }
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); } }
public void UtilizeEntity(Entity entity) { var components = entity.GetComponents(); entity.ClearComponents(); AddToSync(entity, SyncState.Remove); }
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(); }