/// <summary>
    /// 做加速运动(限制最大速度)
    /// <para>bullet 敌机子弹</para>
    /// <para>float acce 加速度</para>
    /// <para>float angle 速度方向 or bool useVAngle使用速度方向</para>
    /// <para>bool isAimToPlayer 是否朝向玩家</para>
    /// <para>float maxVelocity 最大速度限制</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int EnemyBulletDoAccelerationWithLimitation(ILuaState luaState)
    {
        EnemyBulletBase bullet = luaState.ToUserData(-5) as EnemyBulletBase;
        float           acce   = (float)luaState.ToNumber(-4);
        float           angle;

        if (luaState.Type(-3) == LuaType.LUA_TBOOLEAN)
        {
            bullet.GetBulletPara(BulletParaType.VAngel, out angle);
        }
        else
        {
            angle = (float)luaState.ToNumber(-3);
        }
        bool  isAimToPlayer = luaState.ToBoolean(-2);
        float maxVelocity   = (float)luaState.ToNumber(-1);

        luaState.Pop(5);
        if (isAimToPlayer)
        {
            Vector2 playerPos = PlayerInterface.GetInstance().GetCharacter().GetPosition();
            angle += MathUtil.GetAngleBetweenXAxis(playerPos - bullet.GetPosition());
        }
        bullet.DoAccelerationWithLimitation(acce, angle, maxVelocity);
        return(0);
    }
Пример #2
0
    private void CacheChangeData(BulletParasChangeData changeData)
    {
        changeData.isCached = true;
        float beginValue;

        if (!_bullet.GetBulletPara(changeData.paraType, out beginValue))
        {
            changeData.isFinish = true;
            Logger.LogWarn("ParasChange Warn :ParaType is not valid for bullet");
        }
        else
        {
            changeData.begin = beginValue;
            float value = GetValueByChangeValue(changeData.changeValue);
            switch (changeData.changeMode)
            {
            case ParaChangeMode.ChangeTo:
                changeData.end = value;
                break;

            case ParaChangeMode.IncBy:
                changeData.end = changeData.begin + value;
                break;

            case ParaChangeMode.DecBy:
                changeData.end = changeData.begin - value;
                break;
            }
        }
    }
    /// <summary>
    /// 获取子弹的属性
    /// <para>bullet</para>
    /// <para>BulletParaType paraType</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int GetBulletPara(ILuaState luaState)
    {
        EnemyBulletBase bullet   = luaState.ToUserData(-2) as EnemyBulletBase;
        BulletParaType  paraType = (BulletParaType)luaState.ToInteger(-1);

        luaState.Pop(2);
        float value;

        if (bullet.GetBulletPara(paraType, out value))
        {
            luaState.PushNumber(value);
            return(1);
        }
        Logger.LogWarn("BulletPara " + paraType + " in " + bullet.Type + " is not exist!");
        return(0);
    }