diff --git a/DungeonShooting_Godot/DungeonShooting.csproj.old b/DungeonShooting_Godot/DungeonShooting.csproj.old deleted file mode 100644 index e36028f..0000000 --- a/DungeonShooting_Godot/DungeonShooting.csproj.old +++ /dev/null @@ -1,11 +0,0 @@ - - - net7.0 - true - - - - - - - \ No newline at end of file diff --git a/DungeonShooting_Godot/DungeonShooting.csproj.old.1 b/DungeonShooting_Godot/DungeonShooting.csproj.old.1 deleted file mode 100644 index 65ee589..0000000 --- a/DungeonShooting_Godot/DungeonShooting.csproj.old.1 +++ /dev/null @@ -1,11 +0,0 @@ - - - net7.0 - true - - - - - - - \ No newline at end of file diff --git a/DungeonShooting_Godot/DungeonShooting.csproj.old.2 b/DungeonShooting_Godot/DungeonShooting.csproj.old.2 deleted file mode 100644 index 543224c..0000000 --- a/DungeonShooting_Godot/DungeonShooting.csproj.old.2 +++ /dev/null @@ -1,11 +0,0 @@ - - - net7.0 - true - - - - - - - \ No newline at end of file diff --git a/DungeonShooting_Godot/DungeonShooting.csproj.old.3 b/DungeonShooting_Godot/DungeonShooting.csproj.old.3 deleted file mode 100644 index 36c02a1..0000000 --- a/DungeonShooting_Godot/DungeonShooting.csproj.old.3 +++ /dev/null @@ -1,11 +0,0 @@ - - - net7.0 - true - - - - - - - \ No newline at end of file diff --git a/DungeonShooting_Godot/prefab/role/Enemy0002.tscn b/DungeonShooting_Godot/prefab/role/Enemy0002.tscn index d20ba0e..6c5aa16 100644 --- a/DungeonShooting_Godot/prefab/role/Enemy0002.tscn +++ b/DungeonShooting_Godot/prefab/role/Enemy0002.tscn @@ -27,11 +27,12 @@ shader_parameter/outline_rainbow = false shader_parameter/outline_use_blend = true -[node name="Enemy0002" node_paths=PackedStringArray("ViewRay", "NavigationAgent2D", "NavigationPoint", "HurtArea", "HurtCollision", "InteractiveArea", "InteractiveCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_rikvp")] +[node name="Enemy0002" node_paths=PackedStringArray("ViewRay", "NavigationAgent2D", "NavigationPoint", "FirePoint", "HurtArea", "HurtCollision", "InteractiveArea", "InteractiveCollision", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_rikvp")] script = ExtResource("2_wjtfl") ViewRay = NodePath("ViewRay") NavigationAgent2D = NodePath("NavigationPoint/NavigationAgent2D") NavigationPoint = NodePath("NavigationPoint") +FirePoint = NodePath("AnimatedSprite/FirePoint") HurtArea = NodePath("HurtArea") HurtCollision = NodePath("HurtArea/HurtCollision") InteractiveArea = NodePath("InteractiveArea") diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json index d112d0d..f1e47bd 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start2/Preinstall.json @@ -1 +1 @@ -[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":0,"Y":0},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":16,"Y":26},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-16,"Y":25},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":37,"Y":-13},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-11,"Y":-12},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":10,"Y":-39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file +[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":0,"Y":0},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":16,"Y":26},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0003","Weight":100,"Attr":{"CurrAmmon":"12","ResidueAmmo":"90"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-16,"Y":25},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":37,"Y":-13},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-11,"Y":-12},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":10,"Y":-39},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-48,"Y":0},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"enemy0002","Weight":100,"Attr":{"Face":"0","Weapon":null},"Altitude":0,"VerticalSpeed":0}]}]]}] \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0008.cs b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0008.cs index e72de6d..b7d2de6 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0008.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0008.cs @@ -19,12 +19,12 @@ Master.RoleState.CalcFinalScatteringEvent -= CalcFinalScatteringEvent; } - private void CalcStartScatteringEvent(Weapon weapon, float originValue, RefValue refValue) + private void CalcStartScatteringEvent(float originValue, RefValue refValue) { refValue.Value *= 0.5f; } - private void CalcFinalScatteringEvent(Weapon weapon, float originValue, RefValue refValue) + private void CalcFinalScatteringEvent(float originValue, RefValue refValue) { refValue.Value *= 0.5f; } diff --git a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0009.cs b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0009.cs index ff94d5f..4fad8f8 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0009.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0009.cs @@ -19,12 +19,12 @@ Master.RoleState.CalcBulletDistanceEvent -= CalcBulletDistanceEvent; } - private void CalcBulletSpeedEvent(Weapon weapon, float originSpeed, RefValue speed) + private void CalcBulletSpeedEvent(float originSpeed, RefValue speed) { speed.Value += originSpeed * 0.25f; } - private void CalcBulletDistanceEvent(Weapon weapon, float originDistance, RefValue distance) + private void CalcBulletDistanceEvent(float originDistance, RefValue distance) { distance.Value += originDistance * 0.25f; } diff --git a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0010.cs b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0010.cs index 3e323e9..6e92d10 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0010.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0010.cs @@ -25,12 +25,12 @@ Master.RoleState.CalcBulletRepelEvent -= CalcBulletRepelEvent; } - private void CalcBulletCountEvent(Weapon weapon, int originCount, RefValue refValue) + private void CalcBulletCountEvent(int originCount, RefValue refValue) { refValue.Value += originCount; } - private void CalcBulletDeviationAngleEvent(Weapon weapon, float originAngle, RefValue refValue) + private void CalcBulletDeviationAngleEvent(float originAngle, RefValue refValue) { refValue.Value += Utils.Random.RandomRangeFloat(-8, 8); } @@ -45,14 +45,16 @@ refValue.Value = Mathf.Max(1, refValue.Value - Mathf.FloorToInt(refValue.Value * 0.35f)); } - private void CalcBulletSpeedEvent(Weapon weapon, float originSpeed, RefValue speed) + private void CalcBulletSpeedEvent(float originSpeed, RefValue speed) { speed.Value += originSpeed * Utils.Random.RandomRangeFloat(-0.05f, 0.05f); } - private void CalcBulletRepelEvent(Weapon weapon, float originRepel, RefValue repel) + private void CalcBulletRepelEvent(float originRepel, RefValue repel) { - if (weapon.Attribute.IsMelee || repel.Value < 0) + if (repel.Value < 0 || (Master is AdvancedRole advancedRole && + advancedRole.WeaponPack.ActiveItem != null && + advancedRole.WeaponPack.ActiveItem.Attribute.IsMelee)) { return; } diff --git a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0011.cs b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0011.cs index 025eb43..6485291 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0011.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0011.cs @@ -17,7 +17,7 @@ Master.RoleState.CalcBulletBounceCountEvent -= CalcBulletBounceCountEvent; } - private void CalcBulletBounceCountEvent(Weapon weapon, int originBounce, RefValue bounce) + private void CalcBulletBounceCountEvent(int originBounce, RefValue bounce) { bounce.Value += 2; } diff --git a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0012.cs b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0012.cs index bc65ac3..a24b0fc 100644 --- a/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0012.cs +++ b/DungeonShooting_Godot/src/game/activity/prop/buff/BuffProp0012.cs @@ -17,7 +17,7 @@ Master.RoleState.CalcBulletPenetrationEvent -= CalcBulletPenetrationEvent; } - private void CalcBulletPenetrationEvent(Weapon weapon, int origin, RefValue penetration) + private void CalcBulletPenetrationEvent(int origin, RefValue penetration) { penetration.Value += 1; } diff --git a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs index 7344daf..151b784 100644 --- a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs +++ b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs @@ -86,13 +86,13 @@ /// /// 武器初始散射值增量 /// - public event Action> CalcStartScatteringEvent; - public float CalcStartScattering(Weapon weapon, float value) + public event Action> CalcStartScatteringEvent; + public float CalcStartScattering(float value) { if (CalcStartScatteringEvent != null) { var result = new RefValue(value); - CalcStartScatteringEvent(weapon, value, result); + CalcStartScatteringEvent(value, result); return result.Value; } @@ -102,13 +102,13 @@ /// /// 武器最终散射值增量 /// - public event Action> CalcFinalScatteringEvent; - public float CalcFinalScattering(Weapon weapon, float value) + public event Action> CalcFinalScatteringEvent; + public float CalcFinalScattering(float value) { if (CalcFinalScatteringEvent != null) { var result = new RefValue(value); - CalcFinalScatteringEvent(weapon, value, result); + CalcFinalScatteringEvent(value, result); return result.Value; } @@ -118,13 +118,13 @@ /// /// 武器开火发射子弹数量 /// - public event Action> CalcBulletCountEvent; - public int CalcBulletCount(Weapon weapon, int count) + public event Action> CalcBulletCountEvent; + public int CalcBulletCount(int count) { if (CalcBulletCountEvent != null) { var result = new RefValue(count); - CalcBulletCountEvent(weapon, count, result); + CalcBulletCountEvent(count, result); return result.Value; } @@ -134,13 +134,13 @@ /// /// 子弹偏移角度, 角度制 /// - public event Action> CalcBulletDeviationAngleEvent; - public float CalcBulletDeviationAngle(Weapon weapon, float angle) + public event Action> CalcBulletDeviationAngleEvent; + public float CalcBulletDeviationAngle(float angle) { if (CalcBulletDeviationAngleEvent != null) { var result = new RefValue(angle); - CalcBulletDeviationAngleEvent(weapon, angle, result); + CalcBulletDeviationAngleEvent(angle, result); return result.Value; } @@ -150,13 +150,13 @@ /// /// 子弹速度 /// - public event Action> CalcBulletSpeedEvent; - public float CalcBulletSpeed(Weapon weapon, float speed) + public event Action> CalcBulletSpeedEvent; + public float CalcBulletSpeed(float speed) { if (CalcBulletSpeedEvent != null) { var result = new RefValue(speed); - CalcBulletSpeedEvent(weapon, speed, result); + CalcBulletSpeedEvent(speed, result); return result.Value; } @@ -166,13 +166,13 @@ /// /// 子弹射程 /// - public event Action> CalcBulletDistanceEvent; - public float CalcBulletDistance(Weapon weapon, float distance) + public event Action> CalcBulletDistanceEvent; + public float CalcBulletDistance(float distance) { if (CalcBulletDistanceEvent != null) { var result = new RefValue(distance); - CalcBulletDistanceEvent(weapon, distance, result); + CalcBulletDistanceEvent(distance, result); return result.Value; } @@ -182,13 +182,13 @@ /// /// 子弹击退 /// - public event Action> CalcBulletRepelEvent; - public float CalcBulletRepel(Weapon weapon, float distance) + public event Action> CalcBulletRepelEvent; + public float CalcBulletRepel(float distance) { if (CalcBulletRepelEvent != null) { var result = new RefValue(distance); - CalcBulletRepelEvent(weapon, distance, result); + CalcBulletRepelEvent(distance, result); return result.Value; } @@ -198,13 +198,13 @@ /// /// 子弹反弹次数 /// - public event Action> CalcBulletBounceCountEvent; - public int CalcBulletBounceCount(Weapon weapon, int distance) + public event Action> CalcBulletBounceCountEvent; + public int CalcBulletBounceCount(int distance) { if (CalcBulletBounceCountEvent != null) { var result = new RefValue(distance); - CalcBulletBounceCountEvent(weapon, distance, result); + CalcBulletBounceCountEvent(distance, result); return result.Value; } @@ -214,13 +214,13 @@ /// /// 子弹穿透次数 /// - public event Action> CalcBulletPenetrationEvent; - public int CalcBulletPenetration(Weapon weapon, int distance) + public event Action> CalcBulletPenetrationEvent; + public int CalcBulletPenetration(int distance) { if (CalcBulletPenetrationEvent != null) { var result = new RefValue(distance); - CalcBulletPenetrationEvent(weapon, distance, result); + CalcBulletPenetrationEvent(distance, result); return result.Value; } diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs index 4b6e5f3..baa6332 100644 --- a/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs +++ b/DungeonShooting_Godot/src/game/activity/role/enemy/Enemy.cs @@ -1,4 +1,5 @@  +using Config; using Godot; using NnormalState; @@ -135,7 +136,7 @@ public virtual void EnemyAttack() { Debug.Log("触发攻击"); - + FireManager.ShootBullet(this, ConvertRotation(0), ExcelConfig.BulletBase_List[0]); } protected override void Process(float delta) diff --git a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs index 9541182..bd7b4ba 100644 --- a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs +++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs @@ -1032,7 +1032,7 @@ var bulletCount = Utils.Random.RandomConfigRange(Attribute.FireBulletCountRange); if (Master != null) { - bulletCount = Master.RoleState.CalcBulletCount(this, bulletCount); + bulletCount = Master.RoleState.CalcBulletCount(bulletCount); fireRotation += Master.MountPoint.RealRotation; } else @@ -1490,8 +1490,8 @@ var finalScatteringRange = Attribute.FinalScatteringRange; if (Master != null) { - startScatteringRange = Master.RoleState.CalcStartScattering(this, startScatteringRange); - finalScatteringRange = Master.RoleState.CalcFinalScattering(this, finalScatteringRange); + startScatteringRange = Master.RoleState.CalcStartScattering(startScatteringRange); + finalScatteringRange = Master.RoleState.CalcFinalScattering(finalScatteringRange); } if (startScatteringRange <= finalScatteringRange) { @@ -1512,8 +1512,8 @@ var finalScatteringRange = Attribute.FinalScatteringRange; if (Master != null) { - startScatteringRange = Master.RoleState.CalcStartScattering(this, startScatteringRange); - finalScatteringRange = Master.RoleState.CalcFinalScattering(this, finalScatteringRange); + startScatteringRange = Master.RoleState.CalcStartScattering(startScatteringRange); + finalScatteringRange = Master.RoleState.CalcFinalScattering(finalScatteringRange); } if (startScatteringRange <= finalScatteringRange) { diff --git a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs index 1df0f76..de74723 100644 --- a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs +++ b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs @@ -141,7 +141,7 @@ //计算击退 if (TriggerRole != null) { - repel = TriggerRole.RoleState.CalcBulletRepel(this, repel); + repel = TriggerRole.RoleState.CalcBulletRepel(repel); } if (repel != 0) { diff --git a/DungeonShooting_Godot/src/game/manager/FireManager.cs b/DungeonShooting_Godot/src/game/manager/FireManager.cs index 95c1d88..1615c75 100644 --- a/DungeonShooting_Godot/src/game/manager/FireManager.cs +++ b/DungeonShooting_Godot/src/game/manager/FireManager.cs @@ -66,18 +66,14 @@ } /// - /// + /// 通 Role 对象直接发射子弹 /// - /// - /// - /// - /// public static IBullet ShootBullet(Role trigger, float fireRotation, ExcelConfig.BulletBase bullet) { - // if (bullet.Type == 1) //实体子弹 - // { - // return ShootSolidBullet(trigger, fireRotation, bullet); - // } + if (bullet.Type == 1) //实体子弹 + { + return ShootSolidBullet(trigger, fireRotation, bullet); + } return null; } @@ -108,12 +104,12 @@ data.Altitude = weapon.TriggerRole.GetFirePointAltitude(); var roleState = weapon.TriggerRole.RoleState; data.Harm = roleState.CalcDamage(data.Harm); - data.Repel = roleState.CalcBulletRepel(weapon, data.Repel); - data.FlySpeed = roleState.CalcBulletSpeed(weapon, data.FlySpeed); - data.MaxDistance = roleState.CalcBulletDistance(weapon, data.MaxDistance); - data.BounceCount = roleState.CalcBulletBounceCount(weapon, data.BounceCount); - data.Penetration = roleState.CalcBulletPenetration(weapon, data.Penetration); - deviationAngle = roleState.CalcBulletDeviationAngle(weapon, deviationAngle); + data.Repel = roleState.CalcBulletRepel(data.Repel); + data.FlySpeed = roleState.CalcBulletSpeed(data.FlySpeed); + data.MaxDistance = roleState.CalcBulletDistance(data.MaxDistance); + data.BounceCount = roleState.CalcBulletBounceCount(data.BounceCount); + data.Penetration = roleState.CalcBulletPenetration(data.Penetration); + deviationAngle = roleState.CalcBulletDeviationAngle(deviationAngle); if (weapon.TriggerRole.IsAi) //只有玩家使用该武器才能获得正常速度的子弹 { @@ -156,9 +152,9 @@ data.Altitude = weapon.TriggerRole.GetFirePointAltitude(); var roleState = weapon.TriggerRole.RoleState; data.Harm = roleState.CalcDamage(data.Harm); - data.Repel = roleState.CalcBulletRepel(weapon, data.Repel); - data.BounceCount = roleState.CalcBulletBounceCount(weapon, data.BounceCount); - deviationAngle = roleState.CalcBulletDeviationAngle(weapon, deviationAngle); + data.Repel = roleState.CalcBulletRepel(data.Repel); + data.BounceCount = roleState.CalcBulletBounceCount(data.BounceCount); + deviationAngle = roleState.CalcBulletDeviationAngle(deviationAngle); } else { @@ -175,4 +171,59 @@ //----------------------------------------------------------------------------------- + /// + /// 发射子弹的默认实现方式 + /// + private static Bullet ShootSolidBullet(Role role, float fireRotation, ExcelConfig.BulletBase bullet) + { + var data = new BulletData() + { + Weapon = null, + BulletBase = bullet, + TriggerRole = role, + Harm = Utils.Random.RandomConfigRange(bullet.HarmRange), + Repel = Utils.Random.RandomConfigRange(bullet.RepelRange), + MaxDistance = Utils.Random.RandomConfigRange(bullet.DistanceRange), + FlySpeed = Utils.Random.RandomConfigRange(bullet.SpeedRange), + VerticalSpeed = Utils.Random.RandomConfigRange(bullet.VerticalSpeed), + BounceCount = Utils.Random.RandomConfigRange(bullet.BounceCount), + Penetration = Utils.Random.RandomConfigRange(bullet.Penetration), + }; + + if (role is AdvancedRole advancedRole) + { + data.Position = advancedRole.MountPoint.GlobalPosition; + } + else if (role is Enemy enemy) + { + data.Position = enemy.FirePoint.GlobalPosition; + } + else + { + data.Position = role.AnimatedSprite.GlobalPosition; + } + + var deviationAngle = Utils.Random.RandomConfigRange(bullet.DeviationAngleRange); + data.Altitude = role.GetFirePointAltitude(); + var roleState = role.RoleState; + data.Harm = roleState.CalcDamage(data.Harm); + data.Repel = roleState.CalcBulletRepel(data.Repel); + data.FlySpeed = roleState.CalcBulletSpeed(data.FlySpeed); + data.MaxDistance = roleState.CalcBulletDistance(data.MaxDistance); + data.BounceCount = roleState.CalcBulletBounceCount(data.BounceCount); + data.Penetration = roleState.CalcBulletPenetration(data.Penetration); + deviationAngle = roleState.CalcBulletDeviationAngle(deviationAngle); + + // if (role.IsAi) //只有玩家使用该武器才能获得正常速度的子弹 + // { + // data.FlySpeed *= weapon.AiUseAttribute.AiAttackAttr.BulletSpeedScale; + // } + + data.Rotation = fireRotation + Mathf.DegToRad(deviationAngle); + //创建子弹 + var bulletInstance = ObjectManager.GetBullet(bullet.Prefab); + bulletInstance.InitData(data, role.AttackLayer); + return bulletInstance; + } + } \ No newline at end of file