示例#1
0
        public int AmountOfStoredEntities(TypeCategory storageCategory, TypeCategory inventoryCategory,
                                          TagType requiredTagType = null, List <Entity> possibleRelatedEntities = null)
        {
            int amount = 0;

            // TODO: A typeCategoryToEntity Dictionary would speed this up
            if (typeCategoryToIOTs != null)
            {
                foreach (InputOutputType inputOutputType in typeCategoryToIOTs[storageCategory])
                {
                    EntityType entityType = (EntityType)inputOutputType;
                    if (entityTypeToEntityInScene.TryGetValue(entityType, out List <Entity> entities))
                    {
                        foreach (Entity entity in entities)
                        {
                            if (requiredTagType == null ||
                                (entity.HasTag(requiredTagType) && (possibleRelatedEntities == null ||
                                                                    possibleRelatedEntities.Any(x => entity.tags[requiredTagType].Select(y => y.relatedEntity).Contains(x)))))
                            {
                                amount += entity.inventoryType.GetTypeCategoryAmount(entity, inventoryCategory);
                            }
                        }
                    }
                }
            }
            return(amount);
        }
示例#2
0
        static public TypeGroup CreateTypeGroup(TypeCategory typeCategory)
        {
            TypeGroup typeGroup = CreateInstance <TypeGroup>();

            typeGroup.typeCategories = new List <TypeCategory>()
            {
                typeCategory
            };
            typeGroup.ResetCachedMatches();
            return(typeGroup);
        }
示例#3
0
        public bool IsCategoryOrAncestorOf(TypeCategory typeCategory)
        {
            if (typeCategory == this)
            {
                return(true);
            }
            else if (parent == null)
            {
                return(false);
            }

            return(parent.IsCategoryOrAncestorOf(typeCategory));
        }
示例#4
0
        private static void UpdateManagerTypeLists(PlayModeStateChange playModeStateChange)
        {
            if (playModeStateChange == PlayModeStateChange.ExitingEditMode)
            {
                TotalAIManager manager = Object.FindObjectOfType <TotalAIManager>();
                if (manager == null)
                {
                    Debug.LogError("No TotalAIManager in the scene - Please Fix.");
                    return;
                }

                TotalAIManager.CreateTypeLists(manager);

                TypeCategory.UpdateTypeCategoriesChildren();
            }
        }
示例#5
0
        public bool IsCategoryOrDescendantOf(TypeCategory typeCategory)
        {
            if (typeCategory == this)
            {
                return(true);
            }
            else if (children == null || children.Count == 0)
            {
                return(false);
            }

            foreach (TypeCategory child in children)
            {
                if (child.IsCategoryOrDescendantOf(typeCategory))
                {
                    return(true);
                }
            }
            return(false);
        }