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; } }
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; } } }
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); } } } }
private void AddTrackSegmentToTrack(Node node1, Node node2, StationBlockTrack track) { AddNodeToTrack(node1, track); AddNodeToTrack(node2, track); }