Decompiled source of ProjectileForce v1.1.8

ProjectileForce.dll

Decompiled 8 hours ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using DM;
using HarmonyLib;
using Landfall.TABS;
using SLMA;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("ProjectileForce")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ProjectileForce")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ef947e69-ec1b-498b-bfb5-42023f21f231")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ProjectileForce;

public class DeathPhysics : MonoBehaviour
{
	private Unit unit;

	private HealthHandler healthHandler;

	private bool deathPhysicsTriggered;

	public float minimumUpwardVelocity = 3.5f;

	public float maximumUpwardVelocity = 5.5f;

	public float minimumBackwardVelocity = 1.5f;

	public float maximumBackwardVelocity = 3f;

	public float maximumSideVelocity = 1f;

	public float minimumSpin = 1f;

	public float maximumSpin = 3f;

	private void Start()
	{
		unit = ((Component)this).GetComponent<Unit>();
		if (!((Object)(object)unit == (Object)null))
		{
			healthHandler = ((Component)unit).GetComponentInChildren<HealthHandler>();
			if ((Object)(object)healthHandler != (Object)null)
			{
				healthHandler.AddDieAction((Action)OnUnitDeath);
			}
		}
	}

	private void OnDestroy()
	{
		if ((Object)(object)healthHandler != (Object)null)
		{
			healthHandler.RemoveDieAction((Action)OnUnitDeath);
		}
	}

	private void OnUnitDeath()
	{
		if (!deathPhysicsTriggered)
		{
			deathPhysicsTriggered = true;
			((MonoBehaviour)this).StartCoroutine(ApplyDeathPhysics());
		}
	}

	private IEnumerator ApplyDeathPhysics()
	{
		yield return null;
		yield return (object)new WaitForFixedUpdate();
		if ((Object)(object)unit == (Object)null || (Object)(object)unit.data == (Object)null)
		{
			yield break;
		}
		RigidbodyHolder rigidbodyHolder = ((Component)unit).GetComponentInChildren<RigidbodyHolder>();
		if ((Object)(object)rigidbodyHolder == (Object)null || rigidbodyHolder.AllRigs == null)
		{
			yield break;
		}
		Rigidbody[] rigs = rigidbodyHolder.AllRigs;
		if (rigs.Length == 0)
		{
			yield break;
		}
		Vector3 backwardDirection = -((Component)unit).transform.forward;
		backwardDirection.y = 0f;
		if (((Vector3)(ref backwardDirection)).sqrMagnitude < 0.01f)
		{
			backwardDirection = Vector3.back;
		}
		((Vector3)(ref backwardDirection)).Normalize();
		Vector3 sidewaysDirection = ((Component)unit).transform.right * Random.Range(0f - maximumSideVelocity, maximumSideVelocity);
		float upwardVelocity = Random.Range(minimumUpwardVelocity, maximumUpwardVelocity);
		float backwardVelocity = Random.Range(minimumBackwardVelocity, maximumBackwardVelocity);
		Vector3 launchVelocity = Vector3.up * upwardVelocity + backwardDirection * backwardVelocity + sidewaysDirection;
		foreach (Rigidbody rig in rigs)
		{
			if (!((Object)(object)rig == (Object)null))
			{
				rig.velocity += launchVelocity;
			}
		}
		float spin = Random.Range(minimumSpin, maximumSpin);
		foreach (Rigidbody rig2 in rigs)
		{
			if (!((Object)(object)rig2 == (Object)null))
			{
				Vector3 randomSpin = new Vector3(Random.Range(0f - spin, spin), Random.Range(0f - spin, spin), Random.Range(0f - spin, spin));
				rig2.angularVelocity += randomSpin;
			}
		}
	}
}
[BepInPlugin("ProjectileForce", "ProjectileForce", "1.0.0")]
internal class Loader : BaseUnityPlugin
{
	private void Awake()
	{
		((MonoBehaviour)this).StartCoroutine("Call");
	}

