r2mods/ilspy_dump/ror2_csproj/RoR2/GenericEnergyComponent.cs

239 lines
4.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System.Runtime.InteropServices;
using Unity;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
public class GenericEnergyComponent : NetworkBehaviour
{
[SerializeField]
private float _capacity = 1f;
[SerializeField]
private float _chargeRate = 1f;
[SyncVar]
private Run.FixedTimeStamp referenceTime;
private float _internalChargeRate;
public bool hasEffectiveAuthority { get; private set; }
public float energy
{
get
{
if (internalChargeRate == 0f)
{
return (referenceTime - Run.FixedTimeStamp.zero) * capacity;
}
return Mathf.Clamp01(referenceTime.timeSince * internalChargeRate) * capacity;
}
set
{
float num = (capacity.Equals(0f) ? 0f : Mathf.Clamp01(value / capacity));
if (internalChargeRate == 0f)
{
NetworkreferenceTime = Run.FixedTimeStamp.zero + num;
}
else
{
NetworkreferenceTime = Run.FixedTimeStamp.now - num / internalChargeRate;
}
}
}
public float normalizedEnergy
{
get
{
if (capacity == 0f)
{
return 0f;
}
return Mathf.Clamp01(energy / capacity);
}
}
private float internalChargeRate
{
get
{
return _internalChargeRate;
}
set
{
if (_internalChargeRate != value)
{
float num = energy;
_internalChargeRate = value;
energy = num;
}
}
}
public float chargeRate
{
get
{
return _chargeRate;
}
set
{
if (_chargeRate != value)
{
float num = energy;
_chargeRate = value;
internalChargeRate = ((capacity != 0f) ? (_chargeRate / capacity) : 0f);
energy = num;
}
}
}
public float normalizedChargeRate
{
get
{
if (capacity == 0f)
{
return 0f;
}
return chargeRate / capacity;
}
set
{
chargeRate = ((capacity != 0f) ? (value * capacity) : 0f);
}
}
public float capacity
{
get
{
return _capacity;
}
set
{
if (value != _capacity)
{
float num = energy;
_capacity = value;
energy = num;
}
}
}
public Run.FixedTimeStamp NetworkreferenceTime
{
get
{
return referenceTime;
}
[param: In]
set
{
SetSyncVar(value, ref referenceTime, 1u);
}
}
private void UpdateAuthority()
{
hasEffectiveAuthority = Util.HasEffectiveAuthority(base.gameObject);
}
private void Awake()
{
UpdateAuthority();
internalChargeRate = ((capacity != 0f) ? (chargeRate / capacity) : 0f);
if (NetworkServer.active)
{
energy = capacity;
}
}
public override void OnStartAuthority()
{
base.OnStartAuthority();
UpdateAuthority();
}
public override void OnStopAuthority()
{
base.OnStopAuthority();
UpdateAuthority();
}
private void OnEnable()
{
internalChargeRate = ((capacity != 0f) ? (chargeRate / capacity) : 0f);
}
private void OnDisable()
{
internalChargeRate = 0f;
}
[Server]
public bool TakeEnergy(float amount)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Boolean RoR2.GenericEnergyComponent::TakeEnergy(System.Single)' called on client");
return false;
}
if (amount > energy)
{
return false;
}
energy -= amount;
return true;
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
GeneratedNetworkCode._WriteFixedTimeStamp_Run(writer, referenceTime);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
GeneratedNetworkCode._WriteFixedTimeStamp_Run(writer, referenceTime);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
referenceTime = GeneratedNetworkCode._ReadFixedTimeStamp_Run(reader);
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
referenceTime = GeneratedNetworkCode._ReadFixedTimeStamp_Run(reader);
}
}
public override void PreStartClient()
{
}
}