Exemplo n.º 1
0
        public void Setup()
        {
            _invaderViewProvider.ReturnAll();
            _missileViewProvider.ReturnAll();
            _explosionsViewProvider.ReturnAll();

            var level = _levelProvider.GetConfiguration(_gameStateProvider.Current.CurrentLevel);
            var invaderSlotXDistance = level.InvaderSlotXDistance;
            var invaderSlotYDistance = level.InvaderSlotYDistance;
            var slots = level.InitialLevelSlots;

            var halfDistanceX = level.InvaderSlotXDistance / 2f;
            var farLeft       = slots[0].Length / 2 * invaderSlotXDistance;
            var evenOffset    = (slots[0].Length + 1) % 2 * halfDistanceX;
            var offsetX       = (farLeft - evenOffset);

            Vector3 leftMostSlot = new Vector3(
                -offsetX,
                level.InitialYPosition,
                0);

            for (int rowIndex = 0; rowIndex < slots.Length; rowIndex++)
            {
                Vector3 currentSlotPosition = leftMostSlot + Vector3.down * (invaderSlotYDistance * rowIndex);
                for (int columnIndex = 0; columnIndex < slots[rowIndex].Length; columnIndex++)
                {
                    var slot = slots[rowIndex][columnIndex];
                    if (slot != InitialLevelSlot.None)
                    {
                        var invaderView = _invaderViewProvider.Get();
                        invaderView.SetInitialPosition(currentSlotPosition);
                        var invader = _invaderConfigurationProvider.Get(slot);
                        invaderView.Setup(invader);
                    }
                    currentSlotPosition += Vector3.right * invaderSlotXDistance;
                }
            }
        }
Exemplo n.º 2
0
        private Vector3 GetAvailablePosition()
        {
            var level = _levelProvider.GetConfiguration(_gameStateProvider.Current.CurrentLevel);
            var invaderSlotXDistance = level.InvaderSlotXDistance;
            var invaderSlotYDistance = level.InvaderSlotYDistance;
            var slots = level.InitialLevelSlots;

            var halfDistanceX = level.InvaderSlotXDistance / 2f;
            var farLeft       = slots[0].Length / 2 * invaderSlotXDistance;
            var evenOffset    = (slots[0].Length + 1) % 2 * halfDistanceX;
            var offsetX       = (farLeft - evenOffset);

            var row    = invadersAddedCount / slots[0].Length;
            var column = invadersAddedCount % slots[0].Length;

            Vector3 currentSlotPosition = new Vector3(
                (invaderSlotYDistance * column) - offsetX,
                550 + (invaderSlotYDistance * row),
                0);

            invadersAddedCount++;
            return(currentSlotPosition);
        }