	private IEnumerator Call()
	{
		yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)Object.FindObjectOfType<ServiceLocator>() != (Object)null));
		yield return (object)new WaitUntil((Func<bool>)(() => ServiceLocator.GetService<ISaveLoaderService>() != null));
		yield return (object)new WaitForSecondsRealtime(0.3f);
		SLMALoader.GetInstance();
		LandfallContentDatabase landfallContentDatabase = ContentDatabase.Instance().LandfallContentDatabase;
		UManager.Init(landfallContentDatabase);
		new Harmony(UManager.modname).PatchAll();
		GOSLMA.EditWeapons = ((GOSLMA.EditWeapons == null) ? new Action<GameObject, Team, Unit, MeleeWeapon, RangeWeapon, LandfallContentDatabase>(UManager.EditWeapons) : ((Action<GameObject, Team, Unit, MeleeWeapon, RangeWeapon, LandfallContentDatabase>)Delegate.Combine(new Action<GameObject, Team, Unit, MeleeWeapon, RangeWeapon, LandfallContentDatabase>(UManager.EditWeapons), GOSLMA.EditWeapons)));
		GOSLMA.EditClothes = ((GOSLMA.EditClothes == null) ? new Action<GameObject, CharacterItem, PropItemData, Unit, int, LandfallContentDatabase>(UManager.EditClothes) : ((Action<GameObject, CharacterItem, PropItemData, Unit, int, LandfallContentDatabase>)Delegate.Combine(new Action<GameObject, CharacterItem, PropItemData, Unit, int, LandfallContentDatabase>(UManager.EditClothes), GOSLMA.EditClothes)));
		GOSLMA.EditCombatMoves = ((GOSLMA.EditCombatMoves == null) ? new Action<GameObject, int, Unit, LandfallContentDatabase>(UManager.EditCombatMoves) : ((Action<GameObject, int, Unit, LandfallContentDatabase>)Delegate.Combine(new Action<GameObject, int, Unit, LandfallContentDatabase>(UManager.EditCombatMoves), GOSLMA.EditCombatMoves)));
		GOSLMA.CodeAfterSpawn = ((GOSLMA.CodeAfterSpawn == null) ? new Action<Unit, LandfallContentDatabase>(UManager.CodeAfterSpawn) : ((Action<Unit, LandfallContentDatabase>)Delegate.Combine(new Action<Unit, LandfallContentDatabase>(UManager.CodeAfterSpawn), GOSLMA.CodeAfterSpawn)));
		GOSLMA.EditProjectiles = ((GOSLMA.EditProjectiles == null) ? new Action<GameObject, ProjectileHit, Unit, LandfallContentDatabase>(UManager.EditProjectiles) : ((Action<GameObject, ProjectileHit, Unit, LandfallContentDatabase>)Delegate.Combine(new Action<GameObject, ProjectileHit, Unit, LandfallContentDatabase>(UManager.EditProjectiles), GOSLMA.EditProjectiles)));
		UnitBlueprint[] blueprints = Resources.FindObjectsOfTypeAll<UnitBlueprint>();
		for (int i = 0; i < blueprints.Length; i++)
		{
			UManager.EditBlueprint(blueprints[i], landfallContentDatabase);
		}
		Debug.Log((object)("Loaded " + UManager.modname + " Successfully"));
		Debug.Log((object)(UManager.modname + " is made in SFT by FhpSlime"));
		Debug.Log((object)(UManager.modder + " wished you a pleasant trip"));
	}
}
public static class UManager
{
	public static string modname = "ProjectileForce";

	public static string modder = "FhpSlime";

	public static void SetRiders(UnitBlueprint me, UnitBlueprint[] riders)
	{
		s.SetField<UnitBlueprint>(me, "Riders", (object)riders);
	}

	public static void EditBlueprint(UnitBlueprint unit, LandfallContentDatabase db)
	{
	}

	public static void EditClothes(GameObject cloth, CharacterItem item, PropItemData data, Unit unit, int index, LandfallContentDatabase db)
	{
	}

	public static void EditProjectiles(GameObject proj, ProjectileHit projhit, Unit unit, LandfallContentDatabase db)
	{
	}

	public static void EditCombatMoves(GameObject move, int index, Unit unit, LandfallContentDatabase db)
	{
	}

	public static void CodeAfterSpawn(Unit unit, LandfallContentDatabase db)
	{
		if (!((Object)(object)unit == (Object)null) && (Object)(object)((Component)unit).GetComponent<DeathPhysics>() == (Object)null)
		{
			((Component)unit).gameObject.AddComponent<DeathPhysics>();
		}
	}

	public static void Init(LandfallContentDatabase db)
	{
	}

	public static void EditWeapons(GameObject weapon, Team team, Unit unit, MeleeWeapon melee, RangeWeapon range, LandfallContentDatabase db)
	{
	}
}