public void AttemptInitialRecovery()
 {
     if (!base.gameObject.HasTag(GameTags.Incapacitated))
     {
         int cell = Grid.PosToCell(navigator);
         NavGrid.Transition[] transitions = navigator.NavGrid.transitions;
         int num = 0;
         while (true)
         {
             if (num >= transitions.Length)
             {
                 return;
             }
             NavGrid.Transition transition = transitions[num];
             if (transition.isEscape && navigator.CurrentNavType == transition.start)
             {
                 int num2 = transition.IsValid(cell, navigator.NavGrid.NavTable);
                 if (Grid.InvalidCell != num2)
                 {
                     break;
                 }
             }
             num++;
         }
         base.smi.GoTo(base.smi.sm.recoverinitialfall);
     }
 }
    private static void CreateLinks(int cell, NavTable nav_table, int max_links_per_cell, NavGrid.Link[] links, NavGrid.Transition[][] transitions_by_nav_type)
    {
        int num  = cell * max_links_per_cell;
        int num2 = 0;

        for (int i = 0; i < 10; i++)
        {
            NavType nav_type           = (NavType)i;
            NavGrid.Transition[] array = transitions_by_nav_type[i];
            if (array != null && nav_table.IsValid(cell, nav_type))
            {
                NavGrid.Transition[] array2 = array;
                for (int j = 0; j < array2.Length; j++)
                {
                    NavGrid.Transition transition = array2[j];
                    int num3 = transition.IsValid(cell, nav_table);
                    if (num3 != Grid.InvalidCell)
                    {
                        links[num] = new NavGrid.Link(num3, transition.start, transition.end, transition.id, transition.cost);
                        num++;
                        num2++;
                    }
                }
            }
        }
        if (num2 >= max_links_per_cell)
        {
            Debug.LogError("Out of nav links. Need to increase maxLinksPerCell:" + max_links_per_cell);
        }
        links[num].link = Grid.InvalidCell;
    }
    public void BeginTransition(NavGrid.Transition transition)
    {
        transitionDriver.EndTransition();
        base.smi.GoTo(base.smi.sm.moving);
        ActiveTransition transition2 = new ActiveTransition(transition, defaultSpeed);

        transitionDriver.BeginTransition(this, transition2);
    }
 public ActiveTransition(NavGrid.Transition transition, float default_speed)
 {
     x                 = transition.x;
     y                 = transition.y;
     isLooping         = transition.isLooping;
     start             = transition.start;
     end               = transition.end;
     preAnim           = transition.preAnim;
     anim              = transition.anim;
     speed             = default_speed;
     navGridTransition = transition;
 }
Exemplo n.º 5
0
        /// <summary>
        /// Swap the dupes facing before starting the reactable
        /// </summary>
        static void Prefix(GameObject new_reactor, Navigator.ActiveTransition transition)
        {
            PrimaryElement dupe = new_reactor?.GetComponent <PrimaryElement>();

            if (dupe != null)
            {
                Navigator navigator = dupe.GetComponent <Navigator>();

                if (navigator != null)
                {
                    NavGrid.Transition nextTransition = navigator.GetNextTransition();

                    if (nextTransition.x < 0)
                    {
                        // Mirror dupes facing direction to the initial direction
                        dupe.GetComponent <Facing>()?.SetFacing(true);
                    }
                }
            }
        }
Exemplo n.º 6
0
 public override void Update(float dt)
 {
     if ((UnityEngine.Object)checkpoint == (UnityEngine.Object)null || !checkpoint.RedLight || (UnityEngine.Object)reactor_navigator == (UnityEngine.Object)null)
     {
         Cleanup();
     }
     else
     {
         reactor_navigator.AdvancePath(false);
         if (!reactor_navigator.path.IsValid())
         {
             Cleanup();
         }
         else
         {
             NavGrid.Transition nextTransition = reactor_navigator.GetNextTransition();
             if (!((!rotated) ? (nextTransition.x > 0) : (nextTransition.x < 0)))
             {
                 Cleanup();
             }
         }
     }
 }
Exemplo n.º 7
0
        public static bool TryGetNextTransition(this Navigator navigator, out NavGrid.Transition transition)
        {
            transition = default;

            // (╯°□°)╯︵ ┻━┻
            if (navigator == null ||
                navigator.path.nodes == null ||
                navigator.NavGrid == null ||
                navigator.NavGrid.transitions == null ||
                navigator.path.nodes.Count < 2)
            {
                return(false);
            }

            int nextid = navigator.path.nodes[1].transitionId;

            if (nextid >= navigator.NavGrid.transitions.Length)
            {
                return(false);
            }

            transition = navigator.GetNextTransition();
            return(true);
        }