Salut,
Je suis aussi entrain de développer un RPG/roguelike, à priori une première alpha sera disponible d'ici la fin du mois ou début octobre.
J'ai un problème dans l'implémentation de la classe Compétence. Chaque compétence ayant un effet différent et particulier, ma fonction LancerSort() sera totalement différente d'un sort à l'autre. Comment feriez-vous cette implémentation ?
Pour ça j'ai une classe Effect:
public abstract class Effect : ScriptableObject
{
public abstract void Apply(Vector3Int target, Character Caster, int power);
}
Pour chaque effet différent il suffit de créer une nouvelle classe héritant de Effect:
public class Heal : Effect
{
public override void Apply(Vector3Int target, Character Caster, int power)
{
Character Target = Map.GetCharacterAtPos(target);
Target.Health += power;
}
}
Ensuite il suffit d'avoir une liste d'effets dans ta classe compétence (ou, dans mon cas, la classe Action que je sépare de ma classe Ability vu que je peux avoir des compétence qui ne donne pas d'action, avec un effet passif).
[System.Serializable]
public struct EffectsElement
{
public Effect Effect;
public int power;
}
public class Action : ScriptableObject
{
public EffectsElement[] Effects;
/*il y a 100+ lignes ici que je met pas*/
public void Apply(Vector3Int targetPos, Character Caster)
{
foreach(EffectsElement EffectsElement in Effects)
{
EffectsElement.Effect.Apply(targetPos, Caster, EffectsElement.power);
}
}
}
J'avais réfléchi à utiliser des delegates aussi, mais je ne suis pas sur que ça mène à du code plus propre que ma façon de faire.