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