r2mods/ilspy_dump/ror2_csproj/EntityStates.DroneWeaponsCh.../AimChainGun.cs

65 lines
1.5 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System.Collections.Generic;
using RoR2;
using UnityEngine;
namespace EntityStates.DroneWeaponsChainGun;
public class AimChainGun : BaseDroneWeaponChainGunState
{
[SerializeField]
public float minDuration;
[SerializeField]
public float maxEnemyDistanceToStartFiring;
[SerializeField]
public float searchRefreshSeconds;
private BullseyeSearch enemyFinder;
private float searchRefreshTimer;
public override void OnEnter()
{
base.OnEnter();
if (base.isAuthority)
{
enemyFinder = new BullseyeSearch();
enemyFinder.teamMaskFilter = TeamMask.allButNeutral;
enemyFinder.maxDistanceFilter = maxEnemyDistanceToStartFiring;
enemyFinder.maxAngleFilter = float.MaxValue;
enemyFinder.filterByLoS = true;
enemyFinder.sortMode = BullseyeSearch.SortMode.Angle;
if ((bool)bodyTeamComponent)
{
enemyFinder.teamMaskFilter.RemoveTeam(bodyTeamComponent.teamIndex);
}
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (!base.isAuthority || !(base.fixedAge > minDuration))
{
return;
}
searchRefreshTimer -= GetDeltaTime();
if (!(searchRefreshTimer < 0f))
{
return;
}
searchRefreshTimer = searchRefreshSeconds;
Ray aimRay = GetAimRay();
enemyFinder.searchOrigin = aimRay.origin;
enemyFinder.searchDirection = aimRay.direction;
enemyFinder.RefreshCandidates();
using IEnumerator<HurtBox> enumerator = enemyFinder.GetResults().GetEnumerator();
if (enumerator.MoveNext())
{
HurtBox current = enumerator.Current;
outer.SetNextState(new FireChainGun(current));
}
}
}