Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/DisembarkPerks/PerkBehaviors/UpgradeSubmarinePerk.cs
T
2024-10-22 17:29:04 +03:00

57 lines
2.1 KiB
C#

using System.Collections.Generic;
namespace Barotrauma.PerkBehaviors
{
internal class UpgradeSubmarinePerk : PerkBase
{
[Serialize("", IsPropertySaveable.Yes)]
public Identifier UpgradeIdentifier { get; set; }
[Serialize("", IsPropertySaveable.Yes)]
public Identifier CategoryIdentifier { get; set; }
[Serialize(0, IsPropertySaveable.Yes)]
public int Level { get; set; }
public override PerkSimulation Simulation
=> PerkSimulation.ServerAndClients;
public UpgradeSubmarinePerk(ContentXElement element, DisembarkPerkPrefab prefab) : base(element, prefab) { }
public override void ApplyOnRoundStart(IReadOnlyCollection<Character> teamCharacters, Submarine teamSubmarine)
{
if (teamSubmarine is null) { return; }
bool prefabFound = UpgradePrefab.Prefabs.TryGet(UpgradeIdentifier, out UpgradePrefab upgradePrefab);
bool categoryFound = UpgradeCategory.Categories.TryGet(CategoryIdentifier, out UpgradeCategory upgradeCategory);
if (!prefabFound)
{
DebugConsole.ThrowError($"{nameof(UpgradeSubmarinePerk)}: Upgrade prefab not found");
return;
}
if (upgradePrefab.IsWallUpgrade)
{
foreach (Structure structure in teamSubmarine.GetWalls(UpgradeManager.UpgradeAlsoConnectedSubs))
{
structure.AddUpgrade(new Upgrade(structure, upgradePrefab, Level), createNetworkEvent: true);
}
}
else if (categoryFound)
{
foreach (Item item in teamSubmarine.GetItems(UpgradeManager.UpgradeAlsoConnectedSubs))
{
if (upgradeCategory.CanBeApplied(item, upgradePrefab))
{
item.AddUpgrade(new Upgrade(item, upgradePrefab, Level), createNetworkEvent: true);
}
}
}
else
{
DebugConsole.ThrowError($"{nameof(UpgradeSubmarinePerk)}: Upgrade category not found");
}
}
}
}