private void OnEnable() { if (_isActivated) { GrenadeList.Register(this); } }
public void Activate(Actor attacker, float delay = 0) { if (delay <= float.Epsilon) { _isActivated = true; _isActivating = false; _timer = Timer; GrenadeList.Register(this); } else { _isActivating = true; _activateTimer = delay; } _attacker = attacker; }
private void Update() { if (_isActivating) { _activateTimer -= Time.deltaTime; if (_activateTimer < float.Epsilon) { _isActivating = false; _isActivated = true; GrenadeList.Register(this); _timer = Timer; } } if (_isActivated) { if (_timer < float.Epsilon) { explode(); } else { _timer -= Time.deltaTime; if (_timer < Timer - PreviewTime) { if (_preview == null) { _preview = GameObject.Instantiate(ExplosionPreview); _preview.transform.parent = null; _preview.SetActive(true); } if (_preview != null) { _preview.transform.localScale = Vector3.one * ExplosionRadius * 2; _preview.transform.position = transform.position; } } else if (_preview != null) { GameObject.Destroy(_preview); _preview = null; } } } if (_isFlying) { var position = transform.position; var previousOffset = _offset; _offset = Vector3.Lerp(_offset, Vector3.zero, Time.deltaTime * 2); position += _offset - previousOffset; GrenadePath.Step(ref position, ref _velocity, Time.deltaTime, _gravity, Bounciness); transform.position = position; } }