Example #1
0
        /// <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());
        }
Example #2
0
 //----------------------------------------------------------------------/
 // 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);
 }
Example #3
0
        /// <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;
 }
Example #15
0
 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)
 {
 }
Example #21
0
 protected abstract void OnActivation(StratusCombatController user, StratusCombatController target);
Example #22
0
 protected override void OnActivation(StratusCombatController user, StratusCombatController target)
 {
     throw new System.NotImplementedException();
 }
Example #23
0
 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);
Example #25
0
 /// <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);