Exemple #1
0
        void MapClassicKey(IEntityEffect effect, bool allowReplacement)
        {
            byte groupIndex, subGroupIndex;

            BaseEntityEffect.ClassicEffectFamily family;

            // Must be an effect with classic key
            if (effect == null || effect.Properties.ClassicKey == 0)
            {
                return;
            }

            // Remove existing mapping if required
            if (classicEffectMapping.ContainsKey(effect.Properties.ClassicKey) && allowReplacement)
            {
                classicEffectMapping.Remove(effect.Properties.ClassicKey);
            }

            // Map classic key when defined - output error in case of classic key conflict
            BaseEntityEffect.ReverseClasicKey(effect.Properties.ClassicKey, out groupIndex, out subGroupIndex, out family);
            if (effect.Properties.ClassicKey != 0 && family == BaseEntityEffect.ClassicEffectFamily.Spells)
            {
                if (classicEffectMapping.ContainsKey(effect.Properties.ClassicKey))
                {
                    Debug.LogErrorFormat("EntityEffectBroker: Detected duplicate classic effect key for {0} ({1}, {2})", effect.Key, groupIndex, subGroupIndex);
                }
                else
                {
                    classicEffectMapping.Add(effect.Properties.ClassicKey, effect.Key);
                }
            }
        }
Exemple #2
0
        void Start()
        {
            // Create a dictionary of classic spells
            RebuildClassicSpellsDict();

            // Enumerate classes implementing an effect and create an instance to use as factory
            // TODO: Provide an external method for mods to register custom effects without reflections
            magicEffectTemplates.Clear();
            IEnumerable <BaseEntityEffect> effectTemplates = ReflectiveEnumerator.GetEnumerableOfType <BaseEntityEffect>();

            foreach (BaseEntityEffect effect in effectTemplates)
            {
                // Effect must present a key
                if (string.IsNullOrEmpty(effect.Key))
                {
                    continue;
                }

                // Store template
                // TODO: Allow effect overwrite for modded effects
                if (effect.VariantCount > 1)
                {
                    // Store one template per variant for multi-effects
                    for (int i = 0; i < effect.VariantCount; i++)
                    {
                        BaseEntityEffect variantEffect = CloneEffect(effect) as BaseEntityEffect;
                        variantEffect.CurrentVariant = i;
                        magicEffectTemplates.Add(variantEffect.Key, variantEffect);
                        IndexEffectRecipes(variantEffect);
                    }
                }
                else
                {
                    // Just store singleton effect
                    magicEffectTemplates.Add(effect.Key, effect);
                    IndexEffectRecipes(effect);
                }

                // Map classic key when defined - output error in case of classic key conflict
                // NOTE: Mods should also be able to replace classic effect - will need to handle substitutions later
                // NOTE: Not mapping effect keys for non spell effects at this time
                byte groupIndex, subGroupIndex;
                BaseEntityEffect.ClassicEffectFamily family;
                BaseEntityEffect.ReverseClasicKey(effect.Properties.ClassicKey, out groupIndex, out subGroupIndex, out family);
                if (effect.Properties.ClassicKey != 0 && family == BaseEntityEffect.ClassicEffectFamily.Spells)
                {
                    if (classicEffectMapping.ContainsKey(effect.Properties.ClassicKey))
                    {
                        Debug.LogErrorFormat("EntityEffectBroker: Detected duplicate classic effect key for {0} ({1}, {2})", effect.Key, groupIndex, subGroupIndex);
                    }
                    else
                    {
                        classicEffectMapping.Add(effect.Properties.ClassicKey, effect.Key);
                    }
                }
            }
        }