r2mods/ilspy_dump/ror2_csproj/RoR2/MoonBatteryMissionControlle...

194 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using EntityStates.Missions.Moon;
using EntityStates.MoonElevator;
using RoR2.UI;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
[RequireComponent(typeof(EntityStateMachine))]
public class MoonBatteryMissionController : NetworkBehaviour
{
[SerializeField]
private GameObject[] moonBatteries;
[SerializeField]
private GameObject[] elevators;
[SerializeField]
private int _numRequiredBatteries;
[SerializeField]
private string _objectiveToken;
private HoldoutZoneController[] batteryHoldoutZones;
private EntityStateMachine[] batteryStateMachines;
private EntityStateMachine[] elevatorStateMachines;
[SyncVar]
private int _numChargedBatteries;
public static MoonBatteryMissionController instance { get; private set; }
public int numChargedBatteries => _numChargedBatteries;
public int numRequiredBatteries => _numRequiredBatteries;
public string objectiveToken => _objectiveToken;
public int Network_numChargedBatteries
{
get
{
return _numChargedBatteries;
}
[param: In]
set
{
SetSyncVar(value, ref _numChargedBatteries, 1u);
}
}
public static event Action onInstanceChangedGlobal;
private void Awake()
{
List<HoldoutZoneController> list = new List<HoldoutZoneController>();
List<EntityStateMachine> list2 = new List<EntityStateMachine>();
for (int i = 0; i < moonBatteries.Length; i++)
{
if (moonBatteries[i] != null)
{
list.Add(moonBatteries[i].GetComponent<HoldoutZoneController>());
list2.Add(moonBatteries[i].GetComponent<EntityStateMachine>());
}
}
batteryHoldoutZones = list.ToArray();
batteryStateMachines = list2.ToArray();
List<EntityStateMachine> list3 = new List<EntityStateMachine>();
for (int j = 0; j < elevators.Length; j++)
{
if (elevators[j] != null)
{
list3.Add(elevators[j].GetComponent<EntityStateMachine>());
}
}
elevatorStateMachines = list3.ToArray();
}
private void OnEnable()
{
instance = SingletonHelper.Assign(instance, this);
MoonBatteryMissionController.onInstanceChangedGlobal?.Invoke();
ObjectivePanelController.collectObjectiveSources += OnCollectObjectiveSources;
for (int i = 0; i < batteryHoldoutZones.Length; i++)
{
batteryHoldoutZones[i].onCharged.AddListener(OnBatteryCharged);
}
}
private void OnDisable()
{
instance = SingletonHelper.Unassign(instance, this);
MoonBatteryMissionController.onInstanceChangedGlobal?.Invoke();
ObjectivePanelController.collectObjectiveSources -= OnCollectObjectiveSources;
for (int i = 0; i < batteryHoldoutZones.Length; i++)
{
batteryHoldoutZones[i].onCharged.RemoveListener(OnBatteryCharged);
}
}
private void OnCollectObjectiveSources(CharacterMaster master, List<ObjectivePanelController.ObjectiveSourceDescriptor> objectiveSourcesList)
{
if (_numChargedBatteries > 0 && _numChargedBatteries < _numRequiredBatteries)
{
objectiveSourcesList.Add(new ObjectivePanelController.ObjectiveSourceDescriptor
{
master = master,
objectiveType = typeof(MoonBatteryMissionObjectiveTracker),
source = this
});
}
}
private void OnBatteryCharged(HoldoutZoneController holdoutZone)
{
Network_numChargedBatteries = _numChargedBatteries + 1;
if (_numChargedBatteries < _numRequiredBatteries || !NetworkServer.active)
{
return;
}
for (int i = 0; i < batteryHoldoutZones.Length; i++)
{
if (batteryHoldoutZones[i].enabled)
{
batteryHoldoutZones[i].FullyChargeHoldoutZone();
batteryHoldoutZones[i].onCharged.RemoveListener(OnBatteryCharged);
}
}
batteryHoldoutZones = new HoldoutZoneController[0];
for (int j = 0; j < batteryStateMachines.Length; j++)
{
if (!(batteryStateMachines[j].state is MoonBatteryComplete))
{
batteryStateMachines[j].SetNextState(new MoonBatteryDisabled());
}
}
for (int k = 0; k < elevatorStateMachines.Length; k++)
{
elevatorStateMachines[k].SetNextState(new InactiveToReady());
}
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.WritePackedUInt32((uint)_numChargedBatteries);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.WritePackedUInt32((uint)_numChargedBatteries);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
_numChargedBatteries = (int)reader.ReadPackedUInt32();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
_numChargedBatteries = (int)reader.ReadPackedUInt32();
}
}
public override void PreStartClient()
{
}
}