136 lines
3.5 KiB
C#
136 lines
3.5 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using System.Linq;
|
|
using System.IO;
|
|
|
|
using Barotrauma;
|
|
using HarmonyLib;
|
|
using Microsoft.Xna.Framework;
|
|
using QIDependencyInjection;
|
|
using Barotrauma.Items.Components;
|
|
|
|
namespace QuickInteractions
|
|
{
|
|
[Singleton]
|
|
public partial class Fabricators
|
|
{
|
|
[Dependency] public Logger Logger { get; set; }
|
|
[Dependency] public GameStageTracker GameStageTracker { get; set; }
|
|
|
|
// Dirty, but it's much simpler than removing this https://github.com/evilfactory/LuaCsForBarotrauma/blob/6da26ffa93eb1d94b8fec4add1847879e6b1c75d/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs#L428
|
|
public void MakeUngrabbable(Item item)
|
|
{
|
|
item.Prefab.GrabWhenSelected = false;
|
|
}
|
|
|
|
public void RestoreGrabability()
|
|
{
|
|
if (OutpostFabricator != null) OutpostFabricator.Prefab.GrabWhenSelected = true;
|
|
if (OutpostMedFabricator != null) OutpostMedFabricator.Prefab.GrabWhenSelected = true;
|
|
if (OutpostDeconstructor != null) OutpostDeconstructor.Prefab.GrabWhenSelected = true;
|
|
}
|
|
|
|
private bool searchedThisRound = false;
|
|
// Too lazy to dry it
|
|
public void FindFabricators()
|
|
{
|
|
if (!Utils.RoundIsLive) return;
|
|
|
|
if (searchedThisRound) return;
|
|
searchedThisRound = true;
|
|
|
|
if (!Utils.IsThisAnOutpost || Level.Loaded.StartOutpost == null) return;
|
|
|
|
foreach (Item item in Item.ItemList)
|
|
{
|
|
if (item.Prefab.Identifier.Value == "fabricator")
|
|
{
|
|
if (item.Submarine == Level.Loaded.StartOutpost)
|
|
{
|
|
OutpostFabricator = item;
|
|
MakeUngrabbable(item);
|
|
}
|
|
}
|
|
|
|
if (item.Prefab.Identifier.Value == "medicalfabricator")
|
|
{
|
|
if (item.Submarine == Level.Loaded.StartOutpost)
|
|
{
|
|
outpostMedFabricator = item;
|
|
MakeUngrabbable(item);
|
|
}
|
|
}
|
|
|
|
if (item.Prefab.Identifier.Value == "deconstructor")
|
|
{
|
|
if (item.Submarine == Level.Loaded.StartOutpost)
|
|
{
|
|
outpostDeconstructor = item;
|
|
MakeUngrabbable(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<string> ItemsToFind = new List<string>()
|
|
{
|
|
"fabricator",
|
|
"medicalfabricator",
|
|
"deconstructor",
|
|
};
|
|
|
|
private Item outpostDeconstructor;
|
|
public Item OutpostDeconstructor
|
|
{
|
|
get
|
|
{
|
|
FindFabricators();
|
|
return outpostDeconstructor;
|
|
}
|
|
set => outpostDeconstructor = value;
|
|
}
|
|
|
|
private Item outpostFabricator;
|
|
public Item OutpostFabricator
|
|
{
|
|
get
|
|
{
|
|
FindFabricators();
|
|
return outpostFabricator;
|
|
}
|
|
set => outpostFabricator = value;
|
|
}
|
|
|
|
private Item outpostMedFabricator;
|
|
public Item OutpostMedFabricator
|
|
{
|
|
get
|
|
{
|
|
FindFabricators();
|
|
return outpostMedFabricator;
|
|
}
|
|
set => outpostMedFabricator = value;
|
|
}
|
|
|
|
public void AfterInject()
|
|
{
|
|
Mod.Instance.OnPluginLoad += FindFabricators;
|
|
GameStageTracker.OnRoundStart += () =>
|
|
{
|
|
searchedThisRound = false;
|
|
FindFabricators();
|
|
};
|
|
Mod.Instance.OnPluginUnload += RestoreGrabability;
|
|
GameStageTracker.OnRoundEnd += () =>
|
|
{
|
|
RestoreGrabability();
|
|
searchedThisRound = false;
|
|
OutpostFabricator = null;
|
|
OutpostDeconstructor = null;
|
|
OutpostMedFabricator = null;
|
|
};
|
|
}
|
|
}
|
|
} |