コード例 #1
0
    /// <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();
        }
    }
コード例 #2
0
    /// <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)
                        );
                }
            }
        }
    }
コード例 #3
0
        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);
        }
コード例 #4
0
    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);
    }
コード例 #5
0
    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);
        }
    }
コード例 #6
0
    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);
        }
    }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
 protected override void OnBuild()
 {
     base.OnBuild();
     direction = Utility.PossiblePositionToDirection(facedPosition);
 }