Example #1
0
        private void Explode()
        {
            STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

            effect.SetSprite("STGEffectAtlas", "TransparentCircle", eBlendMode.SoftAdditive, LayerId.STGNormalEffect, true);
            effect.SetExistDuration(30);
            effect.SetPosition(_curPos);
            effect.SetSize(128, 128);
            effect.ChangeWidthTo(192, 30, InterpolationMode.Linear);
            effect.ChangeHeightTo(192, 30, InterpolationMode.Linear);
            effect.DoFade(30);
            SoundManager.GetInstance().Play("se_explode", 0.1f);
            float        angle     = Random.Range(0f, 360f);
            List <Color> colorList = new List <Color> {
                new Color(1, 0, 0), new Color(0, 1, 0), new Color(0, 0, 1)
            };

            for (int i = 0; i < 12; i++)
            {
                effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;
                effect.SetSprite("STGReimuAtlas", "ReimuAHSCEffect", eBlendMode.SoftAdditive, LayerId.STGNormalEffect, true);
                effect.SetExistDuration(30);
                effect.SetPosition(_curPos);
                effect.DoStraightMove(Random.Range(4f, 6f), i * 30 + angle);
                int colorIndex = Random.Range(0, 3);
                effect.SetSpriteColor(colorList[colorIndex].r, colorList[colorIndex].g, colorList[colorIndex].b);
                effect.DoFade(30);
                effect.SetSize(128, 128);
                effect.ChangeWidthTo(64, 30, InterpolationMode.Linear);
                effect.ChangeHeightTo(64, 30, InterpolationMode.Linear);
            }
        }
Example #2
0
    /// <summary>
    /// 创建自定义的STGObject
    /// <para>string customizedName 自定义名称</para>
    /// <para>posX</para>
    /// <para>posY</para>
    /// <para>args...</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateCustomizedSTGObject(ILuaState luaState)
    {
        int    top            = luaState.GetTop();
        int    numArgs        = top - 3;
        string customizedName = luaState.ToString(-top);
        float  posX           = (float)luaState.ToNumber(-top + 1);
        float  posY           = (float)luaState.ToNumber(-top + 2);
        int    funcRef        = InterpreterManager.GetInstance().GetCustomizedFuncRef(customizedName, eCustomizedType.STGObject, eCustomizedFuncRefType.Init);

        luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef);
        STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

        effect.SetPosition(posX, posY);
        luaState.PushLightUserData(effect);
        // 复制参数
        int copyIndex = -numArgs - 2;

        for (int i = 0; i < numArgs; i++)
        {
            luaState.PushValue(copyIndex);
        }
        luaState.Call(numArgs + 1, 0);
        // 返回结果
        luaState.PushLightUserData(effect);
        return(1);
    }
 public void PlayGrazeEffect()
 {
     if (!_isGrazedDuringFrame)
     {
         _isGrazedDuringFrame = true;
         STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;
         effect.SetPrefab("GrazeEffect", LayerId.STGTopEffect, true);
         effect.SetPosition(_curPos);
         effect.SetExistDuration(36);
         float angle = Random.Range(0, 360);
         effect.DoStraightMove(0.6f, angle);
         SoundManager.GetInstance().Play("se_graze", 0.05f, false, true);
     }
 }
    private void UpdateAppearEffect()
    {
        _appearEffect.SetPosition(_curPos.x, _curPos.y);
        float factor = (float)_timeSinceCreated / AppearEffectExistDuration;
        float scaleX = Mathf.Lerp(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeTo, factor) * _scaleX;
        float scaleY = Mathf.Lerp(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeTo, factor) * _scaleY;

        _appearEffect.SetScale(scaleX, scaleY);
        if (_timeSinceCreated >= AppearEffectExistDuration)
        {
            //_appearEffect.FinishEffect();
            _appearEffect = null;
        }
    }
 /// <summary>
 /// 创建生成子弹时候的特效
 /// </summary>
 private void CreateAppearEffect()
 {
     if (_cfg.appearEffectSizeFrom == 0)
     {
         return;
     }
     _appearEffect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;
     _appearEffect.SetSprite(Consts.STGBulletsAtlasName, _cfg.appearEffectName, _cfg.blendMode, LayerId.EnemyBarrage, true);
     _appearEffect.SetOrderInLayer(10);
     _appearEffect.SetPosition(_curPos.x, _curPos.y);
     _appearEffect.SetScale(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeFrom);
     //_appearEffect.DoScaleWidth(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear);
     //_appearEffect.DoScaleHeight(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear);
     _appearEffect.DoFade(AppearEffectExistDuration);
 }
