spell refactor part - assets and prefabs
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
using Invector;
|
||||
using Invector.vMelee;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Beyond
|
||||
@@ -10,20 +7,15 @@ namespace Beyond
|
||||
public class ShadowSlayerBarkHelper : MonoBehaviour
|
||||
{
|
||||
private const int fullyChargedBarkId = 24, emptySlayerBarkId = 14, normalSwordAttackBarkID = 23, powerBarkID = 22;
|
||||
public vObjectDamage blastDamager, flamethrowerDamager;//, fireballDamager;
|
||||
|
||||
// Remove specific damagers, we don't need them anymore
|
||||
// public vObjectDamage blastDamager, flamethrowerDamager;
|
||||
|
||||
public BarkManager barkManager;
|
||||
|
||||
// public bEquipArea weaponsArea;
|
||||
public vMeleeManager meleeManager;
|
||||
|
||||
// public List<bEquipSlot> weaponSlots;
|
||||
private vMeleeWeapon weapon;
|
||||
|
||||
public MagicAttacks magicAttacks;
|
||||
|
||||
public TutorialController emptySlayerTutorial;
|
||||
|
||||
// Start is called before the first frame update
|
||||
private void Awake()
|
||||
{
|
||||
EnableShadowSlayerBarks();
|
||||
@@ -31,48 +23,32 @@ namespace Beyond
|
||||
|
||||
private void EnableShadowSlayerBarks()
|
||||
{
|
||||
meleeManager.onDamageHit.AddListener(TryToPlayAttackBark);
|
||||
if (meleeManager)
|
||||
meleeManager.onDamageHit.AddListener(TryToPlayAttackBark);
|
||||
|
||||
blastDamager.onHit.AddListener(TryToPlayPowerBark);
|
||||
flamethrowerDamager.onHit.AddListener(TryToPlayPowerBark);
|
||||
|
||||
magicAttacks.onHitFireball += TryToPlayPowerBark;
|
||||
// fireballDamager.onHit.AddListener(TryToPlayPowerBark);
|
||||
// NEW: Subscribe to the centralized Magic event
|
||||
if (magicAttacks)
|
||||
magicAttacks.OnSpellHit += OnMagicHit;
|
||||
}
|
||||
|
||||
private void TryToPlayAttackBark(vHitInfo arg0)
|
||||
private void OnDestroy()
|
||||
{
|
||||
CharacterVisibilityController visilibityController = arg0.targetCollider.GetComponent<CharacterVisibilityController>();
|
||||
if (visilibityController)
|
||||
{
|
||||
weapon = meleeManager.rightWeapon;
|
||||
bItemAttribute power = weapon.GetComponent<bMeleeEquipment>().power;
|
||||
if (power != null && power.value > 0)
|
||||
{
|
||||
//attacking with fully charged slayer
|
||||
barkManager.PlayBark(fullyChargedBarkId);
|
||||
}
|
||||
else if (power != null && power.value <= 0 && !emptySlayerTutorial.played)
|
||||
{
|
||||
emptySlayerTutorial.StartTutorial();
|
||||
//attacking with empty slayer, change id to correct!
|
||||
// barkManager.PlayBark(emptySlayerBarkId);
|
||||
}
|
||||
else if (power == null)
|
||||
{
|
||||
//attacking
|
||||
barkManager.PlayBark(normalSwordAttackBarkID);
|
||||
}
|
||||
//not much of an improvement as bark handles playing already, just removes few check before
|
||||
TryToRemoveAttackListener();
|
||||
}
|
||||
}
|
||||
|
||||
private void TryToRemoveAttackListener()
|
||||
{
|
||||
if (!(barkManager.CanBarkBeStillPlayed(fullyChargedBarkId) || !emptySlayerTutorial.played /*|| barkManager.CanBarkBeStillPlayed(emptySlayerBarkId) */ || barkManager.CanBarkBeStillPlayed(normalSwordAttackBarkID)))
|
||||
{
|
||||
if (magicAttacks)
|
||||
magicAttacks.OnSpellHit -= OnMagicHit;
|
||||
|
||||
if (meleeManager)
|
||||
meleeManager.onDamageHit.RemoveListener(TryToPlayAttackBark);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// MAGIC LOGIC
|
||||
// ---------------------------------------------------------
|
||||
private void OnMagicHit(SpellDefinition spell, Collider hitTarget)
|
||||
{
|
||||
// Check if the spell is "Offensive_Power" (Fireball, Flamethrower, Blast)
|
||||
if (spell.category == SpellCategory.Offensive_Power)
|
||||
{
|
||||
TryToPlayPowerBark(hitTarget);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,25 +57,65 @@ namespace Beyond
|
||||
CharacterVisibilityController visilibityController = arg0.GetComponent<CharacterVisibilityController>();
|
||||
if (visilibityController)
|
||||
{
|
||||
barkManager.PlayBark(powerBarkID);
|
||||
TryToRemovePowerBarkListener();
|
||||
if (barkManager.CanBarkBeStillPlayed(powerBarkID))
|
||||
{
|
||||
barkManager.PlayBark(powerBarkID);
|
||||
// We don't need to unsubscribe here anymore because the
|
||||
// event is global and persistent on MagicAttacks.
|
||||
// The 'CanBarkBeStillPlayed' check handles the "play once" logic.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TryToRemovePowerBarkListener()
|
||||
// ---------------------------------------------------------
|
||||
// MELEE LOGIC (Unchanged, just uncommented)
|
||||
// ---------------------------------------------------------
|
||||
private void TryToPlayAttackBark(vHitInfo arg0)
|
||||
{
|
||||
if (barkManager.CanBarkBeStillPlayed(powerBarkID))
|
||||
CharacterVisibilityController visilibityController = arg0.targetCollider.GetComponent<CharacterVisibilityController>();
|
||||
if (visilibityController)
|
||||
{
|
||||
blastDamager.onHit.RemoveListener(TryToPlayPowerBark);
|
||||
flamethrowerDamager.onHit.RemoveListener(TryToPlayPowerBark);
|
||||
magicAttacks.onHitFireball -= TryToPlayPowerBark;
|
||||
//fireballDamager.onHit.RemoveListener(TryToPlayPowerBark);
|
||||
var weapon = meleeManager.rightWeapon;
|
||||
if (weapon == null) return;
|
||||
|
||||
bItemAttribute power = weapon.GetComponent<bMeleeEquipment>().power;
|
||||
|
||||
if (power != null && power.value > 0)
|
||||
{
|
||||
// Fully charged
|
||||
barkManager.PlayBark(fullyChargedBarkId);
|
||||
}
|
||||
else if (power != null && power.value <= 0)
|
||||
{
|
||||
// Empty Slayer
|
||||
if (emptySlayerTutorial != null && !emptySlayerTutorial.played)
|
||||
{
|
||||
emptySlayerTutorial.StartTutorial();
|
||||
}
|
||||
// barkManager.PlayBark(emptySlayerBarkId);
|
||||
}
|
||||
else if (power == null)
|
||||
{
|
||||
// Normal Sword
|
||||
barkManager.PlayBark(normalSwordAttackBarkID);
|
||||
}
|
||||
|
||||
// Cleanup listener if all barks are done
|
||||
TryToRemoveAttackListener();
|
||||
}
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
private void Update()
|
||||
private void TryToRemoveAttackListener()
|
||||
{
|
||||
// If all relevant barks are exhausted/played, stop listening to melee hits to save performance
|
||||
bool fullyChargedDone = !barkManager.CanBarkBeStillPlayed(fullyChargedBarkId);
|
||||
bool normalDone = !barkManager.CanBarkBeStillPlayed(normalSwordAttackBarkID);
|
||||
bool tutorialDone = (emptySlayerTutorial == null || emptySlayerTutorial.played);
|
||||
|
||||
if (fullyChargedDone && normalDone && tutorialDone)
|
||||
{
|
||||
meleeManager.onDamageHit.RemoveListener(TryToPlayAttackBark);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user