public override Queue <EffectResolutionTask> GetEffectTasksWithTargets(IEffectDescription effect, Targettable[] targets, PlayerController player, Targettable source) { Queue <EffectResolutionTask> tasks = new Queue <EffectResolutionTask>(); TargetXDescription targetDescription = new TargetXDescription(targetType, GetPlayerAlignment()); targetDescription.amount = 1; targetDescription.qualifier = qualifier; TargettingQuery query = new TargettingQuery(targetDescription, player, false); GameSession gameSession = GameUtils.GetGameSession(); List <Targettable> possibleTargets = gameSession.GetPotentialTargets(); foreach (Targettable t in possibleTargets) { if (t.IsTargettable(query)) { EffectResolutionTask task = new EffectResolutionTask(); task.effect = effect; task.target = t.GetTargettableEntity(); task.player = player; task.source = source; tasks.Enqueue(task); } } return(tasks); }
public override Queue <EffectResolutionTask> GetEffectTasksWithTargets(IEffectDescription effect, Targettable[] targets, PlayerController player, Targettable source) { EffectResolutionTask task = new EffectResolutionTask(); task.effect = effect; task.target = player; task.player = player; task.source = source; return(new Queue <EffectResolutionTask>(new EffectResolutionTask[] { task })); }
public override void Update(float frameDelta) { if (gameSession.isServer) { if (receivedAcknowledgement) { if (effectTasks == null || effectTasks.Count == 0) { if (!stateUpdated) { // This might trigger a state push of trigger effects // Don't make an exit request on the same frame so only do this for the whole frame gameSession.ServerUpdateGameState(); stateUpdated = true; } else { stateUpdated = false; if (gameSession.IsStackEmpty()) { if (gameSession.GetLocalPlayer().IsInCombat()) { ExitState(); } else { ChangeState(GameSession.GameState.WAIT_ACTIVE); } } else { Effect effect = gameSession.ServerPopStack(); effectTasks = effect.GetEffectTasks(); } } } else { EffectResolutionTask task = effectTasks.Dequeue(); task.effect.ApplyToTarget(task.target, task.player, task.source); acknowledgementType = task.effect.GetAcknowlegementType(); if (acknowledgementType != null) { receivedAcknowledgement = false; } } } } }
public override Queue <EffectResolutionTask> GetEffectTasksWithTargets(IEffectDescription effect, Targettable[] targets, PlayerController player, Targettable source) { Queue <EffectResolutionTask> tasks = new Queue <EffectResolutionTask>(); foreach (Targettable target in targets) { EffectResolutionTask task = new EffectResolutionTask(); task.effect = effect; task.target = target.GetTargettableEntity(); task.player = player; task.source = source; tasks.Enqueue(task); } return(tasks); }