void OnPress(bool isPressed) { if (NumberOfTruckOnTop > 0) { return; } if (numberOfComingTrucks > 0) { return; } if (freeze) { return; } if (!isPressed) { return; } if (!isClickable) { return; } switch (TypeOfRotation) { case RoadRotationType.Green: myAnimator.SetBool("Next", true); StartingGreenRotation = StartingGreenRotation.Next(); _direction = StartingGreenRotation.toRoadDirection(); break; case RoadRotationType.Blue: myAnimator.SetBool("Next", true); StartingGreenRotation = StartingGreenRotation.Next(); StartingBlueRotation = StartingGreenRotation.GreenToBlue(); _direction = StartingBlueRotation.toRoadDirection(); break; case RoadRotationType.Purple: roadStartingPurple = roadStartingPurple.NextPurpleCardinalPoint(roadAnchorPurple, ref purpleDirection); direction = RoadDirectionExtensions.ComposeRoadDirection(roadAnchorPurple, roadStartingPurple); TurnOffAllSprites(); if (direction == RoadDirection.EW || direction == RoadDirection.NS) { RecalculateSprites(RoadDirectionExtensions.ComposeRoadDirection(roadAnchorPurple, roadStartingPurple.NextPurpleCardinalPoint(roadAnchorPurple, ref purpleDirection))); } break; case RoadRotationType.Gold: direction = possibleGoldRotations[0]; possibleGoldRotations.RemoveAt(0); possibleGoldRotations.Add(direction); RecalculateSprites(); break; default: break; } }
public static RoadDirection ComposeRoadDirection(RoadPositionPurple A, RoadPositionPurple B) { List <RoadDirection> result = new List <RoadDirection>(); RoadDirection dummy = RoadDirection.NEWS; result = dummy.GetAll().FindAll(x => x.HasDirection(A.ToCardinalPoint()) && x.HasDirection(B.ToCardinalPoint())); result.Remove(RoadDirection.NEWS); return(result[0]); }
/// <summary> /// Initializes the starting position of the animator if the road is Clickable /// and other things /// </summary> void InitializeAnimator() { TurnOffAllSprites(); if (!isClickable || myAnimator == null) { return; } switch (TypeOfRotation) { case RoadRotationType.Green: _direction = StartingGreenRotation.toRoadDirection(); ChangeVisuals(RoadDirection.NE); if (myAnimator.GetCurrentAnimatorStateInfo(0).IsName("90_" + greenDirtoString(StartingGreenRotation) + "_state")) { break; } myAnimator.SetBool("NoAnim", true); myAnimator.SetBool("GoTo" + greenDirtoString(StartingGreenRotation), true); break; case RoadRotationType.Blue: _direction = StartingBlueRotation.toRoadDirection(); StartingGreenRotation = StartingBlueRotation.BlueToGreen(); ChangeVisuals(RoadDirection.EW); if (myAnimator.GetCurrentAnimatorStateInfo(0).IsName("90_" + greenDirtoString(StartingBlueRotation.BlueToGreen()) + "_State")) { break; } myAnimator.SetBool("NoAnim", true); myAnimator.SetBool("GoTo" + greenDirtoString(StartingBlueRotation.BlueToGreen()), true); break; case RoadRotationType.Purple: //This is "not" animator, but it's an initializatin needed for Purple type of clickable roads if (roadAnchorPurple == roadStartingPurple) { roadStartingPurple = roadStartingPurple.NextPurpleCardinalPoint(roadAnchorPurple, ref purpleDirection); } direction = RoadDirectionExtensions.ComposeRoadDirection(roadAnchorPurple, roadStartingPurple); RecalculateSprites(RoadDirectionExtensions.ComposeRoadDirection(roadAnchorPurple, roadStartingPurple.NextPurpleCardinalPoint(roadAnchorPurple, ref purpleDirection))); break; case RoadRotationType.Gold: direction = possibleGoldRotations[0]; possibleGoldRotations.RemoveAt(0); possibleGoldRotations.Add(direction); RecalculateSprites(); break; default: break; } }
public static RoadPositionPurple NextPurpleCardinalPoint(this RoadPositionPurple purpleRoadcurrent, RoadPositionPurple purpleRoadAnchor, ref int Direction) { if (Direction != -1 && Direction != 1) { return(RoadPositionPurple.None); } int currentPos = (int)purpleRoadcurrent; int anchorPos = (int)purpleRoadAnchor; currentPos = currentPos.AddwithBoundaries(Direction, 1, 4); if (currentPos == anchorPos) { //We bounce Direction = -Direction; //Now we advance 2 (on the other direction) currentPos = currentPos.AddwithBoundaries(Direction * 2, 1, 4); } return((RoadPositionPurple)currentPos); }
public static CardinalPoint ToCardinalPoint(this RoadPositionPurple roadPositionPurple) { switch (roadPositionPurple) { case RoadPositionPurple.None: return(CardinalPoint.None); case RoadPositionPurple.N: return(CardinalPoint.N); case RoadPositionPurple.E: return(CardinalPoint.E); case RoadPositionPurple.S: return(CardinalPoint.S); case RoadPositionPurple.W: return(CardinalPoint.W); default: return(CardinalPoint.None); //break; } }