Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/BaseAbilityMixin.cs
2025-08-13 09:26:42 +08:00

155 lines
3.4 KiB
C#

using MoleMole.Config;
using MoleMole.MPProtocol;
using UnityEngine;
namespace MoleMole
{
public class BaseAbilityMixin
{
public BaseAbilityActor actor;
public BaseMonoAbilityEntity entity;
public ActorAbility instancedAbility;
public ActorModifier instancedModifier;
public int mixinLocalID;
public int instancedMixinID;
public BaseAbilityEntityIdentiy selfIdentity;
public BaseAbilityMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config)
{
this.instancedAbility = instancedAbility;
this.instancedModifier = instancedModifier;
actor = ((instancedModifier == null) ? instancedAbility.caster : instancedModifier.owner);
entity = actor.entity;
mixinLocalID = config.localID;
}
public virtual void OnAdded()
{
}
public virtual void OnRemoved()
{
}
public virtual void OnAbilityTriggered(EvtAbilityStart evt)
{
}
public virtual bool OnEvent(BaseEvent evt)
{
return false;
}
public virtual bool OnPostEvent(BaseEvent evt)
{
return false;
}
public virtual bool ListenEvent(BaseEvent evt)
{
return false;
}
public virtual void Core()
{
}
public bool EvaluatePredicate(float lhs, float rhs, MixinPredicate predicate)
{
switch (predicate)
{
case MixinPredicate.Equal:
return lhs == rhs;
case MixinPredicate.Greater:
return lhs > rhs;
case MixinPredicate.GreaterOrEqual:
return lhs >= rhs;
case MixinPredicate.Lesser:
return lhs < rhs;
default:
return false;
}
}
public void FireMixinEffect(MixinEffect effectConfig, BaseMonoEntity target, bool allowInactiveFire = false)
{
if (effectConfig == null || !(target != null))
{
return;
}
bool flag = false;
if (allowInactiveFire)
{
flag = true;
}
else if (entity.gameObject.activeSelf)
{
flag = true;
}
if (flag)
{
if (effectConfig.EffectPattern != null)
{
entity.FireEffect(effectConfig.EffectPattern, target.transform.position, target.transform.forward);
}
if (effectConfig.AudioPattern != null)
{
entity.PlayAudio(effectConfig.AudioPattern, target.transform);
}
}
}
public void FireMixinEffect(MixinEffect effectConfig, BaseMonoEntity target, Vector3 pos, Vector3 forward, bool allowInactiveFire = false)
{
if (effectConfig == null || !(target != null))
{
return;
}
bool flag = false;
if (allowInactiveFire)
{
flag = true;
}
else if (entity.gameObject.activeSelf)
{
flag = true;
}
if (flag)
{
if (effectConfig.EffectPattern != null)
{
entity.FireEffect(effectConfig.EffectPattern, pos, forward);
}
if (effectConfig.AudioPattern != null)
{
entity.PlayAudio(effectConfig.AudioPattern, target.transform);
}
}
}
public int AttachMixinEffect(MixinEffect effectConfig)
{
if (effectConfig.AudioPattern != null)
{
entity.PlayAudio(effectConfig.AudioPattern, entity.transform);
}
return entity.AttachEffect(effectConfig.EffectPattern);
}
public virtual void HandleMixinInvokeEntry(AbilityInvokeEntry invokeEntry, int fromPeerID)
{
}
protected void StartRecordMixinInvokeEntry(out RecordInvokeEntryContext context, uint targetID = 0)
{
actor.mpAbilityPlugin.StartRecordInvokeEntry(instancedAbility.instancedAbilityID, (instancedModifier != null) ? instancedModifier.instancedModifierID : 0, (targetID != 0) ? targetID : actor.runtimeID, mixinLocalID, out context);
}
}
}