/// <summary> /// 根据ChangeValue的值获取对应的值并返回 /// </summary> /// <param name="changeValue"></param> /// <returns></returns> private float GetValueByChangeValue(ParaChangeValue changeValue) { float value = 0; if (changeValue.argType == 0) { value = changeValue.arg0; } else if (changeValue.argType == 1) { Vector2 playerPos = new Vector2(Global.PlayerPos.x, Global.PlayerPos.y); Vector2 bulletPos = _bullet.GetPosition(); float angle = MathUtil.GetAngleBetweenXAxis(playerPos - bulletPos); value = angle; } else if (changeValue.argType == 2) { Vector2 targetPos = new Vector2(changeValue.arg0, changeValue.arg1); Vector2 bulletPos = _bullet.GetPosition(); float angle = MathUtil.GetAngleBetweenXAxis(targetPos - bulletPos); value = angle; } if (changeValue.offset != 0) { value += MTRandom.GetNextFloat(-changeValue.offset, changeValue.offset); } return(value); }
/// <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); }
/// <summary> /// 设置敌机子弹的直线运动参数 /// <para>bullet</para> /// <para>v</para> /// <para>vAngle</para> /// <para>bool isAimToPlayer</para> /// <para>acce</para> /// <para>accAngle</para> /// <para>maxV</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int EnemyBulletSetStraightParas(ILuaState luaState) { EnemyBulletBase bullet = luaState.ToUserData(-6) as EnemyBulletBase; float v = (float)luaState.ToNumber(-5); float angle = (float)luaState.ToNumber(-4); bool isAimToPlayer = luaState.ToBoolean(-3); float acce = (float)luaState.ToNumber(-2); float accAngle; if (luaState.Type(-1) == LuaType.LUA_TBOOLEAN) { accAngle = angle; } else { accAngle = (float)luaState.ToNumber(-1); } if (isAimToPlayer) { Vector2 playerPos = PlayerInterface.GetInstance().GetCharacter().GetPosition(); float relAngle = MathUtil.GetAngleBetweenXAxis(playerPos - bullet.GetPosition()); angle += relAngle; accAngle += relAngle; } bullet.SetStraightParas(v, angle, acce, accAngle); return(0); }
/// <summary> /// 做直线运动 /// <para>bullet 敌机子弹</para> /// <para>float v 速度</para> /// <para>float angle 速度方向</para> /// <para>bool isAimToPlayer 是否朝向玩家</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int EnemyBulletDoStraightMove(ILuaState luaState) { EnemyBulletBase bullet = luaState.ToUserData(-4) as EnemyBulletBase; float v = (float)luaState.ToNumber(-3); float angle = (float)luaState.ToNumber(-2); bool isAimToPlayer = luaState.ToBoolean(-1); luaState.Pop(4); if (isAimToPlayer) { Vector2 playerPos = PlayerInterface.GetInstance().GetCharacter().GetPosition(); angle += MathUtil.GetAngleBetweenXAxis(playerPos - bullet.GetPosition()); } bullet.DoStraightMove(v, angle); return(0); }