/// <summary> /// Given an array of combatants, filters out those who aren't valid targets for the given targeting parameters. /// </summary> /// <param name="source"></param> /// <param name="availableTargets"></param> /// <param name="type"></param> /// <returns></returns> public static StratusCombatController[] FilterTargets(StratusCombatController source, StratusCombatController[] availableTargets, StratusCombatTarget type) { StratusCombatController[] targets = null; switch (type) { case StratusCombatTarget.Self: targets = new StratusCombatController[1] { source }; break; case StratusCombatTarget.Ally: targets = (from StratusCombatController target in availableTargets where source.GetTargetRelation(target) == StratusCombatTargetRelation.Friendly select target).ToArray(); break; case StratusCombatTarget.Enemy: targets = (from StratusCombatController target in availableTargets where source.GetTargetRelation(target) == StratusCombatTargetRelation.Hostile select target).ToArray(); break; case StratusCombatTarget.Any: targets = availableTargets; break; default: break; } return((from StratusCombatController controller in targets where controller.state == StratusCombatController.State.Active select controller).ToArray()); }
//----------------------------------------------------------------------/ // Constructor //----------------------------------------------------------------------/ public Instance(StratusCombatTrigger trigger, StratusCombatController caster, Type type, float duration) { Trigger = trigger; Caster = caster; Duration = duration; Elapsed = 0.0f; //Trace.Script("Caster = " + caster.Name + ", Duration = " + Duration, caster); }
/// <summary> /// Starts this trigger. /// </summary> /// <param name="space"></param> public void Start(StratusCombatController caster, Type type, float duration) { var startedEvent = new StartedEvent(); // Make a copy of this trigger ?? startedEvent.Instance = new StratusCombatTrigger.Instance(Copy(this), caster, type, duration); StratusScene.Dispatch <StartedEvent>(startedEvent); }
/// <summary> /// Announces the end of this action. /// </summary> /// <param name="user"></param> protected void End(StratusCombatController user) { currentPhase = Phase.Ended; this.OnEnd(); this.currentPhaseSequence = StratusActions.Sequence(this.User.behaviour); StratusActions.Call(this.currentPhaseSequence, () => Inform <EndedEvent>(), Timers.end); }
/// <summary> /// Triggers this action, signaling that it is ready to be executed. /// </summary> /// <param name="user"></param> public void Trigger(StratusCombatController user, StratusCombatController target) { currentPhase = Phase.Trigger; // Inform the skill is ready to be triggered this.currentPhaseSequence = StratusActions.Sequence(this.User.behaviour); StratusActions.Call(this.currentPhaseSequence, () => Inform <TriggerEvent>(), Timers.trigger); // The action is now finished updating isFinished = true; // Invoke the trigger this.OnTrigger(user, target); }
/// <summary> /// After getting in range of the target, starts the action. It will begin casting it. /// </summary> /// <param name="user">The controller who will be running this action.</param> /// <param name="target"></param> protected void Start(StratusCombatController user, StratusCombatController target) { currentPhase = Phase.Started; //Trace.Script("Starting", user); // Called the first time the action is about to start casting //this.OnStart(user, target); // Inform the controller the the action has started casting this.currentPhaseSequence = StratusActions.Sequence(this.User.behaviour); StratusActions.Call(this.currentPhaseSequence, () => Inform <StartedEvent>()); StratusActions.Delay(this.currentPhaseSequence, Timers.start); StratusActions.Call(this.currentPhaseSequence, () => this.OnStart(user, target)); StratusActions.Call(this.currentPhaseSequence, () => { currentPhase = Phase.Casting; }); //Actions.Property(seq, () => this.CurrentPhase, Phase.Casting, 0f, Ease.Linear); }
/// <summary> /// Continuously casts the current action. Once it has finished casting, it will be triggered. /// </summary> /// <param name="user">The controller who will be running this action.</param> /// <param name="target">The target this action will be acted upon.</param> /// <param name="timeStep">How much will the cast be progressed</param> protected virtual void Cast(StratusCombatController user, StratusCombatController target, float timeStep) { // Update the timer castTimer += timeStep; //Trace.Script("Casting action , cast timer = " + this.CastTimer, user); // Once we are done casting the current action, execute it! It will first // animate it and check for a trigger. // Once the trigger has run, it will be calling this action's 'Execute' method if (castTimer >= Timers.cast) { this.Trigger(user, target); } // If the skill is still casting,... else { OnCasting(user, target, timeStep); } }
/// <summary> /// Initializes the action, configuring it for use. /// </summary> /// <param name="user"></param> /// <param name="target"></param> /// <param name="castTime"></param> /// <param name="range"></param> /// <param name="duration"></param> public void Initialize(StratusCombatController user, StratusCombatController target, float range, Timings timings) { this.User = user; this.Target = target; this.Range = range; this.Timers = timings; // Inform the user that we have picked this target var targetEvent = new StratusCombatController.TargetEvent(); targetEvent.target = target; user.gameObject.Dispatch <StratusCombatController.TargetEvent>(targetEvent); // Inform the user to approach the target var approachEvent = new ApproachEvent(); approachEvent.Action = this; approachEvent.Target = this.Target; approachEvent.Range = this.Range; user.gameObject.Dispatch <ApproachEvent>(approachEvent); currentPhase = Phase.Queue; }
protected abstract void OnCombatControllerDeath(StratusCombatController controller);
protected abstract void OnCombatControllerSpawn(StratusCombatController controller);
//------------------------------------------------------------------------/ // Interface //------------------------------------------------------------------------/ // Combatants protected abstract void OnConfigureCombatController(StratusCombatController CombatController);
//------------------------------------------------------------------------/ // Methods //------------------------------------------------------------------------/ public void Initialize(StratusCombatController controller) { this.controller = controller; this.gameObject = controller.gameObject; this.OnInitialize(); }
protected abstract void OnCasting(StratusCombatController user, StratusCombatController target, float step);
protected StratusCombatControllerEvent(StratusCombatController controller) { this.controller = controller; }
protected override void OnActivation(StratusCombatController user, StratusCombatController target) { }
public BaseActivationEvent(StratusCombatController controller) : base(controller) { }
//protected abstract void OnCast(CombatController user, CombatController target, float step); //----------------------------------------------------------------------/ // Methods //----------------------------------------------------------------------/ /// <summary> /// CombatAction constructor. /// </summary> /// <param name="user">The controller who will be running this action.</param> /// <param name="target">The target this action will be acted upon.</param> /// <param name="castTime">The cast time of this action.</param> /// <param name="range">The range of this action.</param> /// <param name="duration"></param> public StratusCombatAction(StratusCombatController user, StratusCombatController target, float range, Timings timings) { this.Initialize(user, target, range, timings); }
protected abstract void OnExecute(StratusCombatController user, StratusCombatController target);
protected abstract void OnTrigger(StratusCombatController user, StratusCombatController target);
public StratusCombatControllerTurnTakenEvent(StratusCombatController controller) : base(controller) { }
protected abstract void OnActivation(StratusCombatController user, StratusCombatController target);
protected override void OnActivation(StratusCombatController user, StratusCombatController target) { throw new System.NotImplementedException(); }
public override StratusCombatController[] EvaluateTargets(StratusCombatController caster, StratusCombatController[] targets, StratusCombatTarget type) { return(FilterTargets(caster, targets, type).Where(x => Vector3.Distance(x.transform.position, caster.transform.position) <= this.range).ToArray()); }
public abstract StratusCombatTargetRelation GetTargetRelation(StratusCombatController target);
/// <summary> /// Evaluates a list of possible targets according to this targeting model /// </summary> /// <param name="caster"></param> /// <param name="target"></param> /// <param name="type"></param> /// <returns></returns> public abstract StratusCombatController[] EvaluateTargets(StratusCombatController caster, StratusCombatController[] targets, StratusCombatTarget type);
public DespawnEvent(StratusCombatController controller) : base(controller) { }
//----------------------------------------------------------------------/ // Interface //----------------------------------------------------------------------/ protected abstract void OnStart(StratusCombatController user, StratusCombatController target);
public DeactivateEvent(StratusCombatController controller) : base(controller) { }
//------------------------------------------------------------------------/ // Virtual //------------------------------------------------------------------------/ /// <summary> /// Evaluates a list of possible targets in order to find out which ones are /// targetable by this skill. /// </summary> public abstract StratusCombatController[] EvaluateTargets(StratusCombatController user, StratusCombatController[] availableTargets);