コード例 #1
0
    IEnumerator DoorAnimation()
    {
        // Freezes player movement
        player.FreezePlayer();
        // Instantiates the NextRoom
        RoomGenerator newRoomGenerator =
            FindObjectOfType <DungeonDisplay>()
            .InstantiateRoom(door.GetNextRoom(currentRoom.GetCurrentRoom()));

        // Disables Door Animations For the new Room
        newRoomGenerator.EnableDoorAnimations(false);

        // Changes the player animation to walk in appropreate direction.
        if (direction == Cardinal4.Direction.NORTH)
        {
            playerAnimator.SetFloat("deltaX", 0);
            playerAnimator.SetFloat("deltaY", 1);
        }
        else if (direction == Cardinal4.Direction.SOUTH)
        {
            playerAnimator.SetFloat("deltaX", 0);
            playerAnimator.SetFloat("deltaY", -1);
        }

        //Move player into the door
        Coroutine a =
            StartCoroutine(player.MovePlayerToPoint(
                               (Vector2)this.transform.position,
                               player.GetSpeed()));

        yield return(a);

        //Update the current room
        Room nextRoom = door.GetNextRoom(currentRoom.GetCurrentRoom());

        currentRoom.SetCurrentRoom(nextRoom);
        //Moves camera to new room
        Coroutine b =
            StartCoroutine(mainCamera.MoveCameraToNewRoom(
                               currentRoom.GetCurrentRoom(),
                               cameraMovementTime));

        yield return(b);

        // Move player out of the door into the room
        Coroutine c =
            StartCoroutine(player.MovePlayerToPoint(
                               (Vector2)this.transform.position +
                               Cardinal4.DirectionToVector2(direction, distanceFromDoor),
                               player.GetSpeed()));

        yield return(c);

        // Enable Door Animations for the Next Room
        newRoomGenerator.EnableDoorAnimations(true);
        // Allow for Player Movement
        player.UnfreezePlayer();
        // Destroy current RoomGenerator
        Destroy(currentRoomGenerator.gameObject);
    }
コード例 #2
0
    private IEnumerator EnterDungeonAnimation()
    {
        // Create a dummy room and door.
        Room    startRoom = dungeon.startRoom;
        Vector2 coordinateForDummyRoom =
            startRoom.roomCoordinate.GetVector2() + new Vector2(0, -1);
        Room dummyRoom = new Room(new RoomCoordinate(coordinateForDummyRoom));
        Door dummyDoor = new Door(dummyRoom, startRoom, Door.DoorState.open);

        // Player stuff & setting up the cutrains
        player.FreezePlayer();
        player.UnfreezeAnimation();
        player.GetComponent <Animator>().SetFloat("deltaY", 1);
        player.GetComponent <Animator>().speed = 1;
        curtains.SetCurtainsClosed();
        // Begin animation
        Coroutine a =
            StartCoroutine(curtains.OpenCurtains());

        yield return(a);

        Destroy(curtains.gameObject);
        player.transform.position = dungeon.startRoom.roomCoordinate.GetRoomWorldPosition() - new Vector2(0, -5);
        Vector2   movePlayerHere = dungeon.startRoom.roomCoordinate.GetRoomWorldPosition() + new Vector2(0, -2.5f);
        Coroutine b = StartCoroutine(player.MovePlayerToPoint(movePlayerHere, player.speed));

        yield return(b);

        dummyDoor.ChangeState(Door.DoorState.closed);
        player.UnfreezePlayer();
        currentRoomGenerator.EnableDoorAnimations(true);
        currentRoomGenerator.EnableStairAnimations(true);
    }
コード例 #3
0
 public virtual void CreateDungeon(Dungeon dungeon)
 {
     this.dungeon         = dungeon;
     currentRoomGenerator = InstantiateRoom(dungeon.startRoom);
     currentRoomGenerator.EnableDoorAnimations(false);
     player.GetComponent <CurrentRoom>().SetCurrentRoom(dungeon.startRoom);
     mainCamera.SetCameraToNewRoom(dungeon.startRoom);
     StartCoroutine(EnterDungeonAnimation());
 }