Example #1
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);
    }
Example #2
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 #3
0
    /// <summary>
    /// 设置混合模式
    /// <para>effect</para>
    /// <para>blendMode</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetSpriteEffectBlendMode(ILuaState luaState)
    {
        STGSpriteEffect effect    = luaState.ToUserData(-2) as STGSpriteEffect;
        eBlendMode      blendMode = (eBlendMode)luaState.ToInteger(-1);

        effect.SetBlendMode(blendMode);
        return(0);
    }
Example #4
0
    /// <summary>
    /// 设置SpriteEffect的尺寸
    /// <para>width</para>
    /// <para>height</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetSpriteEffectSize(ILuaState luaState)
    {
        STGSpriteEffect effect = luaState.ToUserData(-3) as STGSpriteEffect;
        float           width  = (float)luaState.ToNumber(-2);
        float           height = (float)luaState.ToNumber(-1);

        effect.SetSize(width, height);
        return(0);
    }
Example #5
0
    /// <summary>
    /// 设置SpriteEffect的缩放
    /// <para>scaleX</para>
    /// <para>scaleY</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetSpriteEffectScale(ILuaState luaState)
    {
        STGSpriteEffect effect = luaState.ToUserData(-3) as STGSpriteEffect;
        float           scaleX = (float)luaState.ToNumber(-2);
        float           scaleY = (float)luaState.ToNumber(-1);

        effect.SetScale(scaleX, scaleY);
        return(0);
    }
Example #6
0
    /// <summary>
    /// 设置材质的属性
    /// <para>spriteEffect</para>
    /// <para>propertyName 属性名称</para>
    /// <para>value 属性整型值</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectSetMatInt(ILuaState luaState)
    {
        STGSpriteEffect effect       = luaState.ToUserData(-3) as STGSpriteEffect;
        string          propertyName = luaState.ToString(-2);
        int             value        = luaState.ToInteger(-1);

        effect.SetMatInt(propertyName, value);
        return(0);
    }
Example #7
0
    /// <summary>
    /// 设置材质的属性
    /// <para>spriteEffect</para>
    /// <para>propertyName 属性名称</para>
    /// <para>value 属性浮点值</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectSetMatFloat(ILuaState luaState)
    {
        STGSpriteEffect effect       = luaState.ToUserData(-3) as STGSpriteEffect;
        string          propertyName = luaState.ToString(-2);
        float           value        = (float)luaState.ToNumber(-1);

        effect.SetMatFloat(propertyName, value);
        return(0);
    }
Example #8
0
    /// <summary>
    /// 设置SpriteEffect的旋转角度
    /// <para>effect</para>
    /// <para>angle 旋转的角度</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetSpriteRotation(ILuaState luaState)
    {
        STGSpriteEffect effect = luaState.ToUserData(-2) as STGSpriteEffect;
        float           angle  = (float)luaState.ToNumber(-1);

        luaState.Pop(2);
        effect.SetRotation(angle);
        return(0);
    }
Example #9
0
    /// <summary>
    /// 执行alpha缓动
    /// <para>effect</para>
    /// <para>[0,1] toAlpha</para>
    /// <para>int duration</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectChangeAlphaTo(ILuaState luaState)
    {
        STGSpriteEffect effect   = luaState.ToUserData(-3) as STGSpriteEffect;
        float           toAlpha  = (float)luaState.ToNumber(-2);
        int             duration = luaState.ToInteger(-1);

        effect.DoTweenAlpha(toAlpha, duration);
        return(0);
    }
Example #10
0
    /// <summary>
    /// 设置特殊的SpriteEffect
    /// <para>spriteEffect</para>
    /// <para>预制体名称</para>
    /// <para>layerId 层级</para>
    /// <para>是否缓存</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectSetPefab(ILuaState luaState)
    {
        STGSpriteEffect effect     = luaState.ToUserData(-4) as STGSpriteEffect;
        string          prefabName = luaState.ToString(-3);
        LayerId         layerId    = (LayerId)luaState.ToInteger(-2);
        bool            cached     = luaState.ToBoolean(-1);

        effect.SetPrefab(prefabName, layerId, cached);
        return(0);
    }
Example #11
0
    /// <summary>
    /// 使SpriteEffect在duration帧内旋转
    /// <para>旋转速度为rotateAngle</para>
    /// <para>SpriteEffect</para>
    /// <para>rotateAngle 旋转角速度</para>
    /// <para>duration 旋转周期</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectRotate(ILuaState luaState)
    {
        STGSpriteEffect effect      = luaState.ToUserData(-3) as STGSpriteEffect;
        float           rotateAngle = (float)luaState.ToNumber(-2);
        int             duration    = luaState.ToInteger(-1);

        luaState.Pop(3);
        effect.DoRotation(rotateAngle, duration);
        return(0);
    }
Example #12
0
    public static int SpriteEffectChangeHeightTo(ILuaState luaState)
    {
        STGSpriteEffect   effect    = luaState.ToUserData(-4) as STGSpriteEffect;
        float             toHeight  = (float)luaState.ToNumber(-3);
        int               duration  = luaState.ToInteger(-2);
        InterpolationMode scaleMode = (InterpolationMode)luaState.ToInteger(-1);

        effect.ChangeHeightTo(toHeight, duration, scaleMode);
        return(0);
    }
