コード例 #1
0
    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);
    }
コード例 #2
0
    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 }));
    }
コード例 #3
0
 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;
                 }
             }
         }
     }
 }
コード例 #4
0
    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);
    }