69 lines
2.8 KiB
C#
69 lines
2.8 KiB
C#
using Barotrauma.Items.Components;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
class AIObjectivePumpWater : AIObjectiveLoop<Pump>
|
|
{
|
|
public override string DebugTag => "pump water";
|
|
public override bool KeepDivingGearOn => true;
|
|
private readonly IEnumerable<Pump> pumpList;
|
|
|
|
public AIObjectivePumpWater(Character character, string option) : base(character, option)
|
|
{
|
|
pumpList = character.Submarine.GetItems(true).Select(i => i.GetComponent<Pump>()).Where(p => p != null);
|
|
}
|
|
|
|
public override float GetPriority(AIObjectiveManager objectiveManager)
|
|
{
|
|
if (character.Submarine == null) { return 0; }
|
|
if (objectiveManager.CurrentOrder == this && targets.Count > 0)
|
|
{
|
|
return AIObjectiveManager.OrderPriority;
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
public override bool IsDuplicate(AIObjective otherObjective) => otherObjective is AIObjectivePumpWater && otherObjective.Option == Option;
|
|
|
|
//availablePumps = allPumps.Where(p => !p.Item.HasTag("ballast") && p.Item.Connections.None(c => c.IsPower && p.Item.GetConnectedComponentsRecursive<Steering>(c).None())).ToList();
|
|
protected override void FindTargets()
|
|
{
|
|
if (option == null) { return; }
|
|
foreach (Item item in Item.ItemList)
|
|
{
|
|
if (item.HasTag("ballast")) { continue; }
|
|
if (item.Submarine == null) { continue; }
|
|
if (item.Submarine.TeamID != character.TeamID) { continue; }
|
|
if (character.Submarine != null && !character.Submarine.IsEntityFoundOnThisSub(item, true)) { continue; }
|
|
var pump = item.GetComponent<Pump>();
|
|
if (pump != null)
|
|
{
|
|
if (!ignoreList.Contains(pump))
|
|
{
|
|
if (option == "stoppumping")
|
|
{
|
|
if (!pump.IsActive || pump.FlowPercentage == 0.0f) { continue; }
|
|
}
|
|
else
|
|
{
|
|
if (!pump.Item.InWater) { continue; }
|
|
if (pump.IsActive && pump.FlowPercentage <= -90.0f) { continue; }
|
|
}
|
|
if (!targets.Contains(pump))
|
|
{
|
|
targets.Add(pump);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override bool Filter(Pump pump) => true;
|
|
protected override IEnumerable<Pump> GetList() => pumpList;
|
|
protected override AIObjective ObjectiveConstructor(Pump pump) => new AIObjectiveOperateItem(pump, character, Option, false);
|
|
protected override float Average(Pump target) => 0;
|
|
}
|
|
}
|