Example #13
0
    public static int SetSTGObjectProps(ILuaState luaState)
    {
        STGSpriteEffect effect     = luaState.ToUserData(-6) as STGSpriteEffect;
        string          atlasName  = luaState.ToString(-5);
        string          spriteName = luaState.ToString(-4);
        eBlendMode      blendMode  = (eBlendMode)luaState.ToInteger(-3);
        LayerId         layerId    = (LayerId)luaState.ToInteger(-2);
        bool            cached     = luaState.ToBoolean(-1);

        effect.SetSprite(atlasName, spriteName, blendMode, layerId, cached);
        return(0);
    }
    /// <summary>
    /// 创建自机子弹的击中特效
    /// </summary>
    /// <param name="effectParas">击中特效配置参数</param>
    protected virtual void CreateHitEffect(PlayerBulletHitEffectParas effectParas)
    {
        STGSpriteEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

        effect.SetSprite(effectParas.atlasName, effectParas.spriteName, effectParas.blendMode, effectParas.layerId, true);
        List <float[]> parasList = effectParas.effectParasList;
        int            listCount = parasList.Count;

        for (int i = 0; i < listCount; i++)
        {
            SetSpriteEffectParas(effect, parasList[i]);
        }
    }
Example #15
0
 public override void Clear()
 {
     _effect = null;
     _movementObjectTfList.Clear();
     _movementDataList.Clear();
     GameObject.Destroy(_masterSparkObject);
     _masterSparkObject = null;
     _masterSparkTf     = null;
     _sparkContainerTf  = null;
     _movementBodyTf    = null;
     _movementCount     = 0;
     _colliderRect      = null;
 }
    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;
        }
    }
 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);
     }
 }
Example #18
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);
    }
 /// <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 #20
0
    /// <summary>
    /// 根据属性创建指定的SpriteEffect
    /// <para>atlasName</para>
    /// <para>spriteName</para>
    /// <para>cached 是否缓存</para>
    /// <para>layerId 层级</para>
    /// <para>在层级中的顺序</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateSpriteEffectWithProps(ILuaState luaState)
    {
        string          atlasName    = luaState.ToString(-6);
        string          spriteName   = luaState.ToString(-5);
        eBlendMode      blendMode    = (eBlendMode)luaState.ToInteger(-4);
        LayerId         layerId      = (LayerId)luaState.ToInteger(-3);
        bool            cached       = luaState.ToBoolean(-2);
        int             orderInLayer = luaState.ToInteger(-1);
        STGSpriteEffect effect       = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

        effect.SetSprite(atlasName, spriteName, blendMode, layerId, cached);
        effect.SetOrderInLayer(orderInLayer);
        luaState.PushLightUserData(effect);
        return(1);
    }
Example #21
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 #22
0
    /// <summary>
    /// 设置材质的属性
    /// <para>spriteEffect</para>
    /// <para>propertyName 属性名称</para>
    /// <para>value 属性颜色值(16进制) 分别对应argb</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectSetMatColor(ILuaState luaState)
    {
        STGSpriteEffect effect       = luaState.ToUserData(-3) as STGSpriteEffect;
        string          propertyName = luaState.ToString(-2);
        int             value        = luaState.ToInteger(-1);
        int             b            = value & 0xff;

        value >>= 8;
        int g = value & 0xff;

        value >>= 8;
        int r = value & 0xff;

        value >>= 8;
        int a = value;

        effect.SetMatColor(propertyName, new Color(r / 256f, g / 256f, b / 256f, a / 256f));
        return(0);
    }
 public override void Clear()
 {
     if (_appearEffect != null)
     {
         _appearEffect.FinishEffect();
         _appearEffect = null;
     }
     SetOrderInLayer(0);
     if (_curAlpha != 1 || !_isOriginalColor)
     {
         _spRenderer.color = new Color(1, 1, 1, 1);
     }
     if (_scaleX != 1 || _scaleY != 1)
     {
         _trans.localScale = Vector3.one;
     }
     _spRenderer = null;
     _cfg        = null;
     base.Clear();
 }
Example #24
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);
    }
