Files
Cielonos/Assets/Scripts/MainGame/Characters/Automata/Enemies/L2_Assault_Stinger.cs
SoulliesOfficial 39b43680a9 爆更
2026-07-18 03:16:20 -04:00

83 lines
3.3 KiB
C#

using Cielonos.MainGame.Inventory;
using Cielonos.MainGame.UI;
using SLSUtilities.FunctionalAnimation;
using SLSUtilities.General;
using SLSUtilities.WwiseAssistance;
using UnityEngine;
namespace Cielonos.MainGame.Characters
{
public partial class L2_Assault_Stinger : Enemy
{
protected override void Start()
{
base.Start();
PlayerCanvas.EnemyInfoUIArea.CreateInfoUnit(this);
}
}
public partial class L2_Assault_Stinger
{
private const float BulletLifeTime = 10f;
private void FAPF_GenerateBullet(RuntimeFuncAnim rtFuncAnim)
{
CustomFunction.PC_StringString p = rtFuncAnim.GetParams<CustomFunction.PC_StringString>();
GenerateProjectile(p.str0, attackData[p.str1], player, 10);
}
private void FAPF_GenerateChargedBullet(RuntimeFuncAnim rtFuncAnim)
{
CustomFunction.PC_StringString p = rtFuncAnim.GetParams<CustomFunction.PC_StringString>();
GenerateChargedProjectile(p.str0, attackData[p.str1], player, 7.5f);
}
}
public partial class L2_Assault_Stinger
{
private void GenerateProjectile(string vfxName, AttackUnit attackUnit, CharacterBase target, float speed)
{
Transform muzzle = this.bodyPartsSc.GetPart("Muzzle");
vfxData.SpawnMuzzleVFX(vfxName, this, muzzle);
Projectile projectile = vfxData.SpawnVFX(vfxName, this, muzzle).GetComponentInChildren<Projectile>();
Vector3 direction = this.transform.forward.Flatten();
if (target != null)
{
direction = (target.CenterPoint.position - projectile.transform.position).normalized;
}
projectile.Initialize(this, null, false, 1, Fraction.Player)
.SetAttackSubmodule<Projectile>(attackUnit)
.SetTimeSubmodule<Projectile>(BulletLifeTime)
.SetHitSubmodule<Projectile>()
.SetLinearDirectionMoveModule<Projectile>(direction, speed)
.SetRaycastSubmodule<Projectile>(default, 0.25f, 0.5f)
.SetReactionSubmodule<Projectile>(true, false, false, true, false, false, true);
}
private void GenerateChargedProjectile(string vfxName, AttackUnit attackUnit, CharacterBase target, float speed)
{
Transform muzzle = this.bodyPartsSc.GetPart("Muzzle");
vfxData.SpawnMuzzleVFX(vfxName, this, muzzle);
Projectile projectile = vfxData.SpawnVFX(vfxName, this, muzzle).GetComponentInChildren<Projectile>();
Vector3 direction = this.transform.forward.Flatten();
if (target != null)
{
direction = (target.CenterPoint.position - projectile.transform.position).normalized;
}
projectile.Initialize(this, null, false, 1, Fraction.Player)
.SetAttackSubmodule<Projectile>(attackUnit)
.SetTimeSubmodule<Projectile>(BulletLifeTime)
.SetHitSubmodule<Projectile>()
.SetLinearDirectionMoveModule<Projectile>(direction, speed)
.SetRaycastSubmodule<Projectile>(default, 0.3f, 0.6f)
.SetReactionSubmodule<Projectile>(true, true, true, true, false, false, true);
projectile.SetImpulseSubmodule().WithDynamicForce(15f);
}
}
}