private IEnumerator CheckStatus() { yield return(new WaitForSeconds(_updateTime)); while (true) { foreach (EPartType partType in Enum.GetValues(typeof(EPartType))) { Part part = _equipment.GetEquippedPart(partType); if (part != null) { IOverheatable oh = part.AsOverheatable(); if (oh != null) { if (_internalTemperature.Value > oh.MaximumOperatingTemperature) { if (!_overheatedParts.ContainsKey(partType)) { _overheatedParts.Add(partType, new OverheatedPart(oh, 0f)); _changeAlarms.Raise(new ChangeAlarmsEA() { AddedAlarm = UI.AlarmDisplay.EAlarmType.TemperatureHigh }); } } else { if (_overheatedParts.ContainsKey(partType)) { _overheatedParts.Remove(partType); } if (_overheatedParts.Count == 0) { _changeAlarms.Raise(new ChangeAlarmsEA() { RemovedAlarm = UI.AlarmDisplay.EAlarmType.TemperatureHigh }); } } } } } foreach (var elem in _overheatedParts) { elem.Value.TimeOfOverheating += _updateTime; if (elem.Value.TimeOfOverheating >= elem.Value.Overheatable.ToleranceTime) { DamagePlayerEA dp = new DamagePlayerEA(); dp.DealPermaDamage(new Tuple <EPartType, float>(elem.Key, 0.01f)); _damagePlayer.Raise(dp); elem.Value.TimeOfOverheating = 0f; } } yield return(new WaitForSeconds(_updateTime)); } }
private IEnumerator DealInternalDamageOnTime() { while (true) { DamagePlayerEA dp = new DamagePlayerEA(); EPartType[] includedParts = { EPartType.Battery, EPartType.Cooling, EPartType.Engine }; dp.PermaDamage.Add(includedParts[UnityEngine.Random.Range(0, includedParts.Length)], 0.01f); _damagePlayer.Raise(dp); yield return(new WaitForSeconds(_radiationDamageInterval)); } }
private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject != null) { if (collision.gameObject.GetComponent <PlayerController>()) { Rigidbody2D rb = GetComponent <Rigidbody2D>(); int damage = Mathf.Clamp(_damage * (int)Mathf.Clamp(Mathf.Sqrt(rb.velocity.sqrMagnitude / 10f), 1f, 5f), 1, int.MaxValue); DamagePlayerEA dp = new DamagePlayerEA(damage, _damageType); EPartType[] partTypes = (EPartType[])System.Enum.GetValues(typeof(EPartType)); dp.PermaDamage.Add(partTypes[Random.Range(0, partTypes.Length)], 0.01f); _playerDamaged.Raise(dp); Destroy(gameObject); } } }
private void CheckForHit() { float sqrSpeedChange = Vector2.SqrMagnitude(_previousSpeed - _currentSpeed.Value); if (sqrSpeedChange > _resistanceToHit && _gridPosition.Value.y < 0) { int damage = Mathf.CeilToInt(0.0002f * Mathf.Pow(5 * sqrSpeedChange, 1.2f)); //damage from ground DamagePlayerEA dp = new DamagePlayerEA(damage, _kineticDamageType); if (damage >= _playerMaxHull * _permaDamageThreshold) { dp.DealPermaDamage( new Tuple <EPartType, float>(EPartType.Hull, 0.01f), new Tuple <EPartType, float>(EPartType.FuelTank, 0.01f) ); } _damagePlayer.Raise(dp); } _previousSpeed = _currentSpeed.Value; }