Ejemplo n.º 1
0
    private bool getRecentShotInit(out FireBoltAction cameraAction)
    {
        //walk back in the camera action list to find the last shot fragment init executed
        int cameraActionIndex = cameraActionList.NextActionIndex;

        cameraAction = null;
        while (cameraActionIndex > 0)
        {
            cameraActionIndex--;
            cameraAction = cameraActionList[cameraActionIndex];
            if (cameraAction is ShotFragmentInit)
            {
                return(true);
            }
        }
        return(false);
    }
Ejemplo n.º 2
0
    void fastForwardFireBoltActions(FireBoltActionList actions, float targetTime, FireBoltActionList executingActions)
    {
        //complete and remove from executing all actions that will be done by targetTime
        List <FireBoltAction> removeList = new List <FireBoltAction>();

        foreach (FireBoltAction action in executingActions)
        {
            if (actionComplete(action, targetTime))
            {
                action.Skip();
                removeList.Add(action);
            }
        }
        foreach (FireBoltAction action in removeList)
        {
            executingActions.Remove(action);
        }

        //iterate over action queue,
        //skipping to end of actions that will be completed at target time
        //appending to executing queue actions that will still be in progress at target time
        while (actions.NextActionIndex < actions.Count && actions[actions.NextActionIndex].StartTick() <= targetTime)
        {
            FireBoltAction action = actions[actions.NextActionIndex];
            actions.NextActionIndex++;
            if (action.Init())
            {
                if (!actionComplete(action, targetTime))
                {
                    executingActions.Add(action);
                }
                else
                {
                    action.Skip();
                }
            }
        }
    }
Ejemplo n.º 3
0
    /// <summary>
    /// appends and removes from the executing lists based on the time and the last action
    /// appended from the full list of actions
    /// </summary>
    /// <param name="actions">action list of either story or discourse actions.  both will be update each frame</param>
    /// <param name="executingActions">executing list for story or discourse actions.  should match first parameter</param>
    /// <param name="referenceTime">current story or discourse time. also should match the lists</param>
    void updateFireBoltActions(FireBoltActionList actions, FireBoltActionList executingActions, float referenceTime)
    {
        //stop things that should be finished now and remove them from the executing list
        List <FireBoltAction> removeList = new List <FireBoltAction>();

        foreach (FireBoltAction action in executingActions)
        {
            if (actionComplete(action, referenceTime) || action.StartTick() > referenceTime)
            {
                action.Stop();
                removeList.Add(action);
            }
        }
        foreach (FireBoltAction action in removeList)
        {
            executingActions.Remove(action);
        }

        //go through the full action list until the next action shouldn't have started yet
        while (actions.NextActionIndex < actions.Count && actions[actions.NextActionIndex].StartTick() <= referenceTime)
        {
            FireBoltAction action = actions[actions.NextActionIndex];
            actions.NextActionIndex++;
            if (action.Init())
            {
                if (actionComplete(action, referenceTime))
                {
                    action.Skip();                //if the new action should have already completed, run the skip on it
                }
                else
                {
                    executingActions.Add(action);
                }
            }
        }
    }
Ejemplo n.º 4
0
 bool actionComplete(FireBoltAction action, float referenceTime)
 {
     return(action.EndTick() < referenceTime);
 }