using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Projectile;
using Overseer.Components;
using Overseer.Content;
using Overseer.States;
using Overseer.Units;
using Overseer.Units.Defense;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;
using YAU.AddressableUtils;
using YAU.AddressableUtils.Assets;
using YAU.Attributes;
using YAU.Components;
using YAU.Constants;
using YAU.Content;
using YAU.ContentBases;
using YAU.Extensions.Enumeration;
using YAU.Extensions.Text;
using YAU.Helpers;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Overseer")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Overseer")]
[assembly: AssemblyTitle("Overseer")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Overseer
{
[ConfigSection("Overseer")]
public class Overseer : GenericBase<Overseer>
{
[CompilerGenerated]
private static class <>O
{
public static hook_IgnoreCollisionsWithOwner <0>__Ignore;
public static hook_TakeDamage <1>__WardenAbsorb;
public static hook_TakeDamage <2>__MarkedDamage;
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Func<CharacterModel, bool> <>9__2_0;
public static FilterCallback <>9__6_0;
internal bool <Initialize>b__2_0(CharacterModel x)
{
return Object.op_Implicit((Object)(object)x.body) && Object.op_Implicit((Object)(object)((Component)x.body).GetComponent<Marker>());
}
internal bool <AlliesDontEatShots>b__6_0(BulletAttack attack, ref BulletHit hit)
{
if (Object.op_Implicit((Object)(object)hit.hitHurtBox) && Object.op_Implicit((Object)(object)hit.hitHurtBox.healthComponent) && ((Component)hit.hitHurtBox.healthComponent.body).GetComponent<IUnitC>() != null)
{
return false;
}
return BulletAttack.DefaultFilterCallbackImplementation(attack, ref hit);
}
}
public SurvivorDef sdOverseer;
public GameObject OverseerBody;
public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
{
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Expected O, but got Unknown
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Expected O, but got Unknown
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Expected O, but got Unknown
((GenericBase)this).contentPack = pack;
sdOverseer = Main.assets.LoadAsset<SurvivorDef>("sdOverseer.asset");
OverseerBody = Main.assets.LoadAsset<GameObject>("OverseerBody.prefab");
OverseerBody.GetComponent<CameraTargetParams>().cameraParams = CharacterCameraParams.ccpStandard;
OverseerBody.GetComponent<CharacterBody>().preferredPodPrefab = GameObject.RoboCratePod;
((GenericBase)this).contentPack.RegisterGameObject(OverseerBody);
((GenericBase)this).contentPack.RegisterScriptableObject((ScriptableObject)(object)sdOverseer);
object obj = <>O.<0>__Ignore;
if (obj == null)
{
hook_IgnoreCollisionsWithOwner val = Ignore;
<>O.<0>__Ignore = val;
obj = (object)val;
}
ProjectileController.IgnoreCollisionsWithOwner += (hook_IgnoreCollisionsWithOwner)obj;
SetupLang();
OverlayManager.AddOverlay(Material.matPulverizedOverlay, (Func<CharacterModel, bool>)((CharacterModel x) => Object.op_Implicit((Object)(object)x.body) && Object.op_Implicit((Object)(object)((Component)x.body).GetComponent<Marker>())));
object obj2 = <>O.<1>__WardenAbsorb;
if (obj2 == null)
{
hook_TakeDamage val2 = WardenAbsorb;
<>O.<1>__WardenAbsorb = val2;
obj2 = (object)val2;
}
HealthComponent.TakeDamage += (hook_TakeDamage)obj2;
object obj3 = <>O.<2>__MarkedDamage;
if (obj3 == null)
{
hook_TakeDamage val3 = MarkedDamage;
<>O.<2>__MarkedDamage = val3;
obj3 = (object)val3;
}
HealthComponent.TakeDamage += (hook_TakeDamage)obj3;
}
private static void MarkedDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo info)
{
if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<Marker>()))
{
info.damage *= 1.25f;
}
orig.Invoke(self, info);
}
private static void WardenAbsorb(orig_TakeDamage orig, HealthComponent self, DamageInfo info)
{
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Expected O, but got Unknown
if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<OverseerController>()))
{
orig.Invoke(self, info);
return;
}
OverseerController component = ((Component)self).GetComponent<OverseerController>();
List<WardenController> list = new List<WardenController>();
foreach (IUnitC activeUnit in component.activeUnits)
{
if (Object.op_Implicit((Object)(object)activeUnit.GetSelf().GetComponent<WardenController>()))
{
list.Add(activeUnit.GetSelf().GetComponent<WardenController>());
}
}
if (list.Count() > 0)
{
float num = info.damage * 0.4f;
info.damage *= 0.6f;
float damage = num / (float)list.Count();
foreach (WardenController item in list)
{
item.body.healthComponent.TakeDamage(new DamageInfo
{
damage = damage,
position = ((Component)item).transform.position,
damageColorIndex = (DamageColorIndex)2
});
}
}
orig.Invoke(self, info);
}
private static void Ignore(orig_IgnoreCollisionsWithOwner orig, ProjectileController self, bool ignore)
{
orig.Invoke(self, ignore);
if (!Object.op_Implicit((Object)(object)self.owner) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>()) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<CharacterBody>().master) || !Object.op_Implicit((Object)(object)self.owner.GetComponent<OverseerController>()))
{
return;
}
foreach (IUnitC activeUnit in self.owner.GetComponent<OverseerController>().activeUnits)
{
Collider[] myColliders = self.myColliders;
foreach (Collider val in myColliders)
{
Physics.IgnoreCollision(activeUnit.GetSelf().GetComponentInChildren<Collider>(), val, true);
}
}
}
private static void AlliesDontEatShots(orig_Fire orig, BulletAttack self)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
if ((Delegate?)(object)self.filterCallback == (Delegate?)(object)BulletAttack.defaultFilterCallback)
{
object obj = <>c.<>9__6_0;
if (obj == null)
{
FilterCallback val = delegate(BulletAttack attack, ref BulletHit hit)
{
return (!Object.op_Implicit((Object)(object)hit.hitHurtBox) || !Object.op_Implicit((Object)(object)hit.hitHurtBox.healthComponent) || ((Component)hit.hitHurtBox.healthComponent.body).GetComponent<IUnitC>() == null) && BulletAttack.DefaultFilterCallbackImplementation(attack, ref hit);
};
<>c.<>9__6_0 = val;
obj = (object)val;
}
self.filterCallback = (FilterCallback)obj;
}
orig.Invoke(self);
}
private void SetupLang()
{
StringExtensions.Add("OVERSEER_NAME", "Overseer");
StringExtensions.Add("OVERSEER_PASSIVE1_NAME", "Defense System");
StringExtensions.Add("OVERSEER_PASSIVE1_DESC", "A defensive shield absorbs heavy hits. Regenerates 50% slower when assembling a unit.");
StringExtensions.Add("OVERSEER_PASSIVE2_NAME", "Vengeance Protocol");
StringExtensions.Add("OVERSEER_PASSIVE2_DESC", "Units <style=cIsUtility>seek out</style> targets on death, exploding for <style=cIsDamage>800%</style> damage.");
StringExtensions.Add("OVERSEER_PASSIVE3_NAME", "Swarm Commander");
StringExtensions.Add("OVERSEER_PASSIVE3_DESC", "Increase unit cap and unit assembly speed by <style=cIsDamage>200%</style>. Units are <style=cDeath>half as effective</style>.");
StringExtensions.Add("OVERSEER_PRIMARY_NAME", "Spectral Cascade");
StringExtensions.Add("OVERSEER_PRIMARY_DESC", "Fire a volley of 3 <style=cIsUtility>plasma blasts</style> for <style=cIsDamage>70% damage</style>. The last shot deals <style=cIsDamage>160%</style> and <style=cDeath>Marks</style> targets.");
StringExtensions.Add("OVERSEER_SECONDARY_NAME", "Discharge");
StringExtensions.Add("OVERSEER_SECONDARY_DESC", "<style=cIsUtility>Shocking</style>. Launch a burst of plasma for <style=cIsDamage>400% damage</style>. Units struck <style=cDeath>detonate</style> in an <style=cIsUtility>electrifying blast</style>.");
StringExtensions.Add("OVERSEER_UTILITY_NAME", "Beam Transmission");
StringExtensions.Add("OVERSEER_UTILITY_DESC", "Perform a short <style=cIsUtility>intangible</style> dash.");
StringExtensions.Add("OVERSEER_SPECIAL_NAME", "Reconfigure");
StringExtensions.Add("OVERSEER_SPECIAL_DESC", "Switch to <style=cIsUtility>producing</style> the next type of <style=cIsDamage>unit</style>.");
StringExtensions.Add("OVERSEER_SENTINEL_NAME", "Unit: Sentinel");
StringExtensions.Add("OVERSEER_SENTINEL_DESC", "An agile unit that fires piercing lasers for <style=cIsDamage>50% damage</style> and launches homing missiles for <style=cIsDamage>200% damage</style>.");
StringExtensions.Add("OVERSEER_MENDER_NAME", "Unit: Mender");
StringExtensions.Add("OVERSEER_MENDER_DESC", "A sturdy unit that <style=cIsHealing>repairs</style> you and nearby units.");
StringExtensions.Add("OVERSEER_BEACON_NAME", "Unit: Beacon");
StringExtensions.Add("OVERSEER_BEACON_DESC", "A fragile unit that overclocks you, <style=cIsUtility>increasing your speed</style>.");
StringExtensions.Add("OVERSEER_SWARMER_NAME", "Unit: Swarmer");
StringExtensions.Add("OVERSEER_SWARMER_DESC", "A fragile unit that performs quick ram attacks at targets for <style=cIsDamage>100% damage per second</style>.");
StringExtensions.Add("OVERSEER_WARDEN_NAME", "Unit: Warden");
StringExtensions.Add("OVERSEER_WARDEN_DESC", "A sturdy unit that redirects <style=cIsUtility>40%</style> of the damage taken by you and nearby units to itself.");
StringExtensions.Add("OVERSEER_VICTORY", "And so it left, ");
}
}
[BepInPlugin("pseudopulse.Overseer", "Overseer", "0.7.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Main : BaseUnityPlugin
{
public const string PluginGUID = "pseudopulse.Overseer";
public const string PluginAuthor = "pseudopulse";
public const string PluginName = "Overseer";
public const string PluginVersion = "0.7.0";
private const bool ShouldShowLog = false;
[StubShaders]
public static AssetBundle assets;
public static ManualLogSource ModLogger;
public static YAUContentPack contentPack;
public void Awake()
{
assets = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("Overseer.dll", "overseerbundle"));
ModLogger = ((BaseUnityPlugin)this).Logger;
contentPack = ContentPackManager.CreateContentPack(Assembly.GetExecutingAssembly(), "Overseer");
ContentScanner.ScanTypes<GenericBase>(Assembly.GetExecutingAssembly(), (Action<GenericBase>)delegate(GenericBase x)
{
x.Initialize(contentPack, ((BaseUnityPlugin)this).Config, "Overseer");
});
ConfigManager.HandleConfigAttributes(Assembly.GetExecutingAssembly(), ((BaseUnityPlugin)this).Config);
UnitCatalog.Initialize();
Dash.CreatePrefabs();
Material[] array = assets.LoadAllAssets<Material>();
foreach (Material val in array)
{
val.shader = Shader.HGStandard;
}
}
public static void Log(string text)
{
bool flag = true;
}
}
}
namespace Overseer.Units
{
[CreateAssetMenu(menuName = "Overseer/Action", fileName = "Action")]
public class UnitAction : ScriptableObject
{
public Sprite Icon;
public KeyCode ActivationKey;
public ActionType ActionType;
public string KeyCodeText;
}
public enum ActionType
{
Recall,
Retarget,
Terminate,
BuildOffense,
BuildDefense,
BuildSupport,
Cancel
}
public class SwarmerController : UnitController
{
private bool isCurrentlyInDashAttack = false;
private float stopwatch = 0f;
private float attackCooldown = Random.Range(1f, 3f);
private Vector3 forwardVec;
private float stopwatch2;
public ContactDamage contactDamage;
private bool shouldTarget = true;
public override HurtBox Target { get; set; }
public override void OverrideTarget(HurtBox newTarget)
{
Target = newTarget;
}
public override void PerformMovement(int totalUnits, int thisUnit)
{
if (isCurrentlyInDashAttack)
{
DashMovement();
}
else
{
OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 3.5f);
}
}
public override void PerformSecondaryAction()
{
}
public void DashMovement()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = Vector3.Lerp(((Component)this).transform.position, ((Component)this).transform.position + forwardVec * 3f, 20f * Time.fixedDeltaTime);
((Component)this).transform.position = position;
}
public void Cancel()
{
isCurrentlyInDashAttack = false;
}
public override void FixedUpdate()
{
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
base.FixedUpdate();
contactDamage.overlapAttack.attacker = ((Component)owner).gameObject;
if (!isCurrentlyInDashAttack)
{
stopwatch += Time.fixedDeltaTime;
}
Vector3 val;
if (stopwatch >= attackCooldown)
{
stopwatch = 0f;
attackCooldown = Random.Range(1f, 3f);
if (Object.op_Implicit((Object)(object)Target))
{
isCurrentlyInDashAttack = true;
val = ((Component)Target).transform.position - ((Component)this).transform.position;
forwardVec = ((Vector3)(ref val)).normalized;
((MonoBehaviour)this).Invoke("Cancel", 3f);
}
else
{
Target = FindNearbyEnemy();
}
}
if (!Object.op_Implicit((Object)(object)Target))
{
isCurrentlyInDashAttack = false;
}
if (Object.op_Implicit((Object)(object)Target) && !((Behaviour)Target).isActiveAndEnabled)
{
Target = null;
}
stopwatch2 += Time.fixedDeltaTime;
if (stopwatch2 >= 0.5f && isCurrentlyInDashAttack)
{
val = ((Component)Target).transform.position - ((Component)this).transform.position;
forwardVec = ((Vector3)(ref val)).normalized;
stopwatch2 = 0f;
}
if (isCurrentlyInDashAttack)
{
((Component)this).transform.rotation = Quaternion.identity;
((Component)this).transform.forward = forwardVec;
}
else
{
((Component)this).transform.rotation = Quaternion.Euler(-90f, 0f, 0f);
}
}
public override void Recall()
{
if (isCurrentlyInDashAttack)
{
isCurrentlyInDashAttack = false;
}
shouldTarget = !shouldTarget;
}
}
[CreateAssetMenu(menuName = "Overseer/Unit", fileName = "Unit")]
public class Unit : ScriptableObject
{
public string Name;
public string Description;
public Sprite Icon;
public GameObject Prefab;
public float AssemblyTime;
public UnitIndex UnitType;
public void Initialize()
{
}
}
public enum UnitIndex
{
Sentinel,
Swarmer,
Warden,
Mender,
Beacon,
Battery
}
public static class UnitCatalog
{
public static List<Unit> allUnits;
public static void Initialize()
{
allUnits = Main.assets.LoadAllAssets<Unit>().ToList();
foreach (Unit allUnit in allUnits)
{
allUnit.Initialize();
}
}
public static Unit GetUnitType(UnitIndex index)
{
return allUnits.FirstOrDefault((Unit x) => x.UnitType == index);
}
public static GameObject SpawnUnit(OverseerController owner, Unit type)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(type.Prefab, ((Component)owner).transform.position, Quaternion.identity);
IUnitC component = val.GetComponent<IUnitC>();
component.Initialize(owner);
NetworkServer.Spawn(val);
return val;
}
}
public interface IUnitC
{
HurtBox Target { get; set; }
Unit UnitType { get; set; }
TargetType TargetType { get; set; }
void OverrideTarget(HurtBox newTarget);
void PerformMovement(int totalUnits, int thisUnit);
void Recall();
void PerformSecondaryAction();
void Initialize(OverseerController owner);
void Destruct(bool ignoreVengeance = false);
GameObject GetSelf();
}
public abstract class UnitController : MonoBehaviour, IUnitC
{
public Unit type;
private Vector3 freeformTargetPos;
private float freeformUpdateStopwatch;
public CharacterBody body;
public OverseerController owner;
private bool hasRequestedDestruction = false;
private HurtBox destructionTarget;
private bool isDoingInfernalDestruction = false;
private float altFireStopwatch = 0f;
protected bool isOvercharged = false;
private float overchargeTimer = 0f;
public abstract HurtBox Target { get; set; }
public Unit UnitType
{
get
{
return type;
}
set
{
type = value;
}
}
public virtual TargetType TargetType { get; set; } = (TargetType)0;
public virtual float OrbitDistance { get; } = 3f;
public virtual float FreeformDistance { get; } = 3f;
public virtual bool OrbitalPivotIsTarget { get; } = false;
public abstract void OverrideTarget(HurtBox newTarget);
public abstract void PerformMovement(int totalUnits, int thisUnit);
public abstract void PerformSecondaryAction();
public abstract void Recall();
public GameObject GetSelf()
{
return ((Component)this).gameObject;
}
public void Initialize(OverseerController owner)
{
this.owner = owner;
body = ((Component)this).GetComponent<CharacterBody>();
}
public void Overcharge()
{
}
public void Destruct(bool ignoreVengenace = false)
{
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Expected O, but got Unknown
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
if (owner.isPassiveInfernal && !ignoreVengenace)
{
isDoingInfernalDestruction = true;
destructionTarget = FindNearbyEnemy();
if (Object.op_Implicit((Object)(object)destructionTarget))
{
freeformTargetPos = ((Component)destructionTarget).transform.position;
return;
}
}
EffectManager.SpawnEffect(GameObject.ExplosionDroneDeath, new EffectData
{
origin = ((Component)this).transform.position
}, true);
Object.Destroy((Object)(object)((Component)this).gameObject);
}
public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
if (!isDoingInfernalDestruction)
{
Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * OrbitDistance;
Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime);
((Component)this).transform.position = position;
}
}
public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset, float dist)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
if (!isDoingInfernalDestruction)
{
Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * dist;
Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime);
((Component)this).transform.position = position;
}
}
public void OrbitalMovement(int totalUnits, int thisUnit, float fullAngle, float offset, float dist, float vertoffset)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
if (!isDoingInfernalDestruction)
{
Vector3 val = (OrbitalPivotIsTarget ? ((Component)Target).transform.position : owner.body.corePosition) + Vector3.up * vertoffset + Quaternion.AngleAxis(fullAngle / (float)totalUnits * (float)thisUnit + offset, Vector3.up) * owner.body.characterDirection.forward * dist;
Vector3 position = Vector3.Lerp(((Component)this).transform.position, val, 20f * Time.fixedDeltaTime);
((Component)this).transform.position = position;
}
}
public void FreeformMovement()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = Vector3.Lerp(((Component)this).transform.position, freeformTargetPos, 2f * Time.fixedDeltaTime);
((Component)this).transform.position = position;
}
public virtual void FixedUpdate()
{
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_0291: Unknown result type (might be due to invalid IL or missing references)
//IL_0296: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
//IL_022d: Unknown result type (might be due to invalid IL or missing references)
//IL_0232: Unknown result type (might be due to invalid IL or missing references)
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Expected O, but got Unknown
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Expected O, but got Unknown
freeformUpdateStopwatch -= Time.fixedDeltaTime;
if (isOvercharged)
{
overchargeTimer -= Time.fixedDeltaTime;
if (overchargeTimer <= 0f)
{
isOvercharged = false;
}
}
altFireStopwatch -= Time.fixedDeltaTime;
if (altFireStopwatch <= 0f)
{
altFireStopwatch = Random.Range(3f, 6f);
PerformSecondaryAction();
}
if (isDoingInfernalDestruction)
{
if (Object.op_Implicit((Object)(object)destructionTarget))
{
freeformTargetPos = ((Component)destructionTarget).transform.position;
}
FreeformMovement();
if (Vector3.Distance(body.corePosition, freeformTargetPos) < 3f)
{
BlastAttack val = new BlastAttack();
val.baseDamage = owner.body.damage * 8f;
val.radius = 5f;
val.crit = false;
val.damageColorIndex = (DamageColorIndex)3;
val.falloffModel = (FalloffModel)0;
val.position = body.corePosition;
val.procChainMask = default(ProcChainMask);
val.procCoefficient = 1f;
val.attacker = ((Component)owner).gameObject;
val.teamIndex = (TeamIndex)1;
val.attackerFiltering = (AttackerFiltering)2;
val.Fire();
EffectManager.SpawnEffect(GameObject.OmniExplosionVFX, new EffectData
{
origin = body.corePosition,
scale = 5f
}, true);
AkSoundEngine.PostEvent(WwiseEvents.Play_wGiantJellyExplosion, ((Component)this).gameObject);
Object.Destroy((Object)(object)((Component)this).gameObject);
}
return;
}
if (freeformUpdateStopwatch <= 0f)
{
freeformUpdateStopwatch = 1f;
if (Object.op_Implicit((Object)(object)Target))
{
freeformTargetPos = Target.healthComponent.body.corePosition + Random.onUnitSphere * FreeformDistance;
freeformTargetPos.y = Target.healthComponent.body.corePosition.y + Random.Range(-0.5f, 1.5f);
}
else
{
freeformTargetPos = owner.body.corePosition + Random.onUnitSphere * FreeformDistance;
freeformTargetPos.y = owner.body.corePosition.y + Random.Range(-0.5f, 1.5f);
}
}
if (Object.op_Implicit((Object)(object)body) && !body.healthComponent.alive && !hasRequestedDestruction)
{
hasRequestedDestruction = true;
owner.RequestDestruction(this);
}
}
public HurtBox FindNearbyEnemy()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
SphereSearch val = new SphereSearch();
val.radius = (isDoingInfernalDestruction ? 300f : 60f);
val.origin = ((Component)this).transform.position;
val.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
val.RefreshCandidates();
val.OrderCandidatesByDistance();
val.FilterCandidatesByHurtBoxTeam(TeamMask.GetUnprotectedTeams((TeamIndex)1));
val.FilterCandidatesByDistinctHurtBoxEntities();
return val.GetHurtBoxes().FirstOrDefault();
}
}
[CreateAssetMenu(fileName = "UnitSkillDef", menuName = "Overseer/UnitSkillDef")]
public class UnitSkillDef : SkillDef
{
public Unit UnitType;
}
}
namespace Overseer.Units.Support
{
public class BeaconController : UnitController
{
private float stopwatch = 3f;
private float tpStopwatch = 0f;
private float tpDelay = 1f;
public override HurtBox Target { get; set; }
public override bool OrbitalPivotIsTarget => true;
public override float OrbitDistance => 4f;
public override float FreeformDistance => 5f;
public override TargetType TargetType => (TargetType)1;
public override void OverrideTarget(HurtBox newTarget)
{
}
public override void PerformMovement(int totalUnits, int thisUnit)
{
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Expected O, but got Unknown
tpStopwatch += Time.fixedDeltaTime;
if (!(tpStopwatch >= tpDelay))
{
return;
}
tpDelay = Random.Range(0.7f, 2f);
Vector3 position = ((Component)this).transform.position;
Vector3[] array = (from x in Utils.GetSafePositionsWithinDistance(((Component)Target).transform.position, 8f)
where HasLOS(x)
select x).ToArray();
if (array.Length != 0)
{
tpStopwatch = 0f;
Vector3 random = EnumeratorExtensions.GetRandom<Vector3>((IEnumerable<Vector3>)array, Run.instance.runRNG);
random += Vector3.up * 1.5f + Random.onUnitSphere;
if (!(Vector3.Distance(random, ((Component)this).transform.position) < 3f))
{
((Component)this).transform.position = random;
EffectManager.SpawnEffect(Dash.TPTracer, new EffectData
{
origin = random,
start = position,
scale = 0.6f
}, true);
}
}
}
public bool HasLOS(Vector3 pos)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((Component)Target).transform.position - pos;
return Physics.Raycast(pos, ((Vector3)(ref val)).normalized, 2000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
}
public override void PerformSecondaryAction()
{
}
public override void FixedUpdate()
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
base.FixedUpdate();
if (!Object.op_Implicit((Object)(object)Target))
{
Target = owner.body.mainHurtBox;
}
stopwatch += Time.fixedDeltaTime;
if (stopwatch >= 1f && Object.op_Implicit((Object)(object)Target) && Vector3.Distance(((Component)this).transform.position, ((Component)Target).transform.position) < 10f)
{
stopwatch = 0f;
Target.healthComponent.body.AddTimedBuff(BeaconSpeedBoost.BeaconSpeed, 3f);
}
}
public override void Recall()
{
Target = owner.body.mainHurtBox;
}
}
}
namespace Overseer.Units.Offense
{
public class SentinelController : UnitController
{
private bool isFreeform = true;
private float stopwatch = 0f;
public override HurtBox Target { get; set; }
public override void OverrideTarget(HurtBox newTarget)
{
Target = newTarget;
}
public override void PerformMovement(int totalUnits, int thisUnit)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)Target) || !isFreeform || !(Vector3.Distance(((Component)Target).transform.position, ((Component)this).transform.position) < 5f))
{
if (isFreeform)
{
FreeformMovement();
return;
}
float fullAngle = 0f;
float offset = 270f;
float dist = ((thisUnit >= totalUnits / 2) ? (-(thisUnit - totalUnits / 2) - 1) : (thisUnit + 1));
OrbitalMovement(totalUnits, thisUnit, fullAngle, offset, dist);
}
}
public override void PerformSecondaryAction()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
if (isFreeform || Object.op_Implicit((Object)(object)Target))
{
FireProjectileInfo val = default(FireProjectileInfo);
val.crit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null);
val.damage = owner.body.damage * 2f;
val.owner = ((Component)owner).gameObject;
val.position = ((Component)this).transform.position;
Vector3 val2 = ((isFreeform && Object.op_Implicit((Object)(object)Target)) ? (((Component)Target).transform.position - ((Component)this).transform.position) : (owner.AimPoint - ((Component)this).transform.position));
val.rotation = Util.QuaternionSafeLookRotation(((Vector3)(ref val2)).normalized);
val.projectilePrefab = GameObject.MissileProjectile;
ProjectileManager.instance.FireProjectile(val);
}
}
public override void FixedUpdate()
{
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
base.FixedUpdate();
stopwatch += Time.fixedDeltaTime;
if (Object.op_Implicit((Object)(object)Target) && !((Behaviour)Target).isActiveAndEnabled)
{
Target = null;
}
if (stopwatch >= 1f)
{
if (!Object.op_Implicit((Object)(object)Target))
{
Target = FindNearbyEnemy();
}
stopwatch = 0f;
if (Object.op_Implicit((Object)(object)Target) && isFreeform)
{
FireLaser();
}
else if (!isFreeform)
{
FireLaserFlank();
}
}
Vector3 val;
if (Object.op_Implicit((Object)(object)Target))
{
Transform transform = ((Component)this).transform;
val = ((Component)Target).transform.position - ((Component)this).transform.position;
transform.forward = ((Vector3)(ref val)).normalized;
}
if (!isFreeform)
{
Transform transform2 = ((Component)this).transform;
val = owner.AimPoint - ((Component)this).transform.position;
transform2.forward = ((Vector3)(ref val)).normalized;
}
if (isFreeform && !Object.op_Implicit((Object)(object)Target))
{
Transform transform3 = ((Component)this).transform;
val = owner.body.corePosition - ((Component)this).transform.position;
transform3.forward = ((Vector3)(ref val)).normalized;
}
}
public void FireLaser()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
BulletAttack val = new BulletAttack();
val.origin = ((Component)this).transform.position;
val.owner = ((Component)owner).gameObject;
val.weapon = ((Component)this).gameObject;
Vector3 val2 = ((Component)Target).transform.position - ((Component)this).transform.position;
val.aimVector = ((Vector3)(ref val2)).normalized;
val.damage = owner.body.damage * owner.UnitEffectModifier * 0.5f;
val.isCrit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null);
val.minSpread = 0f;
val.maxSpread = 3f;
val.procCoefficient = 1f;
val.damageColorIndex = (DamageColorIndex)3;
val.tracerEffectPrefab = GameObject.TracerCaptainDefenseMatrix;
val.Fire();
CharacterMaster master = Target.healthComponent.body.master;
BaseAI val3 = ((master != null) ? ((Component)master).GetComponent<BaseAI>() : null) ?? null;
if (Object.op_Implicit((Object)(object)val3))
{
val3.currentEnemy.gameObject = ((Component)this).gameObject;
}
AkSoundEngine.PostEvent(WwiseEvents.Play_captain_drone_zap, ((Component)this).gameObject);
}
public void FireLaserFlank()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
BulletAttack val = new BulletAttack();
val.origin = ((Component)this).transform.position;
val.owner = ((Component)owner).gameObject;
val.weapon = ((Component)this).gameObject;
val.aimVector = GetFlankLaserAimDir();
val.damage = owner.body.damage * owner.UnitEffectModifier * 1f;
val.isCrit = Util.CheckRoll(owner.body.crit, 0f, (CharacterMaster)null);
val.minSpread = 0f;
val.maxSpread = 0f;
val.procCoefficient = 1f;
val.damageColorIndex = (DamageColorIndex)3;
val.tracerEffectPrefab = GameObject.TracerCaptainDefenseMatrix;
val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).collisionMask;
val.Fire();
AkSoundEngine.PostEvent(WwiseEvents.Play_captain_drone_zap, ((Component)this).gameObject);
}
public Vector3 GetFlankLaserAimDir()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
Ray aimRay = owner.body.inputBank.GetAimRay();
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(aimRay, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
{
Vector3 val2 = ((RaycastHit)(ref val)).point - ((Component)this).transform.position;
return ((Vector3)(ref val2)).normalized;
}
return ((Ray)(ref aimRay)).direction;
}
public override void Recall()
{
isFreeform = !isFreeform;
}
}
}
namespace Overseer.Units.Defense
{
public class MenderController : UnitController
{
private float stopwatch = 0f;
private bool formationClose = true;
public override HurtBox Target { get; set; }
public override TargetType TargetType => (TargetType)1;
public override void OverrideTarget(HurtBox newTarget)
{
}
public override void PerformMovement(int totalUnits, int thisUnit)
{
if (formationClose)
{
OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 1.5f);
}
else
{
OrbitalMovement(totalUnits, thisUnit, 20f, -10f, 3f);
}
}
public override void PerformSecondaryAction()
{
}
public override void Recall()
{
formationClose = !formationClose;
}
public override void FixedUpdate()
{
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
base.FixedUpdate();
stopwatch += Time.fixedDeltaTime;
if (!Object.op_Implicit((Object)(object)Target))
{
Target = owner.body.mainHurtBox;
}
if (!(stopwatch >= 1f) || !Object.op_Implicit((Object)(object)Target))
{
return;
}
stopwatch = 0f;
List<CharacterBody> list = CharacterBody.readOnlyInstancesList.Where((CharacterBody x) => Object.op_Implicit((Object)(object)((Component)x).GetComponent<OverseerController>()) || Object.op_Implicit((Object)(object)((Component)x).GetComponent<UnitController>())).ToList();
foreach (CharacterBody item in list)
{
if (Vector3.Distance(((Component)Target).transform.position, item.corePosition) < 15f)
{
item.healthComponent.HealFraction(0.015f * owner.UnitEffectModifier, default(ProcChainMask));
}
}
}
}
public class WardenController : UnitController
{
private ProjectileController target;
public LineRenderer lr;
private bool isReflecting = false;
private float stopwatch = 0f;
public override HurtBox Target { get; set; }
public override void OverrideTarget(HurtBox newTarget)
{
}
public override void FixedUpdate()
{
base.FixedUpdate();
}
public override void PerformMovement(int totalUnits, int thisUnit)
{
OrbitalMovement(totalUnits, thisUnit, 360f, 0f, 3.5f);
}
public override void PerformSecondaryAction()
{
}
public override void Recall()
{
}
}
}
namespace Overseer.States
{
public class Dash : BaseState
{
public static GameObject TPEffect;
public static GameObject TPTracer;
public Vector3 blinkVector;
public CharacterModel model;
public HurtBoxGroup hbg;
public float duration = 0.2f;
public float speedCoeff = 5f;
public Vector3 startPos;
public override void OnEnter()
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
AkSoundEngine.PostEvent(WwiseEvents.Play_huntress_shift_mini_blink, ((EntityState)this).gameObject);
model = ((Component)((EntityState)this).GetModelTransform()).GetComponent<CharacterModel>();
hbg = ((Component)model).GetComponent<HurtBoxGroup>();
CharacterModel obj = model;
obj.invisibilityCount++;
HurtBoxGroup obj2 = hbg;
int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter;
obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter + 1;
blinkVector = GetBlinkVector();
startPos = ((EntityState)this).characterBody.corePosition;
}
public Vector3 GetBlinkVector()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
return (((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector;
}
public override void FixedUpdate()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).FixedUpdate();
((EntityState)this).characterMotor.velocity = Vector3.zero;
CharacterMotor characterMotor = ((EntityState)this).characterMotor;
characterMotor.rootMotion += blinkVector * (base.moveSpeedStat * speedCoeff * Time.fixedDeltaTime);
if (((EntityState)this).fixedAge >= duration)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
((EntityState)this).OnExit();
EffectManager.SpawnEffect(TPTracer, new EffectData
{
origin = startPos,
start = ((EntityState)this).characterBody.corePosition
}, true);
CharacterModel obj = model;
obj.invisibilityCount--;
HurtBoxGroup obj2 = hbg;
int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter;
obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter - 1;
}
public static void CreatePrefabs()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
TPEffect = RuntimePrefabManager.CreatePrefab(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Parent/ParentTeleportEffect.prefab").WaitForCompletion(), "LunarConstructTeleport");
Transform child = TPEffect.transform.GetChild(0);
ParticleSystemRenderer component = ((Component)child.GetChild(0)).GetComponent<ParticleSystemRenderer>();
Texture2D val = Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/ColorRamps/texRampLunarWispFire.png").WaitForCompletion();
Material val2 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Parent/matParentTeleportPortal.mat").WaitForCompletion());
val2.SetTexture("_RemapTex", (Texture)(object)val);
((Renderer)component).sharedMaterial = val2;
((Component)child.GetChild(1)).gameObject.SetActive(false);
ParticleSystemRenderer component2 = ((Component)child.GetChild(3)).GetComponent<ParticleSystemRenderer>();
((Renderer)component2).sharedMaterial = val2;
((Component)component2).gameObject.transform.localScale = Vector3.one * 0.25f;
MainModule main = ((Component)child.GetChild(3)).GetComponent<ParticleSystem>().main;
((MainModule)(ref main)).duration = 0.17f;
((Component)child.GetChild(4)).gameObject.SetActive(false);
TPTracer = RuntimePrefabManager.CreatePrefab(GameObject.VoidSurvivorBeamTracer, "OverloadingTracer");
((Component)TPTracer.transform.GetChild(0)).gameObject.SetActive(false);
((Component)TPTracer.transform.GetChild(1)).gameObject.SetActive(false);
LineRenderer component3 = TPTracer.GetComponent<LineRenderer>();
component3.widthMultiplier = 0.33f;
component3.numCapVertices = 10;
Material val3 = Object.Instantiate<Material>(Material.matVoidSurvivorBeamTrail);
val3.SetTexture("_RemapTex", (Texture)(object)Texture2D.texRampLunarWardDecal);
((Renderer)component3).material = val3;
AnimateShaderAlpha component4 = TPTracer.GetComponent<AnimateShaderAlpha>();
component4.timeMax = 0.4f;
Main.contentPack.RegisterGameObject(TPTracer);
Main.contentPack.RegisterGameObject(TPEffect);
}
}
public class Discharge : BaseSkillState
{
public float DamageCoefficient = 4f;
public override void OnEnter()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Expected O, but got Unknown
((BaseState)this).OnEnter();
((EntityState)this).characterBody.SetAimTimer(0.1f);
BulletAttack val = new BulletAttack();
val.damage = ((BaseState)this).damageStat * DamageCoefficient;
val.damageType = (DamageType)16777216;
Ray aimRay = ((BaseState)this).GetAimRay();
val.aimVector = ((Ray)(ref aimRay)).direction;
val.isCrit = ((BaseState)this).RollCrit();
val.origin = ((EntityState)this).inputBank.aimOrigin;
val.procCoefficient = 1f;
val.owner = ((EntityState)this).gameObject;
val.tracerEffectPrefab = GameObject.TracerMageLightningLaser;
val.radius = 0.3f;
val.hitCallback = (HitCallback)delegate(BulletAttack attack, ref BulletHit hitInfo)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Expected O, but got Unknown
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)hitInfo.hitHurtBox))
{
Debug.Log((object)"we hit something");
UnitController componentInParent = ((Component)hitInfo.hitHurtBox).GetComponentInParent<UnitController>();
if (Object.op_Implicit((Object)(object)componentInParent))
{
Debug.Log((object)"we hit a unit");
BlastAttack val2 = new BlastAttack();
val2.attacker = ((EntityState)this).gameObject;
val2.baseDamage = ((BaseState)this).damageStat * 4f;
val2.radius = 10f;
val2.crit = false;
val2.falloffModel = (FalloffModel)0;
val2.damageType = (DamageType)16777216;
val2.position = ((Component)componentInParent).transform.position;
val2.teamIndex = (TeamIndex)1;
val2.procCoefficient = 1f;
EffectManager.SpawnEffect(GameObject.CaptainTazerSupplyDropNova, new EffectData
{
origin = ((Component)componentInParent).transform.position,
scale = 10f
}, false);
val2.Fire();
componentInParent.owner.RequestDestruction(componentInParent, ignoreVengeance: true);
}
}
return BulletAttack.DefaultHitCallbackImplementation(attack, ref hitInfo);
};
val.Fire();
AkSoundEngine.PostEvent(WwiseEvents.Play_roboBall_death_small_explo, ((EntityState)this).gameObject);
((EntityState)this).outer.SetNextStateToMain();
}
}
public class Reconfigure : BaseState
{
public override void OnEnter()
{
((BaseState)this).OnEnter();
((EntityState)this).GetComponent<OverseerController>().ReconfigureUnits();
AkSoundEngine.PostEvent(WwiseEvents.Play_MULT_R_variant_activate, ((EntityState)this).gameObject);
((EntityState)this).outer.SetNextStateToMain();
}
}
public class Spectral : BaseSkillState
{
public class MarkOnHit : MonoBehaviour, IProjectileImpactBehavior
{
public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Invalid comparison between Unknown and I4
if (Object.op_Implicit((Object)(object)impactInfo.collider))
{
HurtBox component = ((Component)impactInfo.collider).GetComponent<HurtBox>();
if (Object.op_Implicit((Object)(object)component) && (int)component.healthComponent.body.teamComponent.teamIndex != 1)
{
ProjectileController component2 = ((Component)this).GetComponent<ProjectileController>();
OverseerController component3 = component2.owner.GetComponent<OverseerController>();
component3.Retarget(component);
((Component)component.healthComponent).gameObject.AddComponent<Marker>();
}
}
}
}
public static GameObject ProjectileStandard;
public static GameObject ProjectileLast;
public static int TotalShots;
public int ShotsFired = 0;
public float FireDelay = 0.2f;
public float DamageCoefficient => (ShotsFired > 2) ? 1.6f : 0.7f;
public GameObject ProjectilePrefab => (ShotsFired > 2) ? ProjectileLast : ProjectileStandard;
static Spectral()
{
TotalShots = 3;
ProjectileStandard = RuntimePrefabManager.CreatePrefab(GameObject.RoboBallProjectile, "OverseerPlasmaShot");
((ProjectileExplosion)ProjectileStandard.GetComponent<ProjectileImpactExplosion>()).blastDamageCoefficient = 1f;
((ProjectileExplosion)ProjectileStandard.GetComponent<ProjectileImpactExplosion>()).blastRadius = 3f;
ProjectileLast = RuntimePrefabManager.CreatePrefab(GameObject.RoboBallProjectile, "OverseerPlasmaShotEnd");
ProjectileLast.AddComponent<MarkOnHit>();
((ProjectileExplosion)ProjectileLast.GetComponent<ProjectileImpactExplosion>()).blastDamageCoefficient = 1f;
((ProjectileExplosion)ProjectileLast.GetComponent<ProjectileImpactExplosion>()).blastRadius = 3f;
Main.contentPack.RegisterGameObject(ProjectileStandard);
Main.contentPack.RegisterGameObject(ProjectileLast);
}
public override void OnEnter()
{
((BaseState)this).OnEnter();
FireDelay /= ((BaseState)this).attackSpeedStat;
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
((EntityState)this).characterBody.SetAimTimer(0.5f);
if (((EntityState)this).fixedAge >= FireDelay)
{
((EntityState)this).fixedAge = 0f;
Fire();
}
if (ShotsFired >= 3)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return (InterruptPriority)2;
}
public void Fire()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
ShotsFired++;
FireProjectileInfo val = default(FireProjectileInfo);
val.damage = ((BaseState)this).damageStat * DamageCoefficient;
val.projectilePrefab = ProjectilePrefab;
val.owner = ((EntityState)this).gameObject;
val.position = ((EntityState)this).inputBank.aimOrigin;
val.crit = ((BaseState)this).RollCrit();
val.rotation = Util.QuaternionSafeLookRotation(((EntityState)this).inputBank.aimDirection);
val.useSpeedOverride = true;
((FireProjectileInfo)(ref val)).speedOverride = 200f;
ProjectileManager.instance.FireProjectile(val);
}
}
}
namespace Overseer.Content
{
public class BeaconSpeedBoost : GenericBase<BeaconSpeedBoost>
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_RecalculateStats <>9__1_0;
internal void <Initialize>b__1_0(orig_RecalculateStats orig, CharacterBody self)
{
orig.Invoke(self);
if (NetworkServer.active && self.HasBuff(BeaconSpeed))
{
float num = 1f + 0.05f * (float)self.GetBuffCount(BeaconSpeed);
self.moveSpeed *= num;
}
}
}
public static BuffDef BeaconSpeed;
public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
BeaconSpeed = Main.assets.LoadAsset<BuffDef>("bdBeaconSpeed.asset");
object obj = <>c.<>9__1_0;
if (obj == null)
{
hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self)
{
orig.Invoke(self);
if (NetworkServer.active && self.HasBuff(BeaconSpeed))
{
float num = 1f + 0.05f * (float)self.GetBuffCount(BeaconSpeed);
self.moveSpeed *= num;
}
};
<>c.<>9__1_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (hook_RecalculateStats)obj;
pack.RegisterScriptableObject((ScriptableObject)(object)BeaconSpeed);
}
}
public class WardenRes : GenericBase<BeaconSpeedBoost>
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_TakeDamage <>9__1_0;
internal void <Initialize>b__1_0(orig_TakeDamage orig, HealthComponent self, DamageInfo info)
{
if (self.body.HasBuff(WardenResBuff))
{
float num = 1f - 0.02f * (float)self.body.GetBuffCount(WardenResBuff);
info.damage *= num;
}
orig.Invoke(self, info);
}
}
public static BuffDef WardenResBuff;
public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
WardenResBuff = Main.assets.LoadAsset<BuffDef>("bdWardenRes.asset");
object obj = <>c.<>9__1_0;
if (obj == null)
{
hook_TakeDamage val = delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo info)
{
if (self.body.HasBuff(WardenResBuff))
{
float num = 1f - 0.02f * (float)self.body.GetBuffCount(WardenResBuff);
info.damage *= num;
}
orig.Invoke(self, info);
};
<>c.<>9__1_0 = val;
obj = (object)val;
}
HealthComponent.TakeDamage += (hook_TakeDamage)obj;
pack.RegisterScriptableObject((ScriptableObject)(object)WardenResBuff);
}
}
}
namespace Overseer.Components
{
public class ActionSelection : MonoBehaviour
{
public Image image;
public UnitAction action;
public TextMeshProUGUI text;
public void Initialize()
{
image.sprite = action.Icon;
((TMP_Text)text).text = action.KeyCodeText;
}
}
public class ActionSelector : MonoBehaviour
{
public RectTransform container;
public GameObject selectorPrefab;
public List<UnitAction> actions;
private ActionSelection[] actionElements;
private int currentSelected = 0;
internal OnFireAction onActionFired = new OnFireAction();
public void Start()
{
UIElementAllocator<ActionSelection> val = new UIElementAllocator<ActionSelection>(container, selectorPrefab, true, false);
val.AllocateElements(actions.Count);
actionElements = val.elements.ToArray();
for (int i = 0; i < actionElements.Length; i++)
{
actionElements[i].action = actions[i];
actionElements[i].Initialize();
}
}
public void UpdateBasedOnUnitChoices(Unit offense, Unit defense, Unit support)
{
actionElements[0].image.sprite = offense.Icon;
actionElements[1].image.sprite = defense.Icon;
actionElements[2].image.sprite = support.Icon;
}
public void FixedUpdate()
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < actionElements.Length; i++)
{
if (Input.GetKeyDown((KeyCode)27) || Input.GetKeyDown((KeyCode)114) || Input.GetKeyDown((KeyCode)325))
{
((UnityEvent<ActionType>)onActionFired).Invoke(ActionType.Cancel);
Object.Destroy((Object)(object)this);
break;
}
if (Input.GetKeyDown(actionElements[i].action.ActivationKey))
{
((UnityEvent<ActionType>)onActionFired).Invoke(actionElements[i].action.ActionType);
Object.Destroy((Object)(object)this);
break;
}
}
}
}
public class OnFireAction : UnityEvent<ActionType>
{
private int guh;
}
public class Marker : MonoBehaviour
{
private float timeAlive = 0f;
public void FixedUpdate()
{
timeAlive += Time.fixedDeltaTime;
if (timeAlive >= 5f)
{
Object.Destroy((Object)(object)this);
}
}
}
public class OverseerController : MonoBehaviour
{
public CharacterBody body;
public int unitCap;
public GenericSkill offenseFamily;
public GenericSkill defenseFamily;
public GenericSkill supportFamily;
public GenericSkill passive;
public Unit NullUnit;
public GameObject OverseerUIPrefab;
public SkillDef passiveInfernal;
public SkillDef passiveSwarmer;
private Unit currentUnitType = null;
private float unitStopwatch = 0f;
internal List<IUnitC> activeUnits = new List<IUnitC>();
private GameObject UIPrefabInstance;
private bool hasRecalled = false;
internal Vector3 AimPoint;
private bool isPassiveSwarmer = false;
internal bool isPassiveInfernal = false;
internal float UnitEffectModifier = 1f;
internal float UnitAssemblyModifier = 1f;
private GameObject MainHUDInstance;
private List<Unit> UnitTypes = new List<Unit>();
private int index = 0;
public void Start()
{
currentUnitType = NullUnit;
UIPrefabInstance = Object.Instantiate<GameObject>(OverseerUIPrefab);
UIPrefabInstance.GetComponent<UnitUIBar>().controller = this;
if ((Object)(object)passive.skillDef == (Object)(object)passiveSwarmer)
{
isPassiveSwarmer = true;
unitCap *= 2;
UnitAssemblyModifier = 0.5f;
UnitEffectModifier = 0.5f;
}
if ((Object)(object)passive.skillDef == (Object)(object)passiveInfernal)
{
isPassiveInfernal = true;
}
}
public void TriggerAltFire()
{
foreach (IUnitC activeUnit in activeUnits)
{
activeUnit.PerformSecondaryAction();
}
}
public float GetAssemblyPercentage()
{
if ((Object)(object)currentUnitType == (Object)(object)NullUnit)
{
return 0f;
}
if (activeUnits.Count >= unitCap)
{
return 1f;
}
return unitStopwatch / (currentUnitType.AssemblyTime * UnitAssemblyModifier);
}
public Sprite GetUnitIcon()
{
return currentUnitType.Icon;
}
public string GetUnitCountText()
{
return activeUnits.Count + " / " + unitCap;
}
public void SpawnUnit()
{
if (!((Object)(object)currentUnitType == (Object)(object)NullUnit) && activeUnits.Count <= unitCap)
{
GameObject val = UnitCatalog.SpawnUnit(this, currentUnitType);
IUnitC component = val.GetComponent<IUnitC>();
if (hasRecalled)
{
component.Recall();
}
CharacterBody component2 = val.GetComponent<CharacterBody>();
component2.level = body.level;
component2.baseDamage = body.baseDamage;
component2.levelDamage = body.levelDamage;
activeUnits.Add(component);
}
}
public void HandleAction(ActionType type)
{
switch (type)
{
case ActionType.Recall:
foreach (IUnitC activeUnit in activeUnits)
{
activeUnit.Recall();
}
hasRecalled = !hasRecalled;
break;
case ActionType.Retarget:
break;
case ActionType.Terminate:
{
List<IUnitC> list = new List<IUnitC>();
for (int i = 0; i < activeUnits.Count; i++)
{
IUnitC item = activeUnits[i];
list.Add(item);
}
for (int j = 0; j < list.Count; j++)
{
activeUnits.Remove(list[j]);
list[j].Destruct();
}
break;
}
}
}
public void Retarget(HurtBox target)
{
foreach (IUnitC activeUnit in activeUnits)
{
activeUnit.OverrideTarget(target);
}
}
public void RequestDestruction(IUnitC unit, bool ignoreVengeance = false)
{
activeUnits.Remove(unit);
unit.Destruct();
}
public void ReconfigureUnits()
{
UnitTypes.Clear();
UnitTypes.Add(NullUnit);
UnitTypes.Add((offenseFamily.skillDef as UnitSkillDef).UnitType);
UnitTypes.Add((defenseFamily.skillDef as UnitSkillDef).UnitType);
UnitTypes.Add((supportFamily.skillDef as UnitSkillDef).UnitType);
index++;
if (index >= UnitTypes.Count)
{
index = 0;
}
currentUnitType = UnitTypes[index];
}
public float GetAssemblyTime()
{
return currentUnitType.AssemblyTime * UnitAssemblyModifier;
}
public void FixedUpdate()
{
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
foreach (Unit unitType in UnitCatalog.allUnits)
{
List<IUnitC> list = activeUnits.Where((IUnitC x) => (Object)(object)x.UnitType == (Object)(object)unitType).ToList();
for (int i = 0; i < list.Count; i++)
{
list[i].PerformMovement(list.Count, i);
}
}
if (activeUnits.Count < unitCap)
{
unitStopwatch += Time.fixedDeltaTime;
}
if (Object.op_Implicit((Object)(object)currentUnitType) && unitStopwatch >= GetAssemblyTime())
{
unitStopwatch = 0f;
SpawnUnit();
}
Ray aimRay = body.inputBank.GetAimRay();
AimPoint = ((Ray)(ref aimRay)).GetPoint(40f);
if (!Object.op_Implicit((Object)(object)MainHUDInstance))
{
MainHUDInstance = GameObject.Find("HUDSimple(Clone)");
if (Object.op_Implicit((Object)(object)MainHUDInstance))
{
MainHUDInstance = ((Component)MainHUDInstance.transform.Find("MainContainer").Find("MainUIArea")).gameObject;
}
}
if (Object.op_Implicit((Object)(object)MainHUDInstance))
{
UIPrefabInstance.SetActive(MainHUDInstance.activeInHierarchy);
}
}
}
public class OverseerSpikeController : MonoBehaviour
{
public GenericSkill spikeStockTarget;
public List<GameObject> Spikes = new List<GameObject>();
public GameObject SpikePrefab;
public Transform[] unitSpawnPoints;
public void FixedUpdate()
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
if (Spikes.Count() < spikeStockTarget.stock && Spikes.Count() < 3)
{
FireProjectileInfo val = default(FireProjectileInfo);
val.owner = ((Component)this).gameObject;
val.damage = ((Component)this).GetComponent<CharacterBody>().damage * 2f;
val.position = ((Component)this).transform.position;
val.rotation = Quaternion.identity;
val.projectilePrefab = SpikePrefab;
ProjectileManager.instance.FireProjectile(val);
}
for (int i = 0; i < Spikes.Count; i++)
{
if (!Spikes[i].GetComponent<Spike>().hasFired)
{
Vector3 position = ((Component)unitSpawnPoints[i]).transform.position;
Vector3 position2 = Vector3.Lerp(Spikes[i].transform.position, position, 20f * Time.fixedDeltaTime);
Spikes[i].transform.position = position2;
Spikes[i].transform.forward = ((Component)this).GetComponent<CharacterDirection>().forward;
}
}
}
public void FireSpikes()
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
foreach (GameObject spike in Spikes)
{
if (!spike.GetComponent<Spike>().hasFired)
{
spike.transform.forward = GetFlankLaserAimDir(spike.transform.position);
spike.GetComponent<Spike>().Fire();
}
}
}
public Vector3 GetFlankLaserAimDir(Vector3 pos)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
Ray aimRay = ((Component)this).GetComponent<CharacterBody>().inputBank.GetAimRay();
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(aimRay, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
{
Vector3 val2 = ((RaycastHit)(ref val)).point - pos;
return ((Vector3)(ref val2)).normalized;
}
return ((Ray)(ref aimRay)).direction;
}
}
public class Spike : MonoBehaviour
{
internal OverseerController owner;
internal OverseerSpikeController spikeController;
[SerializeField]
private List<MonoBehaviour> ToEnable;
private HealthComponent component;
internal bool hasFired = false;
internal bool shouldCheck = false;
internal bool hasChecked = false;
public void Fire()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
((Component)this).GetComponent<Rigidbody>().velocity = Vector3.zero;
foreach (MonoBehaviour item in ToEnable)
{
((Behaviour)item).enabled = true;
}
hasFired = true;
}
public void OnHit()
{
shouldCheck = true;
}
public void Start()
{
component = ((Component)this).GetComponent<HealthComponent>();
spikeController = ((Component)this).GetComponent<ProjectileController>().owner.GetComponent<OverseerSpikeController>();
owner = ((Component)spikeController).GetComponent<OverseerController>();
spikeController.Spikes.Add(((Component)this).gameObject);
Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>();
foreach (Collider val in componentsInChildren)
{
foreach (IUnitC activeUnit in owner.activeUnits)
{
Collider[] componentsInChildren2 = activeUnit.GetSelf().GetComponentsInChildren<Collider>();
foreach (Collider val2 in componentsInChildren2)
{
Physics.IgnoreCollision(val, val2, true);
}
}
}
}
public void OnDestroy()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
if (NetworkServer.active)
{
}
spikeController.spikeStockTarget.DeductStock(1);
spikeController.Spikes.Remove(((Component)this).gameObject);
EffectManager.SpawnEffect(GameObject.ExplosionDroneDeath, new EffectData
{
origin = ((Component)this).transform.position
}, false);
}
public void FixedUpdate()
{
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Invalid comparison between Unknown and I4
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Expected O, but got Unknown
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
if (!component.alive)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
if (!shouldCheck || hasChecked)
{
return;
}
ProjectileStickOnImpact val = ((Component)this).GetComponent<ProjectileStickOnImpact>();
if (Object.op_Implicit((Object)(object)val.stuckBody))
{
Main.Log("stuckbody found");
CharacterBody stuckBody = val.stuckBody;
hasChecked = true;
if (Object.op_Implicit((Object)(object)((Component)stuckBody).GetComponent<UnitController>()))
{
Main.Log("we hit a unit, return");
return;
}
if ((int)stuckBody.teamComponent.teamIndex == 1)
{
Main.Log("hit a friendly, return");
return;
}
Main.Log("retargeting to: " + (object)stuckBody.mainHurtBox);
owner.Retarget(stuckBody.mainHurtBox);
DamageInfo val2 = new DamageInfo();
val2.damage = owner.body.damage * 3f;
val2.crit = Util.CheckRoll(owner.body.crit, owner.body.master);
val2.position = ((Component)this).transform.position;
val2.procCoefficient = 1f;
val2.attacker = ((Component)owner.body).gameObject;
stuckBody.healthComponent.TakeDamage(val2);
GlobalEventManager.instance.OnHitEnemy(val2, ((Component)stuckBody).gameObject);
GlobalEventManager.instance.OnHitAll(val2, ((Component)stuckBody).gameObject);
}
}
}
public class TrackerAlly : HurtboxTracker
{
public override void Start()
{
((HurtboxTracker)this).Start();
}
public override void FixedUpdate()
{
((Tracker)this).FixedUpdate();
if ((Object)(object)((Tracker)this).target != (Object)null && ((Component)((Component)((Tracker)this).target).GetComponent<HurtBox>().healthComponent).GetComponent<IUnitC>() != null)
{
((Tracker)this).target = null;
}
}
}
public class TrackerEnemy : HurtboxTracker
{
}
public class UnitUIBar : MonoBehaviour
{
public Image RadialChargeMeter;
public Image UnitIcon;
public TextMeshProUGUI UnitCountText;
internal OverseerController controller;
public void FixedUpdate()
{
if (Object.op_Implicit((Object)(object)controller))
{
RadialChargeMeter.fillAmount = controller.GetAssemblyPercentage();
UnitIcon.sprite = controller.GetUnitIcon();
((TMP_Text)UnitCountText).text = controller.GetUnitCountText();
}
}
}
}