void FixedUpdate() { if (_isPaused) { _currentStickSoundRemainingTime -= Time.fixedDeltaTime; if (_currentStickSoundRemainingTime <= 0) { _currentStickSoundRemainingTime = StickSoundDelay; _player.PlayAudioById("tramdoorstuck"); } if (_currentStickPassenger == null) { _currentStickPassenger = GameController.GetInstance().GetStickPassenger(); if (_currentStickPassenger != null) { _currentStickDoor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetPassengerDoor(_currentStickPassenger) .GetComponent <DoorsAnimationController>(); } } if (_currentStickDoor != null) { _currentStickDoor.Glitch(); } return; } if (_isDoorsOpen) { _currentStopDuration += Time.fixedDeltaTime; if (_currentStopDuration > _stopDuration) { _isDoorsOpen = false; _currentStopDuration = 0; UpdateDoors(); } } else { if (!_isMovementTimeLocked) { _currentMoveDuration += Time.fixedDeltaTime; } if (_currentMoveDuration > _currentStationTotalMoveDuration) { _isDoorsOpen = true; _currentMoveDuration = 0; GameController.GetInstance().CheckBeforeDoorsOpen(); UpdateDoors(); GameController.GetInstance().IncrementStationNumberForPassengers(); if (_countToFinish > 0) { _countToFinish--; if (_countToFinish == 0) { MonobehaviorHandler.GetMonobeharior() .GetObject <TrainingHandler>("TrainingHandler").ShowNext(); } } } } }
private void DoRegularSpawn(GameObject spawnPoint) { int maxCount = GameController.GetInstance().GetCurrentSpawnCount(); int doorsCount = _doorsTimer.GetOpenedDoorsCount(); int realCount = Randomizer.GetInRange(1, maxCount / doorsCount); for (int i = 0; i < realCount; i++) { if (GameController.GetInstance().GetPassengersCount() > _maxPassengers || _currentSessionSpawnCount >= maxCount) { return; } string passengerString = MapManager.GetInstance().GetRandomCharacter(); PassengerSM ps = InstantiateNPC(passengerString, spawnPoint.transform.position, true); _currentSessionSpawnCount++; if (ps == null) { return; } _bonusTimer.AddBonusEffectToSpawnedPassenger(ps); if (ps.IsStick()) { _doorsTimer.SetPaused(true); return; } ps.MoveToRandomPosition(); } }
private bool IsEffectRemovingPossible(PassengerSM passenger) { if (!IsBonusExist(passenger)) return false; passenger.ActiveBonuses.Remove(GetBonusType()); return true; }
private bool IsEffectAdditionPossible(PassengerSM passenger) { if (IsBonusExist(passenger)) return false; passenger.ActiveBonuses.Add(GetBonusType()); return true; }
void OnTriggerStay2D(Collider2D other) { if (!_isCheckPossible && _checkStateEnabled) { return; } _isCheckPossible = false; _timeAfterPassengerCheck = 0; PassengerCollisionDetector passengerCD = other.GetComponent <PassengerCollisionDetector>(); if (passengerCD != null) { PassengerSM passenger = (PassengerSM)passengerCD.Character; TryHaveSetPassenger(passenger); return; } ConductorCollisionDetector conductorCD = other.GetComponentInParent <ConductorCollisionDetector>(); if (conductorCD != null) { ConductorSM conductor = (ConductorSM)conductorCD.Character; if (conductor.IsDragging()) { PassengerSM draggedPassenger = conductor.GetDragTarget(); TryHaveSetPassenger(draggedPassenger); } } }
public bool FindRunAwayTarget(PassengerSM ps) { _passengers.RemoveAll(item => item == null); foreach (var passenger in _passengers) { if (passenger != ps) { float dist = ((Vector2)passenger.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (dist < ps.AttackMaxDistance) { if (ps.TryRunAwayFromMovable(passenger)) { return(true); } } } } ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero(); float conductorDist = ((Vector2)hero.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (conductorDist < ps.AttackMaxDistance) { if (ps.TryRunAwayFromMovable(hero)) { return(true); } } return(false); }
private void TryHaveSetPassenger(PassengerSM passenger) { if (passenger.IsGoingAway) { passenger.SetTarget(new Vector2()); return; } if (passenger.GetActiveState() != (int) MovableCharacterSM.MovableCharacterStates.Dragged && passenger.IsSitListenerActivated()) { passenger.CalculateRandomTarget(); return; } passenger.IsNearBench = true; if (passenger.IsOnTheBench()) { return; } if (Randomizer.GetPercentageBasedBoolean(GetSitPossibility()) || passenger.IsSitListenerActivated()) { if (passenger.GetActiveState() == (int) MovableCharacterSM.MovableCharacterStates.Dragged && passenger.HasTicket()) { passenger.StopDrag(false); passenger.ActivateSitListener(); } passenger.HandleSitdown(this); } }
private void TryHaveSetPassenger(PassengerSM passenger) { if (passenger.IsGoingAway) { passenger.SetTarget(new Vector2()); return; } if (passenger.GetActiveState() != (int)MovableCharacterSM.MovableCharacterStates.Dragged && passenger.IsSitListenerActivated()) { passenger.CalculateRandomTarget(); return; } passenger.IsNearBench = true; if (passenger.IsOnTheBench()) { return; } if (Randomizer.GetPercentageBasedBoolean(GetSitPossibility()) || passenger.IsSitListenerActivated()) { if (passenger.GetActiveState() == (int)MovableCharacterSM.MovableCharacterStates.Dragged && passenger.HasTicket()) { passenger.StopDrag(false); passenger.ActivateSitListener(); } passenger.HandleSitdown(this); } }
public override void RemoveEffect(PassengerSM passenger) { if (IsEffectRemovingPossible(passenger)) { RemoveEffectAfterCheck(passenger); } }
public override void AddEffect(PassengerSM passenger) { if (IsEffectAdditionPossible(passenger)) { AddEffectAfterCheck(passenger); } }
public void AddBonusEffectToSpawnedPassenger(PassengerSM passenger) { foreach (var activeBonus in _activeBonuses) { activeBonus.AddEffect(passenger); } }
public void StopStickIfNeeded() { if (_stickTarget != null) { _stickTarget.StopStick(); _stickTarget = null; } }
public bool CanKick(PassengerSM obj) { if (IsInWayoutZone && IsInAttackRadius(obj.transform.position) && !obj.IsStick()) { return(true); } return(false); }
protected override void RemoveEffectAfterCheck(PassengerSM passenger) { passenger.UnFreeze(); if (!_isSnowDeactivated) { _isSnowDeactivated = true; _floor.SnowDrop(_data, false); } }
private bool IsEffectRemovingPossible(PassengerSM passenger) { if (!IsBonusExist(passenger)) { return(false); } passenger.ActiveBonuses.Remove(GetBonusType()); return(true); }
private bool IsEffectAdditionPossible(PassengerSM passenger) { if (IsBonusExist(passenger)) { return(false); } passenger.ActiveBonuses.Add(GetBonusType()); return(true); }
void OnTriggerExit2D(Collider2D other) { PassengerSM passenger = other.GetComponentInParent <PassengerSM>(); if (passenger != null) { passenger.IsNearBench = false; } }
public GameObject GetPassengerDoor(PassengerSM passenger) { Vector2 position = passenger.transform.position; foreach (var door in _doors) { if (IsPointCloseToCollider(position, door)) return door.gameObject; } return null; }
public bool IsPassengerNearCentralWayout(PassengerSM ps) { Vector2 position = ps.transform.position; if (IsPointCloseToCollider(position, _centralWayout)) { return(true); } return(false); }
public void RegisterPassenger(PassengerSM ps) { if (ps.HasTicket()) { _totalPassengers++; } _totalHares++; _passengers.Add(ps); UpdateStats(); }
public void StopDrag(bool attack) { if (GetActiveState().Equals((int)MovableCharacterStates.Drag)) { MakeIdle(); if (_dragTarget != null) { _dragTarget.StopDrag(attack); } _dragTarget = null; } }
public void UpdatePassenger(PassengerSM ps) { if (ps.HasTicket()) { if (_totalHares > 0) { _totalHares--; } _ticketCount++; } UpdateStats(); }
public GameObject GetPassengerDoor(PassengerSM passenger) { Vector2 position = passenger.transform.position; foreach (var door in _doors) { if (IsPointCloseToCollider(position, door)) { return(door.gameObject); } } return(null); }
public bool IsPassengerNearDoors(PassengerSM ps) { Vector2 position = ps.transform.position; foreach (var door in _doors) { if (IsPointCloseToCollider(position, door)) { return(true); } } return(false); }
protected override void AddEffectAfterCheck(PassengerSM passenger) { MonobehaviorHandler.GetMonobeharior().GetObject <DoorsTimer>("DoorsTimer").SetPaused(false); passenger.ActiveBonuses.Add(GetBonusType()); if (_data == null) { _data = new FreezeData(); _data.Distance = Dist; _data.StartPoint = Position; _floor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor"); _floor.SnowDrop(_data, true); } passenger.ActivateFreezeBonus(_data); }
protected override void AddEffectAfterCheck(PassengerSM passenger) { MonobehaviorHandler.GetMonobeharior().GetObject<DoorsTimer>("DoorsTimer").SetPaused(false); passenger.ActiveBonuses.Add(GetBonusType()); if (_data == null) { _data = new FreezeData(); _data.Distance = Dist; _data.StartPoint = Position; _floor = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor"); _floor.SnowDrop(_data, true); } passenger.ActivateFreezeBonus(_data); }
public void ReplacePassenger(PassengerSM newPassenger, PassengerSM oldPassenger) { if (_passengersToAdd == null) { _passengersToAdd = new List <PassengerSM>(); } if (_passengersToDelete == null) { _passengersToDelete = new List <PassengerSM>(); } _passengersToAdd.Add(newPassenger); _passengersToDelete.Add(oldPassenger); _isPassengersListChanged = true; }
public static void ReplacePassenger(PassengerSM passenger) { Vector3 passengerPosition = passenger.transform.position; bool hasTicket = passenger.HasTicket(); bool isVisibleToHero = passenger.IsVisibleToHero(); string passengerType = passenger.GetClassName(); passenger.enabled = false; if (_spawner == null) { _spawner = MonobehaviorHandler.GetMonobeharior().GetObject<Spawner>("Spawner"); } PassengerSM newPassenger = _spawner.SpawnAlternativePassenger(passengerPosition, passengerType); newPassenger.SetTicketAndVisibility(hasTicket, isVisibleToHero); GameController.GetInstance().ReplacePassenger(newPassenger, passenger); }
public void Unstick() { if (_currentStickDoor != null) { if (_isDoorsOpen) { _currentStickDoor.Open(false); } else { _currentStickDoor.Close(); } _currentStickPassenger = null; } _isPaused = false; }
public bool IsNearOtherPassenger(PassengerSM ps) { _passengers.RemoveAll(item => item == null); foreach (var passenger in _passengers) { if (passenger != ps) { float dist = ((Vector2)passenger.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (dist < _minDistance) { return(true); } } } return(false); }
private PassengerSM InstantiateNPC(string className, Vector3 position, bool register, bool unstickable = false) { int randomIndex = PassengerIndex(className); if (randomIndex < 0) { return(null); } GameObject randomNPC = unitPrefabs[randomIndex]; GameObject instantiated = (GameObject)Instantiate(randomNPC, position, Quaternion.identity); PassengerSM ps = instantiated.GetComponent <PassengerSM>(); ps.Init(register, unstickable); return(ps); }
public static void ReplacePassenger(PassengerSM passenger) { Vector3 passengerPosition = passenger.transform.position; bool hasTicket = passenger.HasTicket(); bool isVisibleToHero = passenger.IsVisibleToHero(); string passengerType = passenger.GetClassName(); passenger.enabled = false; if (_spawner == null) { _spawner = MonobehaviorHandler.GetMonobeharior().GetObject <Spawner>("Spawner"); } PassengerSM newPassenger = _spawner.SpawnAlternativePassenger(passengerPosition, passengerType); newPassenger.SetTicketAndVisibility(hasTicket, isVisibleToHero); GameController.GetInstance().ReplacePassenger(newPassenger, passenger); }
public void Kick(PassengerSM obj) { if (obj.IsFrozen()) { obj.TemporalyUnfreeze(); } MonobehaviorHandler.GetMonobeharior().GetObject <AudioPlayer>("AudioPlayer").PlayAudioById("kick"); CalculateOrientation(obj.transform.position); ActivateState((int)MovableCharacterStates.Attack); if (obj.IsStick()) { obj.StopStick(); obj.WasStickWhenFlyAway = true; } obj.FlyAway(); AttackTarget = null; _dragTarget = null; }
public void StartDrag(PassengerSM obj) { if (Time.timeScale == 0) { return; } if (_dragTarget != null) _dragTarget.StopDrag(false); if (obj.IsStick()) { obj.StopStick(); } if(obj.IsDragDenied()) return; _dragTarget = obj; _dragStartPoint = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor").GetCurrentMousePosition(); CalculateOrientation(_dragStartPoint); ActivateState((int)MovableCharacterStates.Drag); obj.StartDrag(); }
public void Spawn(GameObject spawnPoint, string passengerName = "", TicketAdditionMode ticketMode = TicketAdditionMode.Default) { if (GameController.GetInstance().IsGameFinished) { return; } if (passengerName == "") { DoRegularSpawn(spawnPoint); } else { PassengerSM ps = InstantiateNPC(passengerName, spawnPoint.transform.position, true, true); ps.MoveToRandomPosition(); if (ticketMode != TicketAdditionMode.Default) { ps.SetTicketAndVisibility(ticketMode == TicketAdditionMode.WithTicket, false); } } }
public bool TryAttackMovable(MovableCharacterSM movable) { if (_attackDenyedByTraining) { return(false); } float currentAttackProbability = GetAttackProbabilityForClass(movable.GetClassName()); var sm = movable as PassengerSM; if (sm != null) { if (_isPassengerAttackDenied) { return(false); } PassengerSM passenger = sm; if (passenger.IsOnTheBench()) { currentAttackProbability *= ConfigReader.GetConfig().GetField("tram").GetField("SitAggressionIncrement").n; } } if (Randomizer.GetPercentageBasedBoolean((int)currentAttackProbability)) { if (_isConductorAttackDenied) { ConductorSM conductor = movable as ConductorSM; if (conductor != null) { return(false); } } AttackTarget = movable; AttackIfPossible(); return(true); } MakeIdle(); return(false); }
private void OnMouseDown(bool doubleClick) { if (Time.timeScale == 0) { return; } if (_hero == null) { return; } Vector2 pos = GetCurrentMousePosition(); List <MovableCharacterSM> affectedCharacters = new List <MovableCharacterSM>(); if (MonobehaviorHandler.GetMonobeharior() .GetObject <BonusTimer>("bonusTimer").IsAnyBonusActive()) { affectedCharacters = MonobehaviorHandler.GetMonobeharior() .GetObject <BonusTimer>("bonusTimer").HandleClick(pos, doubleClick); } PassengerSM passengerNearClick = GameController.GetInstance().GetPassengerNearClick(pos); if (passengerNearClick != null && !affectedCharacters.Contains(passengerNearClick)) { if (doubleClick) { passengerNearClick.HandleDoubleClick(); } else { passengerNearClick.HandleClick(); } return; } if (!doubleClick) { _hero.SetTarget(pos); } }
void FixedUpdate () { if (_isPaused) { _currentStickSoundRemainingTime -= Time.fixedDeltaTime; if (_currentStickSoundRemainingTime <= 0) { _currentStickSoundRemainingTime = StickSoundDelay; _player.PlayAudioById("tramdoorstuck"); } if (_currentStickPassenger == null) { _currentStickPassenger = GameController.GetInstance().GetStickPassenger(); if (_currentStickPassenger != null) { _currentStickDoor = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor").GetPassengerDoor(_currentStickPassenger) .GetComponent<DoorsAnimationController>(); } } if(_currentStickDoor != null) _currentStickDoor.Glitch(); return; } if (_isDoorsOpen) { _currentStopDuration += Time.fixedDeltaTime; if (_currentStopDuration > _stopDuration) { _isDoorsOpen = false; _currentStopDuration = 0; UpdateDoors(); } } else { if(!_isMovementTimeLocked) _currentMoveDuration += Time.fixedDeltaTime; if (_currentMoveDuration > _currentStationTotalMoveDuration) { _isDoorsOpen = true; _currentMoveDuration = 0; GameController.GetInstance().CheckBeforeDoorsOpen(); UpdateDoors(); GameController.GetInstance().IncrementStationNumberForPassengers(); if (_countToFinish > 0) { _countToFinish--; if (_countToFinish == 0) { MonobehaviorHandler.GetMonobeharior() .GetObject<TrainingHandler>("TrainingHandler").ShowNext(); } } } } }
protected override void RemoveEffectAfterCheck(PassengerSM passenger) { passenger.DragChangeStatePeriod *= DecrementCoef; }
public PassengerAttackedState(StateMachine parent) : base(parent) { _passenger = (PassengerSM) parent; }
public void Unstick() { if (_currentStickDoor != null) { if (_isDoorsOpen) _currentStickDoor.Open(false); else _currentStickDoor.Close(); _currentStickPassenger = null; } _isPaused = false; }
public void UpdatePassenger(PassengerSM ps) { if (ps.HasTicket()) { if(_totalHares > 0) _totalHares--; _ticketCount++; } UpdateStats(); }
public void Kick(PassengerSM obj) { if (obj.IsFrozen()) { obj.TemporalyUnfreeze(); } MonobehaviorHandler.GetMonobeharior().GetObject<AudioPlayer>("AudioPlayer").PlayAudioById("kick"); CalculateOrientation(obj.transform.position); ActivateState((int)MovableCharacterStates.Attack); if (obj.IsStick()) { obj.StopStick(); obj.WasStickWhenFlyAway = true; } obj.FlyAway(); AttackTarget = null; _dragTarget = null; }
protected override void RemoveEffectAfterCheck(PassengerSM passenger) { }
public PassengerFlyingAwayState(StateMachine parent) : base(parent) { _passenger = (PassengerSM) parent; }
public bool CanKick(PassengerSM obj) { if (IsInWayoutZone && IsInAttackRadius(obj.transform.position) && !obj.IsStick()) return true; return false; }
public bool IsPassengerNearCentralWayout(PassengerSM ps) { Vector2 position = ps.transform.position; if (IsPointCloseToCollider(position, _centralWayout)) return true; return false; }
public void StartSaveStickPassenger(PassengerSM passenger) { _stickTarget = passenger; }
public bool FindRunAwayTarget(PassengerSM ps) { _passengers.RemoveAll(item => item == null); foreach (var passenger in _passengers) { if (passenger != ps) { float dist = ((Vector2)passenger.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (dist < ps.AttackMaxDistance) { if (ps.TryRunAwayFromMovable(passenger)) return true; } } } ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor").GetHero(); float conductorDist = ((Vector2)hero.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (conductorDist < ps.AttackMaxDistance) { if (ps.TryRunAwayFromMovable(hero)) return true; } return false; }
protected override void AddEffectAfterCheck(PassengerSM passenger) { passenger.Velocity *= DecrementCoef; }
public bool IsNearOtherPassenger(PassengerSM ps) { _passengers.RemoveAll(item => item == null); foreach (var passenger in _passengers) { if (passenger != ps) { float dist = ((Vector2)passenger.transform.position - (Vector2)ps.transform.position).sqrMagnitude; if (dist < _minDistance) return true; } } return false; }
protected override void RemoveEffectAfterCheck(PassengerSM passenger) { passenger.Velocity *= IncrementCoef; }
public void ReplacePassenger(PassengerSM newPassenger, PassengerSM oldPassenger) { if(_passengersToAdd == null) _passengersToAdd = new List<PassengerSM>(); if(_passengersToDelete == null) _passengersToDelete = new List<PassengerSM>(); _passengersToAdd.Add(newPassenger); _passengersToDelete.Add(oldPassenger); _isPassengersListChanged = true; }
protected override void AddEffectToPassenger(PassengerSM passenger) { passenger.AddDamageValue(-passenger.GetInitialLifes()); }
public PassengerEscapeState(StateMachine parent) : base(parent) { _passenger = (PassengerSM) parent; }
public bool IsPassengerNearDoors(PassengerSM ps) { Vector2 position = ps.transform.position; foreach (var door in _doors) { if (IsPointCloseToCollider(position, door)) return true; } return false; }