private bool searchPortal = false;
private Vector3 portalPosition = Vector3.Zero;
private List<string> visitedPortals = new List<string>();
/// <summary>
/// Handles actual movement to the Priority Scene
/// </summary>
private void MoveToPriorityScene()
{
Logger.Log(TrinityLogLevel.Info, LogCategory.ProfileTag, "Moving to Priority Scene {0} - {1} Center {2} Distance {3:0}",
CurrentPriorityScene.Name, CurrentPriorityScene.SceneInfo.SNOId, PrioritySceneTarget, PrioritySceneTarget.Distance2D(myPos));
if (!searchPortal)
{
MoveResult moveResult = PlayerMover.NavigateTo(PrioritySceneTarget);
if (moveResult == MoveResult.PathGenerationFailed || moveResult == MoveResult.ReachedDestination)
{
Logger.Log(TrinityLogLevel.Info, LogCategory.ProfileTag, "Unable to navigate to Scene {0} - Try looking for the portal.",
CurrentPriorityScene.Name, CurrentPriorityScene.SceneInfo.SNOId, PrioritySceneTarget, PrioritySceneTarget.Distance2D(myPos));
var portalSwitch = ZetaDia.Actors.GetActorsOfType<DiaObject>(true, false)
.Where(o => o.ActorSNO == 328830)
.Where(o => o.ActorInfo.GizmoType == GizmoType.Switch)
.Where(o => !visitedPortals.Contains(o.Name))
.OrderBy(o => o.Distance).FirstOrDefault();
if (portalSwitch != null && portalSwitch.IsValid)
{
Logger.Log(TrinityLogLevel.Info, LogCategory.ProfileTag, "Found portal: {0}. Trying to get through.", portalSwitch.Name);
visitedPortals.Add(portalSwitch.Name);
portalPosition = portalSwitch.Position;
searchPortal = true;
}
}
}
else if (portalPosition != Vector3.Zero)
{
if (portalPosition.Distance2D(myPos) < 15f)
{
Logger.Log(TrinityLogLevel.Info, LogCategory.ProfileTag, "Reached the portal, distance: {0}", portalPosition.Distance2D(myPos));
ZetaDia.Me.UsePower(SNOPower.Axe_Operate_Gizmo, portalPosition);
searchPortal = false;
portalPosition = Vector3.Zero;
}
else
{
MoveResult moveResult = PlayerMover.NavigateTo(portalPosition);
Logger.Log(TrinityLogLevel.Info, LogCategory.ProfileTag, "Searching portal, distance: {0}, move res: {1}", portalPosition.Distance2D(myPos), moveResult);
if (moveResult == MoveResult.PathGenerationFailed || moveResult == MoveResult.UnstuckAttempt || moveResult == MoveResult.ReachedDestination)
{
searchPortal = false;
portalPosition = Vector3.Zero;
PrioritySceneMoveToFinished();
}
}
}
}