/// <summary> /// Move the character to a specifc waypoint /// </summary> /// <param name="destination"></param> /// <param name="movingDirection"></param> public void moveToWaypoint(GameObject destination, Utility.Direction movingDirection, Utility.MoveMode moveMode) { if (CanMove) { Direction = movingDirection; CurrentWaypoint = destination; var waypointPosition = destination.transform.position; _targetPosition = waypointPosition; switch (moveMode) { case Utility.MoveMode.Normal: IsMoving = true; break; case Utility.MoveMode.Teleport: gameObject.transform.position = _targetPosition; if (this is Player) { moveMainCameraToMe(); } MyActionController.notifyMovingFinished(); break; default: break; } updateAnimation(); } }
/// <summary> /// Move the character to a direction /// </summary> /// <param name="wayPoint"></param> public void moveToDeirection(Utility.Direction movingDirection) { if (CanMove) { var destination = CurrentWaypoint.GetComponent <Waypoint>().getDestination(movingDirection); if (destination != null) { if (destination.GetComponent <InteractiveObject>() != null) { //Debug.Log("we are interacting with " + destination.GetComponent<InteractiveObject>().registerName); Direction = movingDirection; updateAnimation(); destination.GetComponent <InteractiveObject>().interact(this); } else if (destination.GetComponent <Waypoint>() != null) { moveToWaypoint( destination, movingDirection, CurrentWaypoint.GetComponent <Waypoint>().getMoveMode(movingDirection) ); } } } }
public LinearProjectile Shoot(int damage, Vector3 startPosition, Utility.Direction dir) { LinearProjectile projectile = Instantiate(this, startPosition, Quaternion.identity); projectile.direction = dir; projectile.SetLifeTime(projectile.lifeTime); projectile.Damage = damage; return(projectile); }
bool CanCatch() { GameObject kidPosition = GlobalController.CurrentPlayer.CurrentWaypoint; //Utility.Direction kidDirect = GlobalController.CurrentPlayer.Direction; //this is the point my character is on. GameObject myPoint = MyCharacter.CurrentWaypoint; Utility.Direction myDirect = MyCharacter.Direction; if (MyCharacter.CanMove) { GameObject destination = myPoint.GetComponent <Waypoint>().getDestination(myDirect); if (destination == kidPosition) { return(true); } } return(false); }
public Utility.MoveMode getMoveMode(Utility.Direction direction) { switch (direction) { case Utility.Direction.Left: return(LeftMoveMethod); case Utility.Direction.Right: return(RightMoveMethod); case Utility.Direction.Up: return(UpMoveMethod); case Utility.Direction.Down: return(DownMoveMethod); default: return(Utility.MoveMode.Teleport); } }
public GameObject getDestination(Utility.Direction direction) { switch (direction) { case Utility.Direction.Left: return(Left); case Utility.Direction.Right: return(Right); case Utility.Direction.Up: return(Up); case Utility.Direction.Down: return(Down); default: return(null); } }
/// <summary> /// Time taken by an elevator to reach to particular floor from it's current position. /// </summary> /// <param name="elevator">Pass the elevator you want to find out time to reach particular floor</param> /// <param name="requstedFloorNo">Which floor you want to travel to</param> /// <returns></returns> public static int FindTimeTaken(Elevator elevator, int requstedFloorNo) { int timeTaken = 0; int currentFloorNo = elevator.CurrentFloorNo; Utility.Direction direction = currentFloorNo > requstedFloorNo ? Utility.Direction.Down : Utility.Direction.Up; if (currentFloorNo == requstedFloorNo) { return(0); } if (elevator.ElevatorDirection == direction || elevator.ElevatorDirection == Utility.Direction.NoDirection) { if (elevator.ElevatorDirection == Utility.Direction.NoDirection) { elevator.ElevatorDirection = direction; } /* if the elevaor direction is down and requested follor is below the current floor * or if elevatordirection is up and requested floor is above current floor. */ while (currentFloorNo != requstedFloorNo) { if (elevator.FloorsStopMap[currentFloorNo] == true) { timeTaken += Utility.CrossTime + Utility.HaltTime; } else { timeTaken += Utility.CrossTime; } if (direction == Utility.Direction.Up) { currentFloorNo++; } else if (direction == Utility.Direction.Down) { currentFloorNo--; } } } else { /* if the elevaor direction is up and requested follor is below the current floor or if elevator direction is down and requested floor is above current floor */ KeyValuePair <int, bool> lastStop; if (elevator.ElevatorDirection == Utility.Direction.Up) { lastStop = elevator.FloorsStopMap.LastOrDefault(x => x.Value == true); } else { lastStop = elevator.FloorsStopMap.FirstOrDefault(x => x.Value == true); } while (currentFloorNo != lastStop.Key && currentFloorNo > Utility.BottomFloorID && currentFloorNo < Utility.TopFloorID) { if (elevator.FloorsStopMap[currentFloorNo] == true) { timeTaken += Utility.CrossTime + Utility.HaltTime; } else { timeTaken += Utility.CrossTime; } if (elevator.ElevatorDirection == Utility.Direction.Up) { currentFloorNo = currentFloorNo > requstedFloorNo ? currentFloorNo++ : currentFloorNo--; } else if (elevator.ElevatorDirection == Utility.Direction.Down) { currentFloorNo = currentFloorNo > requstedFloorNo ? currentFloorNo-- : currentFloorNo++; } } currentFloorNo = lastStop.Key; while (currentFloorNo != requstedFloorNo && currentFloorNo >= Utility.BottomFloorID && currentFloorNo <= Utility.TopFloorID) { if (elevator.FloorsStopMap[currentFloorNo] == true) { timeTaken += Utility.CrossTime + Utility.HaltTime; } else { timeTaken += Utility.CrossTime; } currentFloorNo = currentFloorNo > requstedFloorNo ? currentFloorNo-- : currentFloorNo++; } } return(timeTaken); }
protected override void OnBuild() { base.OnBuild(); direction = Utility.PossiblePositionToDirection(facedPosition); }