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; }
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(); } }
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); }
public EventCharacterPassLayer(PedestalLayer layer) { this.layer = layer; this.hasPowerup = false; this.hasCombo = false; this.hasLayerDestroyed = false; }
public PedestalLayer ForceDestroyNextLayer(bool turnPedestalToStone = false) { PedestalLayer nextLayer = GetNextPedestalLayer(); if (nextLayer != null) { DestroyLayer(nextLayer, turnPedestalToStone); } return(nextLayer); }
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)); }
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); } } }
public EventPedestalLayerDestroy(PedestalLayer layer) { this.layer = layer; }