private void Detonate(Bomb bomb) { Physics.OverlapSphere(bomb.View.transform.position, bomb.Data.DamageRadius) .ToList() .ForEach(_ => { var unit = _.GetComponent <UnitView>(); if (unit != null) { _signalService.FireSignal(new UnitViewUnderAttackSignal(bomb.Data.Damage, unit, bomb.View.transform.position)); } }); _signalService.FireSignal(new DestroyBombSignal(bomb)); }
void ISignalListener <SpawnBombSignal> .SignalFired(SpawnBombSignal signal) { var viewInstance = Object.Instantiate(signal.View, signal.Position, Quaternion.identity); var bomb = new Entities.Bomb(signal.Data, viewInstance); _signalService.FireSignal(new BombSpawnedSignal(bomb)); }
void ISignalListener <SpawnUnitSignal> .SignalFired(SpawnUnitSignal signal) { ClientOnlyConditionalDebug.Log("spawn"); var viewInstance = Object.Instantiate(signal.View, signal.Position, Quaternion.identity); var unit = new Entities.Unit(signal.Data, viewInstance); _signalService.FireSignal(new UnitSpawnedSignal(unit)); }
void IService.Initialize() { _spawnTimer = Observable.Timer(TimeSpan.FromSeconds(_settings.GenerationRateInSeconds)) .Repeat() .Subscribe(_ => { var bomb = _settings.GeneratedObjects[Random.Range(0, _settings.GeneratedObjects.Count)]; _signalService.FireSignal(new SpawnBombSignal(bomb.View, bomb.Data, GenerationExtensions.GetRandomPoint(_settings.MinGenerationPoint, _settings.MaxGenerationPoint, _settings.DefaultStartHeight))); }); }
void IService.Initialize() { _spawnTimer = Observable.Timer(TimeSpan.FromSeconds(_settings.GenerationRateInSeconds)) .Repeat() .Subscribe(_ => { var unit = _settings.GeneratedObjects[Random.Range(0, _settings.GeneratedObjects.Count)]; var targetPosition = GenerationExtensions.GetRandomPoint(_settings.MinGenerationPoint, _settings.MaxGenerationPoint, _settings.DefaultStartHeight); if (UnitCanBeSpawned(targetPosition, unit.View.transform.localScale)) { _signalService.FireSignal(new SpawnUnitSignal(unit.View, unit.Data, targetPosition)); } }); }
void ISignalListener <UnitViewUnderAttackSignal> .SignalFired(UnitViewUnderAttackSignal signal) { ClientOnlyConditionalDebug.LogWarning("hey, I got apply damage signal :)"); var view = signal.View; var damage = signal.Damage; var unit = GetUnitByView(view); if (unit == null) { ClientOnlyConditionalDebug.LogWarning("unit not found"); return; } unit.Damagable.CurrentHealth -= GetCalculatedDamage(damage.Amount, signal.DamagerPosition, unit.View.transform.position); if (unit.Damagable.CurrentHealth > 0) { return; } _units.Remove(unit); _signalService.FireSignal(new DestroyUnitSignal(unit)); }