r2mods/ilspy_dump/ror2_csproj/RoR2.Items/MushroomBodyBehavior.cs

82 lines
2.1 KiB
C#

using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
namespace RoR2.Items;
public class MushroomBodyBehavior : BaseItemBodyBehavior
{
private static GameObject mushroomWardPrefab;
private const float baseHealFractionPerSecond = 0.045f;
private const float healFractionPerSecondPerStack = 0.0225f;
private GameObject mushroomWardGameObject;
private HealingWard mushroomHealingWard;
private TeamFilter mushroomWardTeamFilter;
[ItemDefAssociation(useOnServer = true, useOnClient = false)]
private static ItemDef GetItemDef()
{
return RoR2Content.Items.Mushroom;
}
[InitDuringStartup]
private static void Init()
{
AsyncOperationHandle<GameObject> asyncOperationHandle = LegacyResourcesAPI.LoadAsync<GameObject>("Prefabs/NetworkedObjects/MushroomWard");
asyncOperationHandle.Completed += delegate(AsyncOperationHandle<GameObject> x)
{
mushroomWardPrefab = x.Result;
};
}
private void FixedUpdate()
{
if (!NetworkServer.active)
{
return;
}
int num = stack;
bool flag = num > 0 && base.body.GetNotMoving();
float networkradius = base.body.radius + 1.5f + 1.5f * (float)num;
if ((bool)mushroomWardGameObject != flag)
{
if (flag)
{
mushroomWardGameObject = Object.Instantiate(mushroomWardPrefab, base.body.footPosition, Quaternion.identity);
mushroomWardTeamFilter = mushroomWardGameObject.GetComponent<TeamFilter>();
mushroomHealingWard = mushroomWardGameObject.GetComponent<HealingWard>();
NetworkServer.Spawn(mushroomWardGameObject);
}
else
{
Object.Destroy(mushroomWardGameObject);
mushroomWardGameObject = null;
}
}
if ((bool)mushroomHealingWard)
{
mushroomHealingWard.interval = 0.25f;
mushroomHealingWard.healFraction = (0.045f + 0.0225f * (float)(num - 1)) * mushroomHealingWard.interval;
mushroomHealingWard.healPoints = 0f;
mushroomHealingWard.Networkradius = networkradius;
}
if ((bool)mushroomWardTeamFilter)
{
mushroomWardTeamFilter.teamIndex = base.body.teamComponent.teamIndex;
}
}
private void OnDisable()
{
if ((bool)mushroomWardGameObject)
{
Object.Destroy(mushroomWardGameObject);
}
}
}