r2mods/ilspy_dump/ror2_csproj/RoR2/TeleportOutController.cs

167 lines
4.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
public class TeleportOutController : NetworkBehaviour
{
[NonSerialized]
[SyncVar]
public GameObject target;
public ParticleSystem bodyGlowParticles;
public static string tpOutSoundString = "Play_UI_teleport_off_map";
private float fixedAge;
private const float warmupDuration = 2f;
public float delayBeforePlayingSFX = 1f;
private bool hasPlayedSFX;
private NetworkInstanceId ___targetNetId;
public GameObject Networktarget
{
get
{
return target;
}
[param: In]
set
{
SetSyncVarGameObject(value, ref target, 1u, ref ___targetNetId);
}
}
public static void AddTPOutEffect(CharacterModel characterModel, float beginAlpha, float endAlpha, float duration)
{
if ((bool)characterModel)
{
TemporaryOverlayInstance temporaryOverlayInstance = TemporaryOverlayManager.AddOverlay(characterModel.gameObject);
temporaryOverlayInstance.duration = duration;
temporaryOverlayInstance.animateShaderAlpha = true;
temporaryOverlayInstance.alphaCurve = AnimationCurve.EaseInOut(0f, beginAlpha, 1f, endAlpha);
temporaryOverlayInstance.destroyComponentOnEnd = true;
temporaryOverlayInstance.originalMaterial = LegacyResourcesAPI.Load<Material>("Materials/matTPInOut");
temporaryOverlayInstance.AddToCharacterModel(characterModel);
}
}
public override void OnStartClient()
{
base.OnStartClient();
if ((bool)target)
{
ModelLocator component = target.GetComponent<ModelLocator>();
if ((bool)component)
{
Transform modelTransform = component.modelTransform;
if ((bool)modelTransform)
{
CharacterModel component2 = modelTransform.GetComponent<CharacterModel>();
if ((bool)component2)
{
AddTPOutEffect(component2, 0f, 1f, 2f);
if (component2.baseRendererInfos.Length != 0)
{
Renderer renderer = component2.baseRendererInfos[component2.baseRendererInfos.Length - 1].renderer;
if ((bool)renderer)
{
ParticleSystem.ShapeModule shape = bodyGlowParticles.shape;
if (renderer is MeshRenderer)
{
shape.shapeType = ParticleSystemShapeType.MeshRenderer;
shape.meshRenderer = renderer as MeshRenderer;
}
else if (renderer is SkinnedMeshRenderer)
{
shape.shapeType = ParticleSystemShapeType.SkinnedMeshRenderer;
shape.skinnedMeshRenderer = renderer as SkinnedMeshRenderer;
}
}
}
}
}
}
}
bodyGlowParticles.Play();
}
public void FixedUpdate()
{
fixedAge += Time.fixedDeltaTime;
if (fixedAge >= delayBeforePlayingSFX && !hasPlayedSFX)
{
hasPlayedSFX = true;
Util.PlaySound(tpOutSoundString, target);
}
if (NetworkServer.active && fixedAge >= 2f && (bool)target)
{
GameObject teleportEffectPrefab = Run.instance.GetTeleportEffectPrefab(target);
if ((bool)teleportEffectPrefab)
{
EffectManager.SpawnEffect(teleportEffectPrefab, new EffectData
{
origin = target.transform.position
}, transmit: true);
}
UnityEngine.Object.Destroy(target);
}
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.Write(target);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.Write(target);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
___targetNetId = reader.ReadNetworkId();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
target = reader.ReadGameObject();
}
}
public override void PreStartClient()
{
if (!___targetNetId.IsEmpty())
{
Networktarget = ClientScene.FindLocalObject(___targetNetId);
}
}
}