mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-16 08:25:20 +01:00
75 lines
2.0 KiB
C#
75 lines
2.0 KiB
C#
using System;
|
|
using MoleMole.Config;
|
|
using UnityEngine;
|
|
|
|
namespace MoleMole
|
|
{
|
|
public class AbilityHitExplodeShotgunBulletMixin : AbilityHitExplodeBulletMixin
|
|
{
|
|
private HitExplodeShotgunBulletMixin config;
|
|
|
|
private BaseMonoEntity _attackTarget;
|
|
|
|
private int _hitCount;
|
|
|
|
public AbilityHitExplodeShotgunBulletMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config)
|
|
: base(instancedAbility, instancedModifier, config)
|
|
{
|
|
this.config = (HitExplodeShotgunBulletMixin)config;
|
|
}
|
|
|
|
public override void OnAbilityTriggered(EvtAbilityStart evt)
|
|
{
|
|
for (int i = 0; i < config.BulletNum; i++)
|
|
{
|
|
base.OnAbilityTriggered(evt);
|
|
}
|
|
_attackTarget = entity.GetAttackTarget();
|
|
_hitCount = config.MaxHitNum;
|
|
}
|
|
|
|
public override void OnRemoved()
|
|
{
|
|
base.OnRemoved();
|
|
}
|
|
|
|
protected override void InitBulletForward(AbilityTriggerBullet bullet)
|
|
{
|
|
float value = 10f;
|
|
if (_attackTarget != null)
|
|
{
|
|
value = Vector3.Distance(_attackTarget.XZPosition, actor.entity.XZPosition);
|
|
}
|
|
float t = Mathf.InverseLerp(config.ScatterDistanceMax, config.ScatterDistanceMin, value);
|
|
bullet.triggerBullet.transform.forward = actor.entity.transform.forward;
|
|
Vector2 insideUnitCircle = UnityEngine.Random.insideUnitCircle;
|
|
insideUnitCircle.x *= Mathf.Tan((float)Math.PI / 180f * Mathf.Lerp(config.ScatterAngleMinX, config.ScatterAngleMaxX, t));
|
|
insideUnitCircle.y *= Mathf.Tan((float)Math.PI / 180f * Mathf.Lerp(config.ScatterAngleMinY, config.ScatterAngleMaxY, t));
|
|
bullet.triggerBullet.transform.forward += Quaternion.FromToRotation(Vector3.forward, bullet.triggerBullet.transform.forward) * insideUnitCircle;
|
|
}
|
|
|
|
public override bool ListenEvent(BaseEvent evt)
|
|
{
|
|
if (evt is EvtBulletHit)
|
|
{
|
|
if (((EvtBulletHit)evt).hitEnvironment)
|
|
{
|
|
return base.ListenEvent(evt);
|
|
}
|
|
if (_hitCount == 0)
|
|
{
|
|
return false;
|
|
}
|
|
_hitCount--;
|
|
return base.ListenEvent(evt);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public override void Core()
|
|
{
|
|
base.Core();
|
|
}
|
|
}
|
|
}
|