Example #6
0
    /// <summary>
    /// 创建一个精灵特效
    /// <para>string effectSpName</para>
    /// <para>float scaleX</para>
    /// <para>float scaleY</para>
    /// <para>float posX</para>
    /// <para>float posY</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateSpriteEffect(ILuaState luaState)
    {
        string effectSpName = luaState.ToString(-5);
        float  scaleX       = (float)luaState.ToNumber(-4);
        float  scaleY       = (float)luaState.ToNumber(-3);
        float  posX         = (float)luaState.ToNumber(-2);
        float  posY         = (float)luaState.ToNumber(-1);

        luaState.Pop(5);
        STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

        effect.SetSprite(effectSpName);
        effect.SetScale(scaleX, scaleY);
        effect.SetPosition(posX, posY);
        luaState.PushLightUserData(effect);
        return(1);
    }
Example #7
0
    public override void Start()
    {
        _masterSparkObject = ResourceManager.GetInstance().GetPrefab("Prefab/Character/MarisaA", "MasterSpark");
        UIManager.GetInstance().AddGoToLayer(_masterSparkObject, LayerId.PlayerBarage);
        _masterSparkTf = _masterSparkObject.transform;
        Vector2 playerPos = Global.PlayerPos;
        Vector3 pos       = new Vector3(playerPos.x + _posOffset.x, playerPos.y + _posOffset.y, MasterSparkPosZ);

        _masterSparkTf.localPosition = pos;
        Transform tf;

        for (int i = 0; i < MovementObjectCount; i++)
        {
            tf = _masterSparkTf.Find("SparkWave" + i);
            _movementObjectTfList.Add(tf);
        }
        _sparkContainerTf = _masterSparkTf.Find("SparkContainer");
        _movementBodyTf   = _sparkContainerTf.Find("MovementBody");
        // 黑底
        _effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;
        _effect.SetSprite("ShapeAtlas", "ShapeCircle", eBlendMode.Normal, LayerId.STGBottomEffect, false);
        _effect.SetSize(0, 0);
        _effect.SetSpriteColor(0, 0, 0, 1);
        _effect.ChangeWidthTo(1024, 50, InterpolationMode.EaseInQuad);
        _effect.ChangeHeightTo(1024, 50, InterpolationMode.EaseInQuad);
        _effect.SetPosition(playerPos.x, playerPos.y);
        // 基础属性
        _curState = 1;
        _time     = 0;
        _duration = 30;
        _isFinish = false;
        // 震动
        ShakeEffect shakeEffect = EffectsManager.GetInstance().CreateEffectByType(EffectType.ShakeEffect) as ShakeEffect;

        shakeEffect.DoShake(0, 270, 3, 3f, 1.5f, 5);
        // 音效
        SoundManager.GetInstance().Play("se_masterspark", 0.1f, false, true);
    }
    protected void SetSpriteEffectParas(STGSpriteEffect effect, float[] paras)
    {
        if (paras.Length == 0)
        {
            return;
        }
        switch ((int)paras[0])
        {
        // 设置位置,参数为增量
        case 1:
        {
            float dx      = paras[1];
            float offsetX = paras[2];
            float dy      = paras[3];
            float offsetY = paras[4];
            if (offsetX != 0)
            {
                dx += Random.Range(-offsetX, offsetX);
            }
            if (offsetY != 0)
            {
                dy += Random.Range(-offsetY, offsetY);
            }
            float sin  = Mathf.Sin(_curRotation * Mathf.Deg2Rad);
            float cos  = Mathf.Cos(_curRotation * Mathf.Deg2Rad);
            float relX = cos * dx - sin * dy;
            float relY = sin * dx + cos * dy;
            effect.SetPosition(_hitPos.x + relX, _hitPos.y + relY);
            break;
        }

        // 设置位置,参数为绝对位置
        case 2:
        {
            float posX    = paras[1];
            float offsetX = paras[2];
            float posY    = paras[3];
            float offsetY = paras[4];
            if (offsetX != 0)
            {
                posX += Random.Range(-offsetX, offsetX);
            }
            if (offsetY != 0)
            {
                posY += Random.Range(-offsetY, offsetY);
            }
            effect.SetPosition(posX, posY);
            break;
        }

        // 设置速度,v,dAngle,acce
        // 即速度,与当前速度方向的差值,加速度
        // dAngle为0则表示当前速度方向
        case 3:
        {
            float velocity = paras[1];
            float angle    = _curRotation + paras[2];
            float acce     = paras[3];
            effect.DoStraightMove(velocity, angle);
            effect.DoAcceleration(acce, angle);
            break;
        }

        // 设置速度,v,angle,acce
        // 即速度,速度方向,加速度
        case 4:
        {
            float velocity = paras[1];
            float angle    = paras[2];
            float acce     = paras[3];
            effect.DoStraightMove(velocity, angle);
            effect.DoAcceleration(acce, angle);
            break;
        }

        // 图像旋转角度
        // dRotationAngle,与当前子弹速度方向的差值
        case 5:
        {
            float angle = _curRotation + paras[1];
            effect.SetRotation(angle);
            break;
        }

        // 图像旋转角度
        // angle,指定角度
        case 6:
        {
            float angle = paras[1];
            effect.SetRotation(angle);
            break;
        }

        // 旋转
        // omega,角速度
        case 7:
        {
            float omega = paras[1];
            effect.DoRotation(omega, -1);
            break;
        }

        // orderInLayer
        case 9:
        {
            int orderInLayer = (int)paras[1];
            effect.SetOrderInLayer(orderInLayer);
            break;
        }

        // 设置alpha
        case 10:
        {
            float alpha = paras[1];
            effect.SetSpriteAlpha(alpha);
            break;
        }

        // 透明度渐变
        // toAlpha,duration
        case 11:
        {
            float toAlpha  = paras[1];
            int   duration = (int)paras[2];
            effect.DoTweenAlpha(toAlpha, duration);
            break;
        }

        // 设置颜色
        case 12:
        {
            float r = paras[1];
            float g = paras[2];
            float b = paras[3];
            effect.SetSpriteColor(r, g, b);
            break;
        }

        // 设置带alpha的颜色
        case 13:
        {
            float r      = paras[1];
            float g      = paras[2];
            float b      = paras[3];
            float aValue = paras[4];
            effect.SetSpriteColor(r, g, b, aValue);
            break;
        }

        // 设置缩放
        // scaleX,scaleY
        case 15:
        {
            float scaleX = paras[1];
            float scaleY = paras[2];
            effect.SetScale(scaleX, scaleY);
            break;
        }

        // 设置scaleX缩放动画
        // toScaleX duration
        case 16:
        {
            float toScaleX = paras[1];
            int   duration = (int)paras[2];
            effect.ChangeWidthTo(toScaleX, duration, InterpolationMode.Linear);
            break;
        }

        // 设置scaleY缩放动画
        // toScaleY duration
        case 17:
        {
            float toScaleY = paras[1];
            int   duration = (int)paras[2];
            effect.ChangeHeightTo(toScaleY, duration, InterpolationMode.Linear);
            break;
        }

        // 持续时间
        case 30:
        {
            int duration = (int)paras[1];
            effect.SetExistDuration(duration);
            break;
        }
        }
    }
