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; }
/// <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); } } } }
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(); } } } }
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); }