Recoil is calculated only after successful firing.

仅在成功开火后计算后座力。
This commit is contained in:
Cold-Mint 2024-10-05 10:53:07 +08:00
parent e718d78137
commit 407798b13b
Signed by: Cold-Mint
GPG Key ID: C5A9BF8A98E0CE99
4 changed files with 35 additions and 18 deletions

View File

@ -113,4 +113,6 @@ log_enter_the_screen,进入屏幕。,Enter screen,画面に移動。
log_exit_the_screen,退出屏幕。,Exit screen,画面を終了します。
log_failed_to_create_room_preview,创建{0}的房间预览图失败。,Failed to create a room preview of the {0}.,{0}の部屋のプレビューを作成できませんでした。
log_generated_item_is_empty,生成的物品{0}是空的吗{1}。,Generated item {0} is empty {1}.,生成したアイテム{0}は空ですか{1}。
log_projectile_generate_magic_is_null,没有装填可提供抛射体的法术。,There is no reload spell that provides projectiles.,射出体を提供するスペルを装填していません。
log_projectile_generate_magic_is_null,没有装填可提供抛射体的法术。,There is no reload spell that provides projectiles.,射出体を提供するスペルを装填していません。
log_projectile_scene_is_null,抛射体场景为空。,Projectile scene is empty.,射出体は空です。
log_projectile_is_null,抛射体为空。,Projectile scene is empty.,射出シーンは空です。
1 id zh en ja
113 log_exit_the_screen 退出屏幕。 Exit screen 画面を終了します。
114 log_failed_to_create_room_preview 创建{0}的房间预览图失败。 Failed to create a room preview of the {0}. {0}の部屋のプレビューを作成できませんでした。
115 log_generated_item_is_empty 生成的物品{0}是空的吗{1}。 Generated item {0} is empty {1}. 生成したアイテム{0}は空ですか{1}。
116 log_projectile_generate_magic_is_null 没有装填可提供抛射体的法术。 There is no reload spell that provides projectiles. 射出体を提供するスペルを装填していません。
117 log_projectile_scene_is_null 抛射体场景为空。 Projectile scene is empty. 射出体は空です。
118 log_projectile_is_null 抛射体为空。 Projectile scene is empty. 射出シーンは空です。

View File

@ -4,3 +4,8 @@ slogan_1,Kawaii!,Kawaii!,Kawaii!
slogan_2,魔法是想象的世界。,Magic is an imaginary world.,魔法は想像の世界です。
slogan_3,也试试《Minecraft》,Also try 'Minecraft'!,「Minecraft」もやってみて
slogan_4,也试试《Terraria》,Also try 'Terraria'!,「Terraria」もやってみて
slogan_5,也试试《Terraria》,Also try 'Terraria'!,「Terraria」もやってみて
slogan_6,游戏在bug上运行。,The game runs on a bug.,ゲームはバグで動作します。
slogan_7,こんにちは!,こんにちは!,こんにちは!
slogan_7,你好!,你好!,你好!
slogan_7,Hello,Hello,Hello
1 id zh en ja
4 slogan_2 魔法是想象的世界。 Magic is an imaginary world. 魔法は想像の世界です。
5 slogan_3 也试试《Minecraft》! Also try 'Minecraft'! 「Minecraft」もやってみて!
6 slogan_4 也试试《Terraria》! Also try 'Terraria'! 「Terraria」もやってみて!
7 slogan_5 也试试《Terraria》! Also try 'Terraria'! 「Terraria」もやってみて!
8 slogan_6 游戏在bug上运行。 The game runs on a bug. ゲームはバグで動作します。
9 slogan_7 こんにちは! こんにちは! こんにちは!
10 slogan_7 你好! 你好! 你好!
11 slogan_7 Hello! Hello! Hello!

View File

@ -182,29 +182,29 @@ public partial class ProjectileWeapon : WeaponTemplate
}
}
protected override void DoFire(Node2D? owner, Vector2 enemyGlobalPosition)
protected override bool DoFire(Node2D? owner, Vector2 enemyGlobalPosition)
{
if (owner == null)
{
LogCat.LogError("owner_is_null");
return;
return false;
}
if (_marker2D == null)
{
LogCat.LogError("marker2d_is_null");
return;
return false;
}
if (GameSceneDepend.ProjectileContainer == null)
{
LogCat.LogError("projectile_container_is_null");
return;
return false;
}
if (_spellProjectileIndexes.Count == 0)
{
LogCat.LogError("projectile_generate_magic_is_null");
return;
return false;
}
var spellScope = GetSpellScope();
//The final spell is a projectile generator.
@ -213,7 +213,8 @@ public partial class ProjectileWeapon : WeaponTemplate
var packedScene = spellProjectile.GetProjectile();
if (packedScene == null)
{
return;
LogCat.LogError("projectile_scene_is_null");
return false;
}
for (var i = spellScope[0]; i <= spellScope[1]; i++)
{
@ -223,7 +224,11 @@ public partial class ProjectileWeapon : WeaponTemplate
for (var i = 0; i < NumberOfProjectiles; i++)
{
var projectile = NodeUtils.InstantiatePackedScene<Projectile>(packedScene);
if (projectile == null) return;
if (projectile == null)
{
LogCat.LogError("projectile_is_null");
return false;
}
for (var s = spellScope[0]; s <= spellScope[1]; s++)
{
var spell = _spells[s];
@ -241,5 +246,6 @@ public partial class ProjectileWeapon : WeaponTemplate
var spell = _spells[i];
spell.RestoreWeapon(this);
}
return true;
}
}

View File

@ -86,19 +86,19 @@ public abstract partial class WeaponTemplate : PickAbleTemplate
{
return;
}
if (owner is CharacterTemplate characterTemplate)
var result = DoFire(owner, enemyGlobalPosition);
if (result)
{
//We check the recoil of the weapon before each firing.
//我们在每次开火之前,检查武器的后坐力。
if (_recoilStrength != 0)
if (owner is CharacterTemplate characterTemplate)
{
characterTemplate.AddForce(enemyGlobalPosition.DirectionTo(characterTemplate.GlobalPosition) * _recoilStrength * Config.CellSize);
if (_recoilStrength != 0)
{
characterTemplate.AddForce(enemyGlobalPosition.DirectionTo(characterTemplate.GlobalPosition) * _recoilStrength * Config.CellSize);
}
}
}
_audioStreamPlayer2D?.Play();
DoFire(owner, enemyGlobalPosition);
_audioStreamPlayer2D?.Play();
}
_lastFiringTime = nowTime;
}
@ -106,5 +106,9 @@ public abstract partial class WeaponTemplate : PickAbleTemplate
/// <para>Execute fire</para>
/// <para>执行开火</para>
/// </summary>
protected abstract void DoFire(Node2D? owner, Vector2 enemyGlobalPosition);
/// <returns>
///<para>Return Is the fire successful?</para>
///<para>返回是否成功开火?</para>
/// </returns>
protected abstract bool DoFire(Node2D? owner, Vector2 enemyGlobalPosition);
}