r2mods/ilspy_dump/ror2_csproj/RoR2/GauntletMissionController.cs

143 lines
3.0 KiB
C#

using System;
using EntityStates;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
public class GauntletMissionController : NetworkBehaviour
{
public class GauntletMissionBaseState : EntityState
{
protected GauntletMissionController gauntletMissionController => instance;
}
public class MissionCompleted : GauntletMissionBaseState
{
public override void OnEnter()
{
base.OnEnter();
base.gauntletMissionController.clearedEffect.SetActive(value: true);
}
}
[Header("Behavior Values")]
public float dleayBeforeStart;
public float timeLimit;
public float degenTickFrequency;
public float percentDegenPerSecond;
[Header("Cached Components")]
private EntityStateMachine mainStateMachine;
public GameObject[] gauntletShards;
public GameObject clearedEffect;
public GameObject gauntletPortal;
private bool gauntletEnd;
private bool slowDeathEffectActive;
private float degenTimer;
public static GauntletMissionController instance { get; private set; }
public static event Action onInstanceChangedGlobal;
private void Awake()
{
mainStateMachine = EntityStateMachine.FindByCustomName(base.gameObject, "Main");
}
private void OnEnable()
{
instance = SingletonHelper.Assign(instance, this);
GauntletMissionController.onInstanceChangedGlobal?.Invoke();
}
private void OnDisable()
{
instance = SingletonHelper.Unassign(instance, this);
GauntletMissionController.onInstanceChangedGlobal?.Invoke();
}
public void GauntletMissionTimesUp()
{
gauntletEnd = true;
mainStateMachine.SetNextState(new MissionCompleted());
}
private void OnPreGeneratePlayerSpawnPointsServer(SceneDirector sceneDirector, ref Action generationMethod)
{
generationMethod = GenerateGauntletShards;
}
private void GenerateGauntletShards()
{
_ = gauntletShards.LongLength;
}
private void FixedUpdate()
{
if (NetworkServer.active)
{
FixedUpdateServer();
}
}
[Server]
private void FixedUpdateServer()
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.GauntletMissionController::FixedUpdateServer()' called on client");
}
else
{
if (!gauntletEnd)
{
return;
}
degenTimer += Time.fixedDeltaTime;
if (!(degenTimer > 1f / degenTickFrequency))
{
return;
}
degenTimer -= 1f / degenTickFrequency;
foreach (TeamComponent teamMember in TeamComponent.GetTeamMembers(TeamIndex.Player))
{
float damage = percentDegenPerSecond / 100f / degenTickFrequency * teamMember.body.healthComponent.combinedHealth;
teamMember.body.healthComponent.TakeDamage(new DamageInfo
{
damage = damage,
position = teamMember.body.corePosition,
damageType = DamageType.Silent
});
}
}
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
bool result = default(bool);
return result;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
}
public override void PreStartClient()
{
}
}