Пример #1
0
        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));
        }
Пример #2
0
    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);
    }
Пример #3
0
        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);
        }