Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions Classes/Relics/RelicEffect.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,32 @@
public partial class RelicEffect : IBattleEvent
{
private BattleEffectTrigger Trigger { get; set; }
public int BaseValue;
private Action<BattleDirector, int> OnRelicEffect;
private int _baseValue;
public int Value;
private Action<BattleDirector, RelicEffect, int> _onRelicEffect;
private bool _effectPersists = false;

public RelicEffect(
BattleEffectTrigger trigger,
int val,
Action<BattleDirector, int> onRelicEffect
Action<BattleDirector, RelicEffect, int> onRelicEffect
)
{
BaseValue = val;
_baseValue = val;
Value = _baseValue;
Trigger = trigger;
OnRelicEffect = onRelicEffect;
_onRelicEffect = onRelicEffect;
}

public void OnBattleEnd()
{
if (!_effectPersists)
Value = _baseValue;
}

public void OnTrigger(BattleDirector battleDirector)
{
OnRelicEffect(battleDirector, BaseValue);
_onRelicEffect(battleDirector, this, Value);
}

public BattleEffectTrigger GetTrigger()
Expand Down
12 changes: 7 additions & 5 deletions Globals/Scribe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public partial class Scribe : Node
new RelicEffect(
BattleEffectTrigger.OnPickup,
10,
(director, val) =>
(director, self, val) =>
{
StageProducer.PlayerStats.MaxHealth += val;
StageProducer.PlayerStats.CurrentHealth += val;
Expand All @@ -111,7 +111,7 @@ public partial class Scribe : Node
new RelicEffect(
BattleEffectTrigger.NotePlaced,
2,
(director, val) =>
(director, self, val) =>
{
director.Player.Heal(val);
}
Expand All @@ -126,10 +126,11 @@ public partial class Scribe : Node
{
new RelicEffect(
BattleEffectTrigger.OnLoop,
2,
(director, val) =>
1,
(director, self, val) =>
{
director.NotePlacementBar.IncreaseBonusMult(val);
self.Value++;
}
),
}
Expand All @@ -143,9 +144,10 @@ public partial class Scribe : Node
new RelicEffect(
BattleEffectTrigger.OnLoop,
20,
(director, val) =>
(director, self, val) =>
{
director.NotePlacementBar.IncreaseCharge(val);
self.Value++;
}
),
}
Expand Down
63 changes: 45 additions & 18 deletions scenes/BattleDirector/scripts/BattleDirector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ public override void _Ready()
.Instantiate<EnemyPuppet>();
AddChild(Enemy);
Enemy.Defeated += CheckBattleStatus;
AddEnemyEffects();

CM.PrepChart(_curSong);
CD.Prep();
Expand Down Expand Up @@ -200,20 +201,22 @@ private void CheckBattleStatus(PuppetTemplate puppet)
{
if (puppet == Player)
{
LostBattle();
BattleLost();
return;
}
else if (puppet == Enemy)
BattleWon(); //will have to adjust this to account for when we have multiple enemies at once
}

//will have to adjust this to account for when we have multiple enemies at once
if (puppet == Enemy)
{
Audio.StreamPaused = true;
GD.Print("Enemy is dead");
ShowRewardSelection(3);
}
private void BattleWon()
{
Audio.StreamPaused = true;
GD.Print("Enemy is dead");
CleanUpRelics();
ShowRewardSelection(3);
}

private void LostBattle()
private void BattleLost()
{
GD.Print("Player is Dead");
Audio.StreamPaused = true;
Expand Down Expand Up @@ -241,21 +244,45 @@ private void ShowRewardSelection(int amount)
private delegate void ChartLoopHandler(BattleDirector BD);
private event ChartLoopHandler ChartLooped;

private void AddEvent(IBattleEvent bEvent)
{
switch (bEvent.GetTrigger()) //TODO: Look into a way to get eventhandler from string
{
case BattleEffectTrigger.NotePlaced:
NotePlaced += bEvent.OnTrigger;
break;
case BattleEffectTrigger.OnLoop:
ChartLooped += bEvent.OnTrigger;
break;
}
}

private void AddEnemyEffects()
{
foreach (var effect in Enemy.GetBattleEvents())
{
AddEvent(effect);
}
}

private void EventizeRelics()
{
foreach (var relic in Player.Stats.CurRelics)
{
foreach (var effect in relic.Effects)
{
switch (effect.GetTrigger()) //TODO: Look into a way to get eventhandler from string
{
case BattleEffectTrigger.NotePlaced:
NotePlaced += effect.OnTrigger;
break;
case BattleEffectTrigger.OnLoop:
ChartLooped += effect.OnTrigger;
break;
}
AddEvent(effect);
}
}
}

private void CleanUpRelics()
{
foreach (var relic in Player.Stats.CurRelics)
{
foreach (var effect in relic.Effects)
{
effect.OnBattleEnd();
}
}
}
Expand Down
15 changes: 15 additions & 0 deletions scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.Linq;
using FunkEngine;
using Godot;

public partial class P_BossBlood : EnemyPuppet
Expand All @@ -13,5 +15,18 @@ public override void _Ready()
enemTween.SetEase(Tween.EaseType.In);
enemTween.SetLoops();
enemTween.Play();

_battleEvents = new EnemyEffect[]
{
new EnemyEffect(
this,
BattleEffectTrigger.OnLoop,
5,
(director, eff, val) =>
{
eff.Owner.Heal(val);
}
),
};
}
}
36 changes: 36 additions & 0 deletions scenes/Puppets/Enemies/EnemyEffect.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;
using FunkEngine;
using Godot;

public partial class EnemyEffect : IBattleEvent
{
private BattleEffectTrigger Trigger { get; set; }
public EnemyPuppet Owner;
private int _baseValue;
public int Value;
private Action<BattleDirector, EnemyEffect, int> _onEnemyEffect;

public EnemyEffect(
EnemyPuppet owner,
BattleEffectTrigger trigger,
int val,
Action<BattleDirector, EnemyEffect, int> onEnemyEffect
)
{
Owner = owner;
_baseValue = val;
Value = _baseValue;
Trigger = trigger;
_onEnemyEffect = onEnemyEffect;
}

public void OnTrigger(BattleDirector battleDirector)
{
_onEnemyEffect(battleDirector, this, Value);
}

public BattleEffectTrigger GetTrigger()
{
return Trigger;
}
}
7 changes: 7 additions & 0 deletions scenes/Puppets/Enemies/EnemyPuppet.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
using System;
using FunkEngine;
using Godot;

public partial class EnemyPuppet : PuppetTemplate
{
//TODO: What do enemies need?
protected EnemyEffect[] _battleEvents = Array.Empty<EnemyEffect>();

public virtual EnemyEffect[] GetBattleEvents()
{
return _battleEvents;
}
}
Loading