예제 #1
0
        /// <summary>
        /// 转换为Camp类型
        /// </summary>
        /// <returns>The to.</returns>
        /// <param name="Flags">Flags.</param>
        public static CAMP switchTo(this EffectFlag Flags, CAMP self)
        {
            CAMP camp = CAMP.All;
            bool ck   = Flags.check(EffectFlag.Forbid_Enemy);

            if (ck)
            {
                CAMP enemy = self.Hostile();
                camp = camp.clear(enemy);
            }

            ck = Flags.check(EffectFlag.Forbid_Friendly);
            if (ck)
            {
                camp = camp.clear(self);
            }

            ck = Flags.check(EffectFlag.Forbid_Neutral);
            if (ck)
            {
                camp = camp.clear(CAMP.Neutral);
            }

            return(camp);
        }
예제 #2
0
        /// <summary>
        /// エフェクトの個別の使用フラグを取得します。
        /// </summary>
        private bool HasEffectFlag(EffectFlag flag)
        {
            if (!EffectEnabled)
            {
                return(false);
            }

            return((EffectFlag & flag) != 0);
        }
예제 #3
0
    public EffectHandle Play(
        Effect effect,
        EffectFlag flags,
        Transform parent    = null,
        Vector3?worldPos    = null,
        Quaternion?worldRot = null,
        Unit attachToUnit   = null
        )
    {
        if (effect == null)
        {
            return(new EffectHandle());
        }

        if (!effect.loop && 0 == (flags & EffectFlag.OneShot))
        {
            Dbg.LogWarnOnce(effect, "Tried to play {0} as one shot", effect);
            return(new EffectHandle());
        }

        if (effect.loop && 0 == (flags & EffectFlag.Looping))
        {
            Dbg.LogWarnOnce(effect, "Tried to play {0} as looping", effect);
            return(new EffectHandle());
        }

        var efx = GetEfxInst(effect.prefab);

        efx.Reset(effect);

#if UNITY_EDITOR
        string name = GarbageCache.GetName(effect);
        if (!efx.name.EndsWith(name))
        {
            efx.name = "EFX_" + name;
        }
#endif // UNITY_EDITOR
        if (parent != null)
        {
            efx.gameObject.transform.parent = parent;
        }

        efx.attachedToUnit     = attachToUnit;
        efx.transform.position = DetermineWorldPos(parent, worldPos, effect);
        efx.transform.rotation = DetermineWorldRotation(parent, worldRot, effect);

        efx.Play();

        return(new EffectHandle(efx));
    }
예제 #4
0
 public static EffectFlag clear(this EffectFlag flags, EffectFlag totest)
 {
     return(flags & ~totest);
 }
예제 #5
0
 public static EffectFlag set(this EffectFlag flags, EffectFlag totest)
 {
     return(flags | totest);
 }
예제 #6
0
 public static bool check(this EffectFlag flags, EffectFlag totest)
 {
     return((flags & totest) == totest);
 }