Skip to content

Commit d377137

Browse files
committed
Updating abilities to be fully fledged templates
This also contains simple variable types for ability related stats, also a change to add health/magic regen stats at genre/fantasy level as its ended up being quite common, although calculations for it are pushed up to higher tiers, i.e fantasy genre here.
1 parent b623b23 commit d377137

26 files changed

+231
-46
lines changed

.github/workflows/build-and-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Build And Test
22
on: [push]
33

44
env:
5-
BuildVersion: '0.41.${{github.run_number}}'
5+
BuildVersion: '0.42.${{github.run_number}}'
66
SolutionFile: 'src/OpenRpg.sln'
77
DemoProject: 'src/OpenRpg.Demos.Web/OpenRpg.Demos.Web.csproj'
88
EditorProject: 'src/OpenRpg.Editor/OpenRpg.Editor.csproj'

src/OpenRpg.Cards/Genres/AbilityCard.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
namespace OpenRpg.Cards.Genres
1010
{
11-
public class AbilityCard : GenericDataCard<Ability>
11+
public class AbilityCard : GenericDataCard<AbilityTemplate>
1212
{
1313
public override int CardType => CardTypes.AbilityCard;
1414
public override IReadOnlyCollection<IEffect> Effects { get; } = Array.Empty<IEffect>();
1515

16-
public AbilityCard(Ability ability) : base(ability)
16+
public AbilityCard(AbilityTemplate ability) : base(ability)
1717
{}
1818
}
1919
}

src/OpenRpg.Combat/Abilities/Ability.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using OpenRpg.Combat.Abilities.Variables;
2+
using OpenRpg.Core.Templates;
3+
4+
namespace OpenRpg.Combat.Abilities
5+
{
6+
/// <summary>
7+
/// Data related to instances of abilities
8+
/// </summary>
9+
public class AbilityData : ITemplateData<AbilityVariables>
10+
{
11+
public int TemplateId { get; set; }
12+
13+
public AbilityVariables Variables { get; set; } = new AbilityVariables();
14+
}
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using OpenRpg.Combat.Abilities.Variables;
2+
using OpenRpg.Core.Templates;
3+
4+
namespace OpenRpg.Combat.Abilities
5+
{
6+
/// <summary>
7+
/// A template for abilities that can be used by entities/whatever
8+
/// </summary>
9+
public class AbilityTemplate : ITemplate<AbilityTemplateVariables>
10+
{
11+
public int Id { get; set; }
12+
public string NameLocaleId { get; set; }
13+
public string DescriptionLocaleId { get; set; }
14+
15+
public AbilityTemplateVariables Variables { get; set; } = new AbilityTemplateVariables();
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Collections.Generic;
2+
using OpenRpg.Combat.Types;
3+
using OpenRpg.Core.Templates.Variables;
4+
using OpenRpg.Core.Variables;
5+
using OpenRpg.Core.Variables.General;
6+
7+
namespace OpenRpg.Combat.Abilities.Variables
8+
{
9+
public class AbilityTemplateVariables : ObjectVariables, ITemplateVariables
10+
{
11+
public AbilityTemplateVariables(IDictionary<int, object> internalVariables = null) : base(CombatVariableTypes.AbilityTemplateVariables, internalVariables)
12+
{
13+
}
14+
}
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Collections.Generic;
2+
using OpenRpg.Combat.Types;
3+
using OpenRpg.Core.Templates.Variables;
4+
using OpenRpg.Core.Variables.General;
5+
6+
namespace OpenRpg.Combat.Abilities.Variables
7+
{
8+
public class AbilityVariables : ObjectVariables, ITemplateDataVariables
9+
{
10+
public AbilityVariables(IDictionary<int, object> internalVariables = null) : base(CombatVariableTypes.AbilityVariables, internalVariables)
11+
{
12+
}
13+
}
14+
}

src/OpenRpg.Combat/Abilities/Variables/DefaultAbilityVariables.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/OpenRpg.Combat/Abilities/Variables/IAbilityVariables.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using OpenRpg.Combat.Abilities.Variables;
2+
using OpenRpg.Combat.Attacks;
3+
using OpenRpg.Combat.Types;
4+
using OpenRpg.Core.Extensions;
5+
6+
namespace OpenRpg.Combat.Extensions
7+
{
8+
public static class CombatAbilityTemplateVariablesExtensions
9+
{
10+
public static float Cooldown(this AbilityTemplateVariables vars) => vars.GetFloatOrDefault(CombatAbilityTemplateVariableTypes.Cooldown, 0);
11+
public static void Cooldown(this AbilityTemplateVariables vars, int value) => vars[CombatAbilityTemplateVariableTypes.Cooldown] = value;
12+
13+
public static Damage Damage(this AbilityTemplateVariables vars) => vars.GetAsOrDefault(CombatAbilityTemplateVariableTypes.Damage, () => new Damage(0, 0));
14+
public static void Damage(this AbilityTemplateVariables vars, Damage damage) => vars[CombatAbilityTemplateVariableTypes.Damage] = damage;
15+
16+
public static float Range(this AbilityTemplateVariables vars) => vars.GetFloatOrDefault(CombatAbilityTemplateVariableTypes.Range, 0);
17+
public static void Range(this AbilityTemplateVariables vars, float value) => vars[CombatAbilityTemplateVariableTypes.Range] = value;
18+
19+
public static float AttackSize(this AbilityTemplateVariables vars) => vars.GetFloatOrDefault(CombatAbilityTemplateVariableTypes.AttackSize, 0);
20+
public static void AttackSize(this AbilityTemplateVariables vars, float value) => vars[CombatAbilityTemplateVariableTypes.AttackSize] = value;
21+
22+
public static int TargetType(this AbilityTemplateVariables vars) => vars.GetIntOrDefault(CombatAbilityTemplateVariableTypes.TargetType, 0);
23+
public static void TargetType(this AbilityTemplateVariables vars, int value) => vars[CombatAbilityTemplateVariableTypes.TargetType] = value;
24+
}
25+
}

0 commit comments

Comments
 (0)