Example #25
0
    /// <summary>
    /// 设置spriteEffect的颜色
    /// <para>effect</para>
    /// <para>rValue</para>
    /// <para>gValue</para>
    /// <para>bValue</para>
    /// <para>optional aValue</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetSpriteEffectColor(ILuaState luaState)
    {
        int top = luaState.GetTop();

        // 检测带不带alpha
        if (top == 5)
        {
            STGSpriteEffect effect = luaState.ToUserData(-5) as STGSpriteEffect;
            float           rValue = (float)luaState.ToNumber(-4);
            float           gValue = (float)luaState.ToNumber(-3);
            float           bValue = (float)luaState.ToNumber(-2);
            float           aValue = (float)luaState.ToNumber(-1);
            effect.SetSpriteColor(rValue, gValue, bValue, aValue);
        }
        else if (top == 4)
        {
            STGSpriteEffect effect = luaState.ToUserData(-4) as STGSpriteEffect;
            float           rValue = (float)luaState.ToNumber(-3);
            float           gValue = (float)luaState.ToNumber(-2);
            float           bValue = (float)luaState.ToNumber(-1);
            effect.SetSpriteColor(rValue, gValue, bValue);
        }
        else if (top == 1)
        {
            STGSpriteEffect effect = luaState.ToUserData(-2) as STGSpriteEffect;
            long            color  = (long)luaState.ToNumber(-1);
            float           bValue = color & 0xff;
            color >>= 8;
            float gValue = color & 0xff;
            color >>= 8;
            float rValue = color & 0xff;
            color >>= 8;
            effect.SetSpriteColor(rValue / 255f, gValue / 255f, bValue / 255f);
        }
        return(0);
    }
Example #26
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);
    }
    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 #28
0
    public static bool Get(object o, TValue key, out TValue res)
    {
        STGSpriteEffect sprite = (STGSpriteEffect)o;

        res = new TValue();
        if (key.TtIsString())
        {
            switch (key.SValue())
            {
                #region 基础变量
            case "x":
            {
                res.SetNValue(sprite.GetPosition().x);
                return(true);
            }

            case "y":
            {
                res.SetNValue(sprite.GetPosition().y);
                return(true);
            }

            case "rot":
            {
                res.SetNValue(sprite.GetRotation());
                return(true);
            }

            case "dx":
            {
                res.SetNValue(sprite.dx);
                return(true);
            }

            case "dy":
            {
                res.SetNValue(sprite.dy);
                return(true);
            }

            case "SetPos":
            {
                res.SetClCsValue(_funcSetPos);
                return(true);
            }

            case "GetPos":
            {
                res.SetClCsValue(_funcGetPos);
                return(true);
            }

                #endregion
                #region 运动相关变量
            case "v":
            {
                res.SetNValue(sprite.velocity);
                return(true);
            }

            case "vx":
            {
                res.SetNValue(sprite.vx);
                return(true);
            }

            case "vy":
            {
                res.SetNValue(sprite.vy);
                return(true);
            }

            case "vAngle":
            {
                res.SetNValue(sprite.vAngle);
                return(true);
            }

            case "maxV":
            {
                res.SetNValue(sprite.maxVelocity);
                return(true);
            }

            case "acce":
            {
                res.SetNValue(sprite.acce);
                return(true);
            }

            case "accAngle":
            {
                res.SetNValue(sprite.accAngle);
                return(true);
            }

                #endregion
                #region STGObject类专属变量
            case "SetSprite":
            {
                res.SetClCsValue(_funcSetSprite);
                return(true);
            }

            case "SetColor":
            {
                res.SetClCsValue(_funcSetColor);
                return(true);
            }

            case "SetSize":
            {
                res.SetClCsValue(_funcSetSize);
                return(true);
            }

            case "ChangeAlphaTo":
            {
                res.SetClCsValue(_funcChangeAlphaTo);
                return(true);
            }

            case "SetBlendMode":
            {
                res.SetClCsValue(_funcSetBlendMode);
                return(true);
            }

            case "alpha":
            {
                res.SetNValue(sprite.alpha);
                return(true);
            }

            case "SetPrefab":
            {
                res.SetClCsValue(_funcSetPrefab);
                return(true);
            }

            case "SetMaterialFloat":
            {
                res.SetClCsValue(_funcSetMaterialFloat);
                return(true);
            }

            case "SetMaterialInt":
            {
                res.SetClCsValue(_funcSetMaterialInt);
                return(true);
            }

            case "SetMaterialColor":
            {
                res.SetClCsValue(_funcSetMaterialColor);
                return(true);
            }

                #endregion
                #region 运动类专属方法 ISTGMovable
            case "SetV":
            {
                res.SetClCsValue(_funcSetV);
                return(true);
            }

            case "SetAcce":
            {
                res.SetClCsValue(_funcSetAcce);
                return(true);
            }

            case "SetStraightParas":
            {
                res.SetClCsValue(_funcSetStraightParas);
                return(true);
            }

            case "SetPolarParas":
            {
                res.SetClCsValue(_funcSetPolarParas);
                return(true);
            }

            case "MoveTo":
            {
                res.SetClCsValue(_funcMoveTo);
                return(true);
            }

            case "MoveTowards":
            {
                res.SetClCsValue(_funcMoveTowards);
                return(true);
            }

                #endregion
                #region IAttachable
            case "AttachTo":
            {
                res.SetClCsValue(_funcAttachTo);
                return(true);
            }

            case "SetRelativePos":
            {
                res.SetClCsValue(_funcSetRelativePos);
                return(true);
            }

                #endregion
                #region ITaskExecuter
            case "AddTask":
            {
                res.SetClCsValue(_funcAddTask);
                return(true);
            }
                #endregion
            }
        }
        res.SetSValue(string.Format("GetField from userData fail!Invalid key {0} for type {1}", key, typeof(STGSpriteEffect).Name));
        return(false);
    }