示例#1
0
    public static int SetEffectFinish(ILuaState luaState)
    {
        STGEffectBase effect = luaState.ToUserData(-1) as STGEffectBase;

        luaState.Pop(1);
        effect.FinishEffect();
        return(0);
    }
示例#2
0
    public static int CreateEffectByType(ILuaState luaState)
    {
        EffectType    type   = (EffectType)luaState.ToInteger(-1);
        STGEffectBase effect = EffectsManager.GetInstance().CreateEffectByType(type);

        luaState.Pop(1);
        luaState.PushLightUserData(effect);
        return(1);
    }
示例#3
0
    public static int SetEffectToPos(ILuaState luaState)
    {
        STGEffectBase effect = luaState.ToUserData(-3) as STGEffectBase;
        float         posX   = (float)luaState.ToNumber(-2);
        float         posY   = (float)luaState.ToNumber(-1);

        effect.SetPosition(posX, posY);
        return(0);
    }
示例#4
0
    /// <summary>
    /// 根据名称结束特效
    /// </summary>
    /// <param name="name"></param>
    public void FinishEffectByName(string name)
    {
        STGEffectBase effect = GetEffectByName(name);

        if (effect != null)
        {
            effect.FinishEffect();
        }
    }
示例#5
0
    /// <summary>
    /// 根据名称拿到effect
    /// <para>string name 特效指定的名称</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int GetEffectByName(ILuaState luaState)
    {
        string name = luaState.ToString(-1);

        luaState.Pop(1);
        STGEffectBase effect = EffectsManager.GetInstance().GetEffectByName(name);

        luaState.PushLightUserData(effect);
        return(1);
    }
示例#6
0
    /// <summary>
    /// 将特效缓存到对象池中
    /// </summary>
    /// <param name="effect"></param>
    private void RestoreEffectToPool(STGEffectBase effect)
    {
        EffectType            type = effect.GetEffectType();
        Stack <STGEffectBase> stack;

        if (_effectPools.TryGetValue(type, out stack))
        {
            stack.Push(effect);
        }
    }
示例#7
0
    /// <summary>
    /// 获取STGEffect的实例
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    private STGEffectBase GetEffectFromPool(EffectType type)
    {
        Stack <STGEffectBase> stack  = null;
        STGEffectBase         effect = null;

        if (_effectPools.TryGetValue(type, out stack))
        {
            if (stack.Count > 0)
            {
                effect = stack.Pop();
            }
        }
        return(effect);
    }
示例#8
0
    public STGEffectBase CreateEffectByType(EffectType type)
    {
        STGEffectBase effect = GetEffectFromPool(type);

        if (effect == null)
        {
            switch (type)
            {
            case EffectType.SpriteEffect:
                effect = new STGSpriteEffect();
                break;

            case EffectType.ShakeEffect:
                effect = new ShakeEffect();
                break;

            case EffectType.BreakScreenEffect:
                effect = new STGBreakScreenEffect();
                break;

            case EffectType.BurstEffect:
                effect = new STGBurstEffect();
                break;

            case EffectType.ChargeEffect:
                effect = new STGChargeEffect();
                break;

            case EffectType.BulletEliminate:
                effect = new STGBulletEliminateEffect();
                break;

            case EffectType.EnemyEliminated:
                effect = new STGEnemyEliminatedEffect();
                break;

            case EffectType.PlayerDeadEffect:
                effect = new STGPlayerDeadEffect();
                break;
            }
        }
        if (effect != null)
        {
            effect.Init();
            _effectList.Add(effect);
            _effectsCount++;
        }
        return(effect);
    }