Beispiel #1
0
        public void DetectTest_OneInOutOfSingleTransition_ReturnsNull()
        {
            // ARRANGE

            var actorNodeMock = new Mock <IGraphNode>();
            var actorNode     = actorNodeMock.Object;

            var transitionNodeMock = new Mock <IGraphNode>();
            var transitionNode     = transitionNodeMock.Object;

            var sectorNodeMock = new Mock <ISectorNode>();
            var sectorNode     = sectorNodeMock.Object;

            var transition = new RoomTransition(sectorNode);

            var testedTrasitions = new Dictionary <IGraphNode, RoomTransition>
            {
                { transitionNode, transition }
            };

            var testedNodes = new[] { actorNode };

            RoomTransition expectedTransition = null;



            // ACT
            var factTransition = TransitionDetection.Detect(testedTrasitions, testedNodes);



            // ASSERT
            factTransition.Should().Be(expectedTransition);
        }
Beispiel #2
0
        public void DetectTest_OneInSingleTransition_ReturnsThisTransition()
        {
            // ARRANGE

            var actorNodeMock = new Mock <IMapNode>();
            var actorNode     = actorNodeMock.Object;

            var transition = new RoomTransition("test");

            var testedTrasitions = new Dictionary <IMapNode, RoomTransition>
            {
                { actorNode, transition }
            };

            var testedNodes = new[] { actorNode };

            var expectedTransition = transition;



            // ACT
            var factTransition = TransitionDetection.Detect(testedTrasitions, testedNodes);



            // ASSERT
            factTransition.Should().Be(expectedTransition);
        }
        public void GenerateRoomsInGrid_Transitions()
        {
            // ARRANGE
            var transition           = RoomTransition.CreateGlobalExit();
            var availableTransitions = new[] { transition };

            var randomMock = new Mock <IRoomGeneratorRandomSource>();

            randomMock.Setup(x => x.RollRoomMatrixPositions(It.IsAny <int>(), It.IsAny <int>()))
            .Returns(new[] { new OffsetCoords(0, 0) });
            randomMock.Setup(x => x.RollTransitions(It.IsAny <IEnumerable <RoomTransition> >()))
            .Returns(new[] { transition });
            randomMock.Setup(x => x.RollRoomSize(It.IsAny <int>(), It.IsAny <int>(), It.IsIn <int>(1)))
            .Returns <int, int, int>((min, max, count) => { return(new[] { new Size(0, 0) }); });
            var random = randomMock.Object;

            var generator = new RoomGenerator(random);

            var expectedTransitions = new[] { transition };

            // ACT
            var factRooms = generator.GenerateRoomsInGrid(1, 1, 1, availableTransitions);

            // ASSERT
            factRooms.ElementAt(0).Transitions.Should().BeEquivalentTo(availableTransitions);
        }
Beispiel #4
0
 public void OnPlayerEnterRoomTransition(RoomTransition roomTransition)
 {
     // Debug.Log("Player is entering room transition");
     if (roomTransition != null)
     {
         MyCamera.Instance.RoomTransition = roomTransition;
         // Debug.Log("RoomTransition has been set as: " + roomTransition.name);
     }
 }
Beispiel #5
0
 public void unlockExits(Room room)
 {
     if (room.exitLocations != null)
     {
         foreach (var location in room.exitLocations)
         {
             collidableTilemap.SetTile(location.Key, null);
             walkableTilemap.SetTile(location.Key, unlockedCorridorTile);
             GameObject transition = Instantiate(colliderPrefab, new Vector3(location.Key.x + 0.5f, location.Key.y + 0.5f, location.Key.z), Quaternion.identity);
             transition.transform.SetParent(GameController.instance.colliderParent.transform);
             RoomTransition rt = transition.GetComponent <RoomTransition>();
             rt.roomTo = location.Value.Item2;
             rt.pos    = location.Value.Item1;
         }
     }
 }
