mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-16 16:34:41 +01:00
155 lines
3.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|