public static bool IsArea(this TargetTypes baseFlags) { return(baseFlags.Category() == TargetSelections.AREA || baseFlags.Category() == TargetSelections.CONE); }
private void SelectEffectImplicitTargets(int effIndex, TargetTypes targetType, ref int processedEffectMask) { int effectMask = (1 << effIndex); // set the same target list for all effects // some spells appear to need this, however this requires more research switch (targetType.Category()) { case TargetSelections.NEARBY: case TargetSelections.CONE: case TargetSelections.AREA: // targets for effect already selected if ((effectMask & processedEffectMask) > 0) { return; } var currentEffect = GetEffect(effIndex); if (currentEffect != null) { // choose which targets we can select at once foreach (var effect in SpellEffects) { //for (uint32 j = effIndex + 1; j < MAX_SPELL_EFFECTS; ++j) if (effect == null || effect.EffectIndex <= effIndex) { continue; } if (currentEffect.TargetA == effect.TargetA && currentEffect.TargetB == effect.TargetB && currentEffect.CalcRadius(Caster, this) == effect.CalcRadius(Caster, this)) { effectMask |= 1 << effect.EffectIndex; } } } processedEffectMask |= effectMask; break; default: break; } switch (targetType.Category()) { case TargetSelections.CHANNEL: //SelectImplicitChannelTargets(effIndex, targetType); break; case TargetSelections.NEARBY: //SelectImplicitNearbyTargets(effIndex, targetType, effectMask); break; case TargetSelections.CONE: //SelectImplicitConeTargets(effIndex, targetType, effectMask); break; case TargetSelections.AREA: SelectImplicitAreaTargets(effIndex, targetType, effectMask); break; case TargetSelections.DEFAULT: #region Default Targets /*switch (targetType.GetObjectType()) * { * case TARGET_OBJECT_TYPE_SRC: * switch (targetType.GetReferenceType()) * { * case TARGET_REFERENCE_TYPE_CASTER: * m_targets.SetSrc(* m_caster); * break; * default: * ASSERT(false && "Spell::SelectEffectImplicitTargets: received not implemented select target reference type for TARGET_TYPE_OBJECT_SRC"); * break; * } * break; * case TARGET_OBJECT_TYPE_DEST: * switch (targetType.GetReferenceType()) * { * case TARGET_REFERENCE_TYPE_CASTER: * SelectImplicitCasterDestTargets(effIndex, targetType); * break; * case TARGET_REFERENCE_TYPE_TARGET: * SelectImplicitTargetDestTargets(effIndex, targetType); * break; * case TARGET_REFERENCE_TYPE_DEST: * SelectImplicitDestDestTargets(effIndex, targetType); * break; * default: * ASSERT(false && "Spell::SelectEffectImplicitTargets: received not implemented select target reference type for TARGET_TYPE_OBJECT_DEST"); * break; * } * break; * default: * switch (targetType.GetReferenceType()) * { * case TARGET_REFERENCE_TYPE_CASTER: * SelectImplicitCasterObjectTargets(effIndex, targetType); * break; * case TARGET_REFERENCE_TYPE_TARGET: * SelectImplicitTargetObjectTargets(effIndex, targetType); * break; * default: * ASSERT(false && "Spell::SelectEffectImplicitTargets: received not implemented select target reference type for TARGET_TYPE_OBJECT"); * break; * } * break; * }*/ #endregion break; case TargetSelections.NYI: Debug.LogErrorFormat("SPELL: Target type in spell #{0} is not implemented yet!", SpellInfo.Id); break; default: break; } }