public void OnPassingLayer(bool hasPowerup, PedestalLayer pedestalLayer)
        {
            if (hasPowerup)
            {
                UnityEngine.Debug.LogError("Passing layer Powerup : " + _continousPowerupFloorCount);
                if (_continousPowerupFloorCount < _scoreSetting.passingFloorMultiplies.Count)
                {
                    var increaseScore = _scoreSetting.basicScore * _scoreSetting.passingFloorMultiplies[_continousPowerupFloorCount];
                    UnityEngine.Debug.LogError("Powerup Increase score : " + increaseScore);
                    UnityEngine.Debug.LogError("Powerup multiply : " + _scoreSetting.passingFloorMultiplies[_continousPowerupFloorCount]);
                    Score += increaseScore;
                    //OnScoreIncrease?.Invoke(increaseScore);
                    OnScoreUpdate?.Invoke(Score, increaseScore);
                }

                _continousPowerupFloorCount += 1;
            }
            else
            {
                _previousPedestalType = PedestalType.None;
                foreach (var item in pedestalLayer.pedestalInfos)
                {
                    if (item.type == PedestalType.Pedestal_01 ||
                        item.type == PedestalType.Pedestal_01_1_Fish ||
                        item.type == PedestalType.Pedestal_01_3_Fish)
                    {
                        _previousPedestalType = item.type;
                        break;
                    }
                }
            }

            _hasPassLayer = true;
        }
Example #2
0
        public void UpdatePenguinPosition(Vector3 position)
        {
            PedestalLayer nextPassLayer = GetNextPassPedestalLayer();

            if (nextPassLayer != null && position.y < nextPassLayer.height - 0.15f)
            {
                nextPassLayer.hasPassed = true;
                OnCharacterPassedThoughPedestalLayer?.Invoke(nextPassLayer);
            }

            float centerBotPropY = _propBottomHeight + _propHeight / 2;

            if (position.y < centerBotPropY)
            {
                _propBottomHeight -= _propHeight;

                Vector3 propPosition = _props[0].position;
                propPosition.y    -= _propHeight * 2;
                _props[0].position = propPosition;

                _props.Reverse();

                RecycleOldPedestales();
                AddNewPedestales();
            }
        }
Example #3
0
        void OnCharacterPassThoughLayer(PedestalLayer layer)
        {
            if (!HasPowerUp() && !layer.hasDestroyed)
            {
                _floorCombo += 1;
            }

            var eventPlayerPassLayer = new EventCharacterPassLayer(layer);

            eventPlayerPassLayer.hasCombo          = HasCombo();
            eventPlayerPassLayer.hasPowerup        = HasPowerUp();
            eventPlayerPassLayer.hasLayerDestroyed = layer.hasDestroyed;
            EventHub.Emit(eventPlayerPassLayer);

            // Special case, character has powerup and pass through the layer
            if (!layer.hasDestroyed && HasPowerUp())
            {
                UsePowerUp(null);
            }

            if (!layer.hasDestroyed)
            {
                _platform.DestroyLayer(layer, HasPowerUp());
            }

            _scoreCaculator.OnPassingLayer(HasPowerUp(), layer);
        }
Example #4
0
 public EventCharacterPassLayer(PedestalLayer layer)
 {
     this.layer             = layer;
     this.hasPowerup        = false;
     this.hasCombo          = false;
     this.hasLayerDestroyed = false;
 }
Example #5
0
        public PedestalLayer ForceDestroyNextLayer(bool turnPedestalToStone = false)
        {
            PedestalLayer nextLayer = GetNextPedestalLayer();

            if (nextLayer != null)
            {
                DestroyLayer(nextLayer, turnPedestalToStone);
            }

            return(nextLayer);
        }
Example #6
0
        public void DestroyLayer(PedestalLayer layer, bool turnPedestalToStone = false)
        {
            layer.hasDestroyed = true;

            layer.pedestales.RemoveAll(p => !p.Active);
            foreach (var pedestal in layer.pedestales)
            {
                pedestal.Fall();
            }

            // if (turnPedestalToStone)
            // {
            //     foreach (var pedestal in layer.pedestales)
            //     {
            //         if (pedestal.CanBeTurnedToStone)
            //             pedestal.SetMaterial(_stoneMaterial);
            //     }
            // }

            EventHub.Emit(new EventPedestalLayerDestroy(layer));
        }
Example #7
0
        void AddNewPedestales()
        {
            int   lastLevel          = -1;
            float lastPedestalHeight = _gameSetting.pedestalStartPosition + _gameSetting.distancePerPedestalLayer;

            if (_pedestalLayers.Count > 0)
            {
                lastLevel          = _pedestalLayers[_pedestalLayers.Count - 1].level;
                lastPedestalHeight = _pedestalLayers[_pedestalLayers.Count - 1].height;
            }

            float pedestalHeight = lastPedestalHeight;
            int   pedestalLevel  = lastLevel;

            while (pedestalHeight > _propBottomHeight)
            {
                pedestalHeight -= _gameSetting.distancePerPedestalLayer;
                pedestalLevel  += 1;

                PedestalLayer layer = new PedestalLayer();
                layer.pedestalInfos = _platformRule.GetPedestalInfos(pedestalLevel);
                layer.pedestales    = new List <Pedestal>();
                layer.height        = pedestalHeight;
                layer.level         = pedestalLevel;
                layer.hasDestroyed  = false;
                layer.hasPassed     = false;
                _pedestalLayers.Add(layer);

                foreach (var pedestalInfo in layer.pedestalInfos)
                {
                    Vector3  position = new Vector3(0f, pedestalHeight, 0f);
                    Pedestal pedestal = _pedestalPool.Instantiate(pedestalInfo.type, position, kAnglePerSlot * pedestalInfo.slot);
                    layer.pedestales.Add(pedestal);
                }
            }
        }
Example #8
0
 public EventPedestalLayerDestroy(PedestalLayer layer)
 {
     this.layer = layer;
 }