Example #9
0
    public static bool Set(object o, TValue key, ref TValue value)
    {
        STGSpriteEffect sprite = (STGSpriteEffect)o;

        if (key.TtIsString())
        {
            switch (key.SValue())
            {
                #region 基础变量
            case "x":
            {
                Vector2 pos = sprite.GetPosition();
                pos.x = (float)value.NValue;
                sprite.SetPosition(pos);
                return(true);
            }

            case "y":
            {
                Vector2 pos = sprite.GetPosition();
                pos.y = (float)value.NValue;
                sprite.SetPosition(pos);
                return(true);
            }

            case "rot":
            {
                sprite.SetRotation((float)value.NValue);
                return(true);
            }

                #endregion
                #region 运动相关变量
            case "v":
            {
                sprite.velocity = (float)value.NValue;
                return(true);
            }

            case "vx":
            {
                sprite.vx = (float)value.NValue;
                return(true);
            }

            case "vy":
            {
                sprite.vy = (float)value.NValue;
                return(true);
            }

            case "vAngle":
            {
                sprite.vAngle = (float)value.NValue;
                return(true);
            }

            case "maxV":
            {
                sprite.maxVelocity = (float)value.NValue;
                return(true);
            }

            case "acce":
            {
                sprite.acce = (float)value.NValue;
                return(true);
            }

            case "accAngle":
            {
                sprite.accAngle = (float)value.NValue;
                return(true);
            }

                #endregion
                #region sprite专属变量
            case "orderInLayer":
            {
                sprite.SetOrderInLayer((int)value.NValue);
                return(true);
            }

            case "alpha":
            {
                sprite.SetSpriteAlpha((float)value.NValue);
                return(true);
            }
                #endregion
            }
        }
        value.SetSValue(string.Format("SetField of userData fail!Invalid key {0} for type {1}", key, typeof(STGSpriteEffect).Name));
        return(false);
    }