r2mods/ilspy_dump/ror2_csproj/RoR2.Projectile/GatewayProjectileController.cs

163 lines
3.7 KiB
C#

using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2.Projectile;
[RequireComponent(typeof(ProjectileController))]
[RequireComponent(typeof(ProjectileTargetComponent))]
public class GatewayProjectileController : NetworkBehaviour, IInteractable
{
private ProjectileController projectileController;
private ProjectileTargetComponent projectileTargetComponent;
[SyncVar(hook = "SetLinkedObject")]
private GameObject linkedObject;
private GatewayProjectileController linkedGatewayProjectileController;
private NetworkInstanceId ___linkedObjectNetId;
public GameObject NetworklinkedObject
{
get
{
return linkedObject;
}
[param: In]
set
{
if (NetworkServer.localClientActive && !base.syncVarHookGuard)
{
base.syncVarHookGuard = true;
SetLinkedObject(value);
base.syncVarHookGuard = false;
}
SetSyncVarGameObject(value, ref linkedObject, 1u, ref ___linkedObjectNetId);
}
}
public string GetContextString(Interactor activator)
{
throw new NotImplementedException();
}
public Interactability GetInteractability(Interactor activator)
{
if (!linkedObject)
{
return Interactability.ConditionsNotMet;
}
return Interactability.Available;
}
public void OnInteractionBegin(Interactor activator)
{
throw new NotImplementedException();
}
public bool ShouldIgnoreSpherecastForInteractibility(Interactor activator)
{
return false;
}
public bool ShouldShowOnScanner()
{
return false;
}
public bool ShouldProximityHighlight()
{
return false;
}
private void SetLinkedObject(GameObject newLinkedObject)
{
if (linkedObject != newLinkedObject)
{
NetworklinkedObject = newLinkedObject;
linkedGatewayProjectileController = (linkedObject ? linkedObject.GetComponent<GatewayProjectileController>() : null);
if ((bool)linkedGatewayProjectileController)
{
linkedGatewayProjectileController.SetLinkedObject(base.gameObject);
}
}
}
private void Awake()
{
projectileController = GetComponent<ProjectileController>();
projectileTargetComponent = GetComponent<ProjectileTargetComponent>();
}
public override void OnStartServer()
{
base.OnStartServer();
if ((bool)projectileTargetComponent.target)
{
SetLinkedObject(projectileTargetComponent.target.gameObject);
return;
}
FireProjectileInfo fireProjectileInfo = default(FireProjectileInfo);
fireProjectileInfo.position = base.transform.position;
fireProjectileInfo.rotation = base.transform.rotation;
fireProjectileInfo.target = base.gameObject;
fireProjectileInfo.owner = projectileController.owner;
fireProjectileInfo.speedOverride = 0f;
fireProjectileInfo.projectilePrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/GatewayProjectile");
ProjectileManager.instance.FireProjectile(fireProjectileInfo);
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.Write(linkedObject);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.Write(linkedObject);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
___linkedObjectNetId = reader.ReadNetworkId();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
SetLinkedObject(reader.ReadGameObject());
}
}
public override void PreStartClient()
{
if (!___linkedObjectNetId.IsEmpty())
{
NetworklinkedObject = ClientScene.FindLocalObject(___linkedObjectNetId);
}
}
}