示例#1
0
        private void Smash(Vector2 dir, bool force = false)
        {
            MoveDir = dir;

            if (MoveDir == -Vector2.UnitY && CurrentNode.NodeUp != null)
            {
                nextNode     = CurrentNode.NodeUp;
                currentTrack = CurrentNode.TrackUp;
            }
            else if (MoveDir == Vector2.UnitY && CurrentNode.NodeDown != null)
            {
                nextNode     = CurrentNode.NodeDown;
                currentTrack = CurrentNode.TrackDown;
            }
            else if (MoveDir == -Vector2.UnitX && CurrentNode.NodeLeft != null)
            {
                nextNode     = CurrentNode.NodeLeft;
                currentTrack = CurrentNode.TrackLeft;
            }
            else if (MoveDir == Vector2.UnitX && CurrentNode.NodeRight != null)
            {
                nextNode     = CurrentNode.NodeRight;
                currentTrack = CurrentNode.TrackRight;
            }

            IsMoving = force && currentTrack.CanBeUsed;
            if (!force)
            {
                scale = new Vector2(
                    1f + Math.Abs(dir.Y) * 0.35f - Math.Abs(dir.X) * 0.35f,
                    1f + Math.Abs(dir.X) * 0.35f - Math.Abs(dir.Y) * 0.35f);
                hitOffset = dir * 5f;
                IsMoving  = true;
            }
        }
示例#2
0
        private void AddNodeToTrack(Node node, StationBlockTrack track)
        {
            Node foundNode = GetNodeAt(Track, node.Position);

            if (foundNode == null)
            {
                Track.Add(node);
            }
            else
            {
                if (foundNode.NodeUp == null && node.NodeUp != null)
                {
                    foundNode.NodeUp      = node.NodeUp;
                    node.NodeUp.NodeDown  = foundNode;
                    foundNode.TrackUp     = track;
                    node.NodeUp.TrackDown = track;
                }
                if (foundNode.NodeDown == null && node.NodeDown != null)
                {
                    foundNode.NodeDown    = node.NodeDown;
                    node.NodeDown.NodeUp  = foundNode;
                    foundNode.TrackDown   = track;
                    node.NodeDown.TrackUp = track;
                }
                if (foundNode.NodeLeft == null && node.NodeLeft != null)
                {
                    foundNode.NodeLeft       = node.NodeLeft;
                    node.NodeLeft.NodeRight  = foundNode;
                    foundNode.TrackLeft      = track;
                    node.NodeLeft.TrackRight = track;
                }
                if (foundNode.NodeRight == null && node.NodeRight != null)
                {
                    foundNode.NodeRight      = node.NodeRight;
                    node.NodeRight.NodeLeft  = foundNode;
                    foundNode.TrackRight     = track;
                    node.NodeRight.TrackLeft = track;
                }
                if (foundNode.PushForce == Vector2.Zero && node.PushForce != Vector2.Zero)
                {
                    foundNode.PushForce              = node.PushForce;
                    foundNode.HasIndicator           = node.HasIndicator;
                    foundNode.IndicatorColor         = node.IndicatorColor;
                    foundNode.IndicatorIncomingColor = node.IndicatorIncomingColor;
                }
            }
        }
示例#3
0
        private void AddToGroupAndFindChildren(StationBlockTrack from)
        {
            from.HasGroup = true;
            from.master   = this;
            Group.Add(from);

            AddTrackSegmentToTrack(from.initialNodeData1, from.initialNodeData2, from);

            foreach (StationBlockTrack track in Scene.Tracker.GetEntities <StationBlockTrack>())
            {
                if (!track.HasGroup && !from.trackRect.Intersects(track.trackRect))
                {
                    if (from.nodeRect1.Intersects(track.nodeRect1) || from.nodeRect1.Intersects(track.nodeRect2) ||
                        from.nodeRect2.Intersects(track.nodeRect1) || from.nodeRect2.Intersects(track.nodeRect2))
                    {
                        AddToGroupAndFindChildren(track);
                    }
                }
            }
        }
示例#4
0
 private void AddTrackSegmentToTrack(Node node1, Node node2, StationBlockTrack track)
 {
     AddNodeToTrack(node1, track);
     AddNodeToTrack(node2, track);
 }