Upload from upload_mods.ps1
This commit is contained in:
85
Scripts/Items/Modular/ActionModuleHoldOpen.cs
Normal file
85
Scripts/Items/Modular/ActionModuleHoldOpen.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
using HarmonyLib;
|
||||
using KFCommonUtilityLib.Scripts.Attributes;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
[TypeTarget(typeof(ItemActionRanged))]
|
||||
public class ActionModuleHoldOpen
|
||||
{
|
||||
private const string emptyAnimatorBool = "empty";
|
||||
private int emptyAnimatorBoolHash;
|
||||
|
||||
[HarmonyPatch(nameof(ItemAction.ReadFrom)), MethodTargetPostfix]
|
||||
private void Postfix_ReadFrom(DynamicProperties _props, ItemActionRanged __instance)
|
||||
{
|
||||
int metaIndex = __instance.ActionIndex;
|
||||
if (_props.Values.TryGetValue("ShareMetaWith", out string str) && int.TryParse(str, out metaIndex))
|
||||
{
|
||||
|
||||
}
|
||||
if (metaIndex > 0)
|
||||
{
|
||||
emptyAnimatorBoolHash = Animator.StringToHash(emptyAnimatorBool + __instance.ActionIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
emptyAnimatorBoolHash = Animator.StringToHash(emptyAnimatorBool);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemActionRanged.getUserData)), MethodTargetPostfix]
|
||||
public void Postfix_getUserData(ItemActionData _actionData, ref int __result)
|
||||
{
|
||||
__result |= (_actionData.invData.itemValue.Meta <= 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemAction.ItemActionEffects)), MethodTargetPostfix]
|
||||
public void Postfix_ItemActionEffects(ItemActionData _actionData, int _firingState, int _userData)
|
||||
{
|
||||
if (_firingState != (int)ItemActionFiringState.Off && (_userData & 1) > 0)
|
||||
_actionData.invData.holdingEntity.emodel.avatarController.UpdateBool(emptyAnimatorBoolHash, true, false);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemActionRanged.ReloadGun)), MethodTargetPostfix]
|
||||
public void Postfix_ReloadGun(ItemActionData _actionData)
|
||||
{
|
||||
//delay 2 frames before reloading, since the animation is likely to be triggered the next frame this is called
|
||||
ThreadManager.StartCoroutine(DelaySetEmpty(_actionData, false, 2));
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemAction.StartHolding)), MethodTargetPrefix]
|
||||
public bool Prefix_StartHolding(ItemActionData _data)
|
||||
{
|
||||
//delay 1 frame before equipping weapon
|
||||
if (_data.invData.itemValue.Meta <= 0)
|
||||
ThreadManager.StartCoroutine(DelaySetEmpty(_data, true, 2));
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemActionRanged.ConsumeAmmo)), MethodTargetPostfix]
|
||||
public void Postfix_ConsumeAmmo(ItemActionData _actionData)
|
||||
{
|
||||
if (_actionData.invData.itemValue.Meta == 0)
|
||||
_actionData.invData.holdingEntity.FireEvent(CustomEnums.onSelfMagzineDeplete, true);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(ItemAction.SwapAmmoType)), MethodTargetPrefix]
|
||||
public bool Prefix_SwapAmmoType(EntityAlive _entity)
|
||||
{
|
||||
_entity.emodel.avatarController.UpdateBool(emptyAnimatorBoolHash, true, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
private IEnumerator DelaySetEmpty(ItemActionData _actionData, bool empty, int delay)
|
||||
{
|
||||
for (int i = 0; i < delay; i++)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
if (_actionData.invData.holdingEntity.inventory.holdingItemIdx == _actionData.invData.slotIdx)
|
||||
{
|
||||
_actionData.invData.holdingEntity.emodel.avatarController.UpdateBool(emptyAnimatorBoolHash, empty, false);
|
||||
}
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user