public static TrajectoryHandler GetAccessibleTrajectory(Vector2 position, TrajectoryHandler original) { position = original.closestPoint(position); var line = original.containingLine(position); if (line == null) { // Return empty trajectory return(new TrajectoryHandler(new Trajectory())); } var output = new Trajectory(); var toOpen = new Queue <LineHandler>(); var opened = new Dictionary <LineHandler, bool>(); var added = new Dictionary <string, bool>(); toOpen.Enqueue(line); while (toOpen.Count != 0) { var current = toOpen.Dequeue(); opened[current] = true; // First we add both nodes and the side if (!added.ContainsKey(current.start.getID())) { output.addNode(current.start.getID(), current.start.getX(), current.start.getY(), current.start.getScale()); added.Add(current.start.getID(), true); } if (!added.ContainsKey(current.end.getID())) { output.addNode(current.end.getID(), current.end.getX(), current.end.getY(), current.end.getScale()); added.Add(current.end.getID(), true); } output.addSide(current.start.getID(), current.end.getID(), (int)current.getDistance()); // Then we add the neightbor lines to expand foreach (var side in current.getNeighborLines()) { if (opened.ContainsKey(side) && opened[side]) { continue; } else { toOpen.Enqueue(side); } } } return(new TrajectoryHandler(output)); }
public static Rectangle MoveAreaToTrajectory(this Rectangle area, uAdventure.Runner.TrajectoryHandler trajectory) { var points = area.isRectangular() ? area.ToRect().ToPoints() : area.getPoints().ToArray(); var aa = new ActiveArea("aux", false, 0, 0, 0, 0); var pointsList = aa.getPoints(); var center = points.Aggregate((v1, v2) => v1 + v2) / points.Length; var adjust = -center + trajectory.closestPoint(center); foreach (var p in points) { pointsList.Add(p + adjust); } return(aa); }
public InteractuableResult Interacted(RaycastHit hit = default(RaycastHit)) { Effects e; InteractuableResult res = InteractuableResult.IGNORES; switch (sceneData.getType()) { case GeneralScene.GeneralSceneSceneType.SCENE: if (!Game.Instance.GameState.isFirstPerson()) { PlayerMB.Instance.move(trajectory.route(PlayerMB.Instance.getPosition(), trajectory.closestPoint(Camera.main.ScreenToWorldPoint(Input.mousePosition)))); } break; case GeneralScene.GeneralSceneSceneType.SLIDESCENE: if (current_slide + 1 < this.slides.frames.Count) { current_slide++; this.transform.FindChild("Background").GetComponent <Renderer>().material.mainTexture = this.slides.frames[current_slide].Image; res = InteractuableResult.REQUIRES_MORE_INTERACTION; } else { switch (((Slidescene)sceneData).getNext()) { case Slidescene.NEWSCENE: Game.Instance.RunTarget(((Slidescene)sceneData).getTargetId()); break; case Slidescene.ENDCHAPTER: //Game.Instance(); break; } e = ((Slidescene)sceneData).getEffects(); if (e != null && Game.Instance.Execute(new EffectHolder(e))) { res = InteractuableResult.DOES_SOMETHING; } } break; case GeneralScene.GeneralSceneSceneType.VIDEOSCENE: switch (((Videoscene)sceneData).getNext()) { case Slidescene.NEWSCENE: Game.Instance.RunTarget(((Videoscene)sceneData).getTargetId()); break; case Slidescene.ENDCHAPTER: break; } e = ((Videoscene)sceneData).getEffects(); if (e != null && Game.Instance.Execute(new EffectHolder(e))) { res = InteractuableResult.DOES_SOMETHING; } if (movie.isPlaying()) { movie.Stop(); Tracker.T.accessible.Skipped(sceneData.getId(), AccessibleTracker.Accessible.Cutscene); } break; } return(res); }