private void DoSkillEffect(int index, RLBaseActor user, RLBaseTile targetTile) { if (index < skillEffects.Length) { skillEffects[index].DoEffect(user, targetTile, () => { DoSkillEffect(index + 1, user, targetTile); }); } }
private void ShowEffects(string[] effects, RLBaseActor actor, RLBaseTile target, Action onComplete) { RLVisualEffect.VisualEffectParams effectParams = new RLVisualEffect.VisualEffectParams() { From = actor.GetTile(), Targets = new List <RLBaseTile>(new[] { target }), ActorController = this }; effectRenderer.ShowEffects(effects, effectParams, onComplete); }
public override void SetActor(RLBaseActor actor) { if (actor == Actor) { return; } Actor = actor; if (Actor != null) { if (Actor.GetTile() != null) { Actor.GetTile().SetActor(null); } Actor.SetTile(this); } }
public override void OnUse(RLBaseActor user) { if (!isEquipped) { isEquipped = true; foreach (StatMod mod in statMods) { user.GetStats().AddModifier(mod); } } else { isEquipped = false; foreach (StatMod mod in statMods) { user.GetStats().RemoveModifier(mod); } } }
public bool IsTargetValid(RLBaseActor skillUser, RLBaseTile targetTile) { if (!IsTargetInRange(skillUser, targetTile)) { return(false); } switch (Target) { case TargetType.None: return(false); case TargetType.Any: return(true); case TargetType.EmptyTile: return(!targetTile.GetTileType().BlocksMovement&& targetTile.GetActor() == null); case TargetType.Self: return(true); case TargetType.AnyCreature: return(targetTile.GetActor() != null); case TargetType.Enemy: return(targetTile.GetActor() != null && skillUser.IsEnemyOf(targetTile.GetActor())); case TargetType.Ally: return(targetTile.GetActor() != null && skillUser.IsAllyOf(targetTile.GetActor())); case TargetType.Custom: return(IsCustomTargetValid(skillUser, targetTile)); default: throw new ArgumentOutOfRangeException(); } }
public virtual List <RLBaseTile> GetVisibleTilesForActor(RLBaseActor actor) { Vector2Int pos = new Vector2Int(actor.GetTile().GetDisplayPosition().x, actor.GetTile().GetDisplayPosition().y); return(GetVisibleTilesFromPosition(pos, actor.GetVisionRange(), actor.GetTile().Floor)); }
public abstract void SetActor(RLBaseActor actor);
public virtual bool IsEnemyOf(RLBaseActor otherActor) { return(GetTeamId() != otherActor.GetTeamId()); }
public override void DoEffect(RLBaseActor actor, RLBaseTile target, Action onComplete) { actor.ShowEffects(vfx, target, onComplete); }
public virtual bool IsTargetInRange(RLBaseActor skillUser, RLBaseTile targetTile) { return(range <= 0 || Vector3.Distance(skillUser.GetTile().GetDisplayPosition(), targetTile.GetDisplayPosition()) <= range); }
public abstract bool CanUse(RLBaseActor user);
public override bool ShowBehaviour(RLBaseActor user) { return(true); }
public override bool CanUse(RLBaseActor user) { return(true); }
public override void DoEffect(RLBaseActor user, RLBaseTile target, Action onComplete) { target.SetActor(user); onComplete(); }
public abstract void DoEffect(RLBaseActor actor, RLBaseTile target, Action onComplete);
/** * If the skill needs custom targeting logic not covered by one of the enumerated cases in TargetType, * override this method to return true for valid targets. */ protected virtual bool IsCustomTargetValid(RLBaseActor skillUser, RLBaseTile targetTile) { return(false); }
public abstract bool ShowBehaviour(RLBaseActor user);
public abstract void OnUse(RLBaseActor user);
public void DoSkill(RLBaseActor user, RLBaseTile targetTile) { DoSkillEffect(0, user, targetTile); }
public virtual bool IsAllyOf(RLBaseActor otherActor) { return(GetTeamId() == otherActor.GetTeamId()); }
public void BindInventory(RLBaseActor actor) { actor.OnInventoryChanged = () => BindDataList(new List <RLBaseItem>(actor.GetInventory())); BindDataList(new List <RLBaseItem>(actor.GetInventory())); }
public void BindActor(RLBaseActor actor) { actor.ShowEffects = (effects, target, onComplete) => ShowEffects(effects, actor, target, onComplete); actor.OnPositionChanged = () => transform.position = actor.GetTile().GetDisplayPosition(); }