Beispiel #6
0
        /// <summary> Определяет, что все указанные узлы находятся в одном узле перехода. </summary>
        /// <param name="transitions"> Доступные переходы. </param>
        /// <param name="actorNodes"> Набор проверяемых узлов. Сюда передаются узлы актеров, которые пренадлежат игроку. </param>
        /// <returns> Возвращает отработавший переход. Иначе возаращает null. </returns>
        public static RoomTransition Detect(IDictionary <IMapNode, RoomTransition> transitions, IEnumerable <IMapNode> actorNodes)
        {
            // Из сектора нет прямого выхода.
            // Нужно для упрощения тестов сектора или карты.
            // Дальше будут специальные переходы. Например, в результате диалога.
            if (transitions == null)
            {
                return(null);
            }

            var allExit = true;

            //Проверяем, что есть хоть один персонаж игрока.
            // Потому что, умирая, персонажи удаляются из менеджера.
            // И проверка сообщает, что нет ниодного персонажа игрока вне узлов выхода.
            var atLeastOneHuman = false;

            RoomTransition expectedTransition = null;

            foreach (var actorNode in actorNodes)
            {
                atLeastOneHuman = true;

                if (!transitions.TryGetValue(actorNode, out var transition))
                {
                    continue;
                }

                if (expectedTransition == null)
                {
                    expectedTransition = transition;
                }
                else if (expectedTransition != transition)
                {
                    allExit = false;
                    break;
                }
            }

            if (atLeastOneHuman && allExit)
            {
                return(expectedTransition);
            }

            // означает, что переход не задействован
            return(null);
        }
Beispiel #7
0
 public List <Vector3> TransitionToPositions(RoomTransition t, bool inverted)
 {
     if (inverted)
     {
         var result = new List <Vector3>();
         foreach (var n in t.nodes)
         {
             result.Add(n);
         }
         result.Reverse();
         return(result);
     }
     else
     {
         return(t.nodes);
     }
 }
    void UpdatePosition()
    //This should set m_IsUpdatingPosition to true, then to false when it has changed scenes
    //Yeah this is the change scenes thing. It will get its variables from another script that will call upon it.
    {
        if (CurrentRoom == null)
        {
            return;
        }
        if (m_IsUpdatingPosition == true)
        {
            //Debug.Log("UpdatePosition is being called");
            Vector3 targetPosition = new Vector3();
            if (RoomTransition == null)
            {
                //Debug.Log("Room transition was null, getting center of this room");
                targetPosition = CurrentRoom.GetRoomCenter();
                //Debug.Log("Seems like RoomTransition was null!");
            }
            if (RoomTransition != null)
            {
                //  Debug.Log("Room transition wasnt null, getting transition target");
                targetPosition = RoomTransition.GetCameraTransitionTarget();//Here it should get the center of the roomtransition collider
                //Debug.Log("Target is set to RoomTransition coordinates: " + targetPosition.x +" and "+ targetPosition.y);
            }
            targetPosition.z   = transform.position.z;
            transform.position = Vector3.MoveTowards(transform.position, targetPosition, Time.deltaTime * MovementSpeedOnRoomChange);
            maxPosition        = CurrentRoom.maxCameraPosition;
            minPosition        = CurrentRoom.minCameraPosition;

            //  Debug.Log("transform position is: " + transform.position + " and target position is: " + targetPosition);

            while (transform.position != targetPosition)
            {
                //if it does not freeze the character, the code things that you are already at the targetposition
                // Debug.Log("Code freezes character");
                freezeCharacter.SetFrozen(true, true, false);
                return;
            }
            //  Debug.Log("It is here it is set to false");
            m_IsUpdatingPosition = false;
            RoomTransition       = null;
            freezeCharacter.SetFrozen(false, false, false);
        }
    }
        public void GenerateRoomsInGrid_WithFixLarge_NotThrowsExceptions()
        {
            // ARRANGE
            var random    = new FixLargeRoomGeneratorRandomSource();
            var generator = new RoomGenerator(random);
            var graphMap  = new SectorHexMap();

            // ACT
            Action act = () =>
            {
                var rooms    = generator.GenerateRoomsInGrid(20, 2, 20, new[] { RoomTransition.CreateGlobalExit() });
                var edgeHash = new HashSet <string>();
                generator.CreateRoomNodes(graphMap, rooms, edgeHash);
                generator.BuildRoomCorridors(graphMap, rooms, edgeHash);
            };

            // ASSERT
            act.Should().NotThrow();
        }
Beispiel #10
0
    public List <Vector3> PathBetweenRooms(Room room1, Room room2)
    {
        List <Vector3> path = new List <Vector3>();

        if (room1 == room2)
        {
            path.Add(room2.RandomPoint);
            return(path);
        }

        RoomTransition transitionToRoom2 = room1.TransitionToRoom(room2);

        if (transitionToRoom2 == null)
        {
            Debug.LogError("Could not find path from " + room1.gameObject.name + " to " + room2.gameObject.name);
            return(null);
        }
        path.Add(transitionToRoom2.DoorLocation);
        path.Add(room2.RandomPoint);
        return(path);
    }
Beispiel #11
0
        /// <summary>
        /// Создание карты.
        /// </summary>
        /// <param name="options">Параметры создания карты.</param>
        /// <returns>
        /// Возвращает экземпляр карты.
        /// </returns>
        public Task <ISectorMap> CreateAsync(object options)
        {
            const int START_ROOM_SIZE = 2;

            var mapSize = (int)options;

            ISectorMap map = new SectorHexMap();

            MapFiller.FillSquareMap(map, mapSize);

            var startRoomLeftBorder   = mapSize / 2 - START_ROOM_SIZE / 2;
            var startRoomTopBorder    = mapSize / 2 - START_ROOM_SIZE / 2;
            var startRoomRightBorder  = startRoomLeftBorder + START_ROOM_SIZE - 1;
            var startRoomBottomBorder = startRoomTopBorder + START_ROOM_SIZE - 1;

            var startNodes = map.Nodes.OfType <HexNode>()
                             .Where(node => (startRoomLeftBorder <= node.OffsetX && node.OffsetX <= startRoomRightBorder) &&
                                    (startRoomTopBorder <= node.OffsetY && node.OffsetY <= startRoomBottomBorder))
                             .ToArray();
            var startRegion = new MapRegion(1, startNodes)
            {
                IsStart = true,
            };

            var outerNodes  = map.Nodes.Where(x => !startNodes.Contains(x)).ToArray();
            var outerRegion = new MapRegion(2, outerNodes)
            {
                IsOut     = true,
                ExitNodes = new[] { outerNodes.Last() }
            };

            map.Regions.Add(startRegion);
            map.Regions.Add(outerRegion);

            map.Transitions.Add(outerNodes.Last(), RoomTransition.CreateGlobalExit());

            return(Task.FromResult(map));
        }
Beispiel #12
0
 public void UseTransition(RoomTransition transition)
 {
     DoActorExit(transition);
 }
Beispiel #13
0
 public void AddTransition(RoomTransition transition)
 {
     _transitionsForRooms.Add(transition.ConnectedRoom(this), transition);
 }
Beispiel #14
0
        public void TransitionToRoom(Room nextRoom, RoomTransition transition, GameState exitState, GameState enterState, EventTileDataInstance warpTile)
        {
            // Create the new room control.
            RoomControl newControl = new RoomControl();

            newControl.gameManager  = gameManager;
            newControl.room         = nextRoom;
            newControl.roomLocation = nextRoom.Location;

            //               [Exit]                       [Enter]
            // [RoomOld] -> [RoomOld] -> [Transition] -> [RoomNew] -> [RoomNew]

            // Create the sequence of game states for the transition.
            GameState postTransitionState = new GameStateAction(delegate(GameStateAction actionState) {
                gameManager.PopGameState();                 // Pop the queue state.
                gameManager.PushGameState(newControl);      // Push the new room control state.

                // Find the warp event were warping to and grab its enter-state.
                if (warpTile != null)
                {
                    WarpEvent eventTile = newControl.FindEventTile(warpTile) as WarpEvent;
                    if (eventTile != null)
                    {
                        enterState = eventTile.CreateEnterState();
                    }
                }
                if (enterState != null)
                {
                    gameManager.PushGameState(enterState);                     // Push the enter state.
                }
            });
            GameState preTransitionState = new GameStateAction(delegate(GameStateAction actionState) {
                GameControl.RoomControl = newControl;
                gameManager.PopGameState();                 // Pop the queue state.
                gameManager.PopGameState();                 // Pop the room control state.
                gameManager.PushGameState(new GameStateQueue(transition, postTransitionState));
                newControl.FindEventTile(warpTile);
            });

            if (warpTile != null)
            {
                transition.NewRoomSetup += delegate(RoomControl roomControl) {
                    // Find the warp event were warping to.
                    WarpEvent eventTile = newControl.FindEventTile(warpTile) as WarpEvent;
                    if (eventTile != null)
                    {
                        eventTile.SetupPlayerInRoom();
                    }
                };
            }

            // Create the game state for the transition sequence.
            GameState state = preTransitionState;

            if (exitState != null)
            {
                state = new GameStateQueue(exitState, preTransitionState);
            }

            // Begin the transition.
            transition.OldRoomControl = this;
            transition.NewRoomControl = newControl;
            gameManager.PushGameState(state);
        }
Beispiel #15
0
 // Transition to another rooom.
 public void TransitionToRoom(Room nextRoom, RoomTransition transition)
 {
     TransitionToRoom(nextRoom, transition, null, null, null);
 }
Beispiel #16
0
 public SectorExitEventArgs(RoomTransition transition)
 {
     Transition = transition ?? throw new ArgumentNullException(nameof(transition));
 }
Beispiel #17
0
 // Start is called before the first frame update
 void Start()
 {
     rm             = Camera.main.GetComponent <RoomTransition>();
     player_control = GetComponent <ArrowKeyMovement>();
 }
Beispiel #18
0
        public GameManager(Game1 game, Dictionary <String, Texture2D> spriteSheet, SpriteFont font, SpriteFont header, Sounds sounds)
        {
            GameplayConstants.Initialize(1);//initialize constants to normal mode, just at the start so constants are somehting

            this.game = game;
            sprites   = spriteSheet;
            state     = GameState.START;

            difficulty  = 1;
            isHordeMode = false;



            //load room 17 first

            sound = sounds;

            roomLoad = new RoomLoader(sprites, this);
            rooms.Add("Room17", roomLoad.Load("Room17.txt"));
            roomKey      = "Room17";
            transitioner = new RoomTransition();

            //initialize player
            player = new Player(spriteSheet["playersheet"], new Vector2(500, 200), spriteSheet["PlayerProjectiles"], sound);

            //initailize screens
            hud        = new HUD(spriteSheet["hudSheet"], font);
            itemScreen = new ItemSelectionScreen(spriteSheet["ItemSelection"]);
            pause      = new PauseScreen(spriteSheet["MenuScreens"], font, header);
            gameOver   = new GameOverScreen(spriteSheet["MenuScreens"], font, header);
            win        = new WinScreen(spriteSheet["MenuScreens"]);
            start      = new StartMenuScreen(spriteSheet["StartMenu"], font, header, this);


            EPCol = new EnemyProjectileCollisionHandler(this);

            //initailize cheat code dictionary
            cheatCodes = new Dictionary <string, ICommand>();

            //initailize cheat codes
            ICommand extraHealth = new ExtraHealth(player);
            ICommand extraRupees = new ExtraRupees(player);
            ICommand invinc      = new Invincibility(player);
            ICommand bombs       = new UnlimitedBombs(player);

            cheatCodes.Add("NBKJH", extraHealth);
            cheatCodes.Add("MNBVX", extraRupees);
            cheatCodes.Add("ZZKNL", invinc);
            cheatCodes.Add("GFGFG", bombs);

            //initailize special move code dictionary
            specialMoves = new Dictionary <string, ICommand>();

            //initailize special moves
            ICommand fireSpin     = new FireSpinSpecialMove(this);
            ICommand reapingArrow = new ReapingArrowSpecialMove(this);
            ICommand rupeeShied   = new RupeeShieldSpecialMove(this);

            specialMoves.Add("TYHGT", fireSpin);
            specialMoves.Add("JKJKJ", reapingArrow);
            specialMoves.Add("KJHGF", rupeeShied);
        }
Beispiel #19
0
        private void DoActorExit([NotNull] RoomTransition roomTransition)
        {
            var e = new SectorExitEventArgs(roomTransition);

            HumanGroupExit?.Invoke(this, e);
        }