コード例 #1
0
        public static bool DesignatorExists(this DesignatorData designatorData)
        {
            bool rVal = true;

            if (!string.IsNullOrEmpty(designatorData.designationCategoryDef))
            {
                var designationCategory = DefDatabase <DesignationCategoryDef> .GetNamed(designatorData.designationCategoryDef, false);

                List <Designator> designators = designationCategory._resolvedDesignators();
                rVal &= designators.Exists(d => d.GetType() == designatorData.designatorClass);
            }
            if (designatorData.reverseDesignator)
            {
                rVal &= ReverseDesignatorDatabase_Extensions.Find(designatorData.designatorClass) != null;
            }
            return(rVal);
        }
コード例 #2
0
        public bool                         Inject(ModHelperDef def)
        {
            if (def.Designators.NullOrEmpty())
            {
                return(true);
            }

            foreach (var injectionSet in def.Designators)
            {
                if (!string.IsNullOrEmpty(injectionSet.designationCategoryDef))
                {
                    // Get the category
                    var designationCategory = DefDatabase <DesignationCategoryDef> .GetNamed(injectionSet.designationCategoryDef, false);

                    // First instatiate and inject the designator into the list of resolved designators
                    if (!injectionSet.DesignatorExists())
                    {
                        // Create the new designator
                        var designatorObject = (Designator)Activator.CreateInstance(injectionSet.designatorClass);
                        if (designatorObject == null)
                        {
                            CCL_Log.Message(string.Format("Unable to create instance of '{0}'", injectionSet.designatorClass));
                            return(false);
                        }

                        if (injectionSet.designatorNextTo == null)
                        {
                            // Inject the designator
                            designationCategory._resolvedDesignators().Add(designatorObject);
                        }
                        else
                        {
                            // Prefers to be beside a specific designator
                            var designatorIndex = designationCategory._resolvedDesignators().FindIndex(d => (
                                                                                                           (d.GetType() == injectionSet.designatorNextTo)
                                                                                                           ));

                            if (designatorIndex < 0)
                            {
                                // Other designator doesn't exist (yet?)
                                // Inject the designator at the end
                                designationCategory._resolvedDesignators().Add(designatorObject);
                            }
                            else
                            {
                                // Inject beside desired designator
                                designationCategory._resolvedDesignators().Insert(designatorIndex + 1, designatorObject);
                            }
                        }
                    }

                    // Now inject the designator class into the list of classes as a saftey net for another mod resolving the category
                    if (!designationCategory.specialDesignatorClasses.Exists(s => s == injectionSet.designatorClass))
                    {
                        if (injectionSet.designatorNextTo == null)
                        {
                            // Inject the designator class at the end of the list
                            designationCategory.specialDesignatorClasses.Add(injectionSet.designatorClass);
                        }
                        else
                        {
                            // Prefers to be beside a specific designator
                            var designatorIndex = designationCategory.specialDesignatorClasses.FindIndex(s => s == injectionSet.designatorNextTo);

                            if (designatorIndex < 0)
                            {
                                // Can't find desired designator class
                                // Inject the designator at the end
                                designationCategory.specialDesignatorClasses.Add(injectionSet.designatorClass);
                            }
                            else
                            {
                                // Inject beside desired designator class
                                designationCategory.specialDesignatorClasses.Insert(designatorIndex + 1, injectionSet.designatorClass);
                            }
                        }
                    }
                }
                if (injectionSet.reverseDesignator)
                {
                    if (ReverseDesignatorDatabase_Extensions.Find(injectionSet.designatorClass) == null)
                    {
                        ReverseDesignatorDatabase.AllDesignators.Add((Designator)Activator.CreateInstance(injectionSet.designatorClass));
                    }
                }
            }

            return(true);
        }