Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
 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));
     }
 }
Exemplo n.º 3
0
 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);
         }
     }
 }
Exemplo n.º 4
0
        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;
        }