private void OnAsteroidDeath(Asteroid asteroid) { asteroid.OnDeath -= OnAsteroidDeath; Shake(asteroid.Level); if (asteroid.Level > 0) { var asteroidPos = new Vector2(asteroid.transform.position.x, asteroid.transform.position.y); var pos = Random.insideUnitCircle * asteroid.Level; var levelSqr = asteroid.Level * asteroid.Level; while (pos.sqrMagnitude < levelSqr * 0.5f) { pos = Random.insideUnitCircle * asteroid.Level; } var explosionDir = (asteroidPos + pos) - asteroidPos; SpawnAsteroid(asteroid.Level - 1, asteroidPos + pos, explosionDir * Mass[asteroid.Level - 1] * 2.0f); SpawnAsteroid(asteroid.Level - 1, asteroidPos - pos, explosionDir * Mass[asteroid.Level - 1] * -2.0f); } else { AsteroidsText.text = string.Format("{0}.{1}\nAsteroids Destroyed", AsteroidCount++, (AsteroidCount % 100) * 3); } asteroid.gameObject.SetActive(false); MasterPooler.Return <Asteroid>(asteroid); }
protected override void OnTriggerEnter2D(Collider2D other) { if (other.GetComponent <EdgeWrapper>()) { MasterPooler.Return <Bomb>(this); } }
protected override void OnUpdate() { if (!IsSpawning) { return; } if (Context.Instance.PlayerCount > 2) { SpawnInterval = _originalSpawnInterval * 0.5f; } else { SpawnInterval = _originalSpawnInterval; } if (Time.time > _lastSpawnTime + SpawnInterval && MasterPooler.ActiveObjectCount <Asteroid>() < MaxAsteroids) { var level = Random.Range(1, 3); var position = SpawnPoints[Random.Range(0, SpawnPoints.Length)]; var fling = (Random.insideUnitCircle + (Vector2.one * 1.5f)) * Mass[level]; SpawnAsteroid(level, position, fling); _lastSpawnTime = Time.time; } }
protected override void OnStart() { MasterPooler.InitPool <MissileExplodeEffect>(_effectPrefab); if (_launchOnStart) { LaunchMissile(_defaultMissileTimeout); } }
protected override void Explode() { var deathEffect = MasterPooler.Get <AsteroidDeathEffect>(transform.position, transform.rotation); deathEffect.transform.localScale = transform.localScale; deathEffect.OnEffectEnd += EndDeathEffect; deathEffect.Play(); if (OnDeath != null) { OnDeath(this); } }
protected override void FireOnTarget(BaseDamagable target) { var missile = MasterPooler.Get <Missile>(transform.position, transform.rotation); if (target == null) { Debug.Log("Faulty"); missile.LaunchMissile(this, null, 2); return; } missile.LaunchMissile(this, target, 6); }
private void OnTriggerEnter(Collider other) { MasterPooler.Return(this); if (other.CompareTag("Killzone")) { return; } Messenger.Broadcast(new HitEvent { Other = other, Position = transform.position }); }
public Asteroid SpawnAsteroid(int level, Vector3 position, Vector2 fling) { if (Context.Instance.PlayerCount == 0) { return(null); } var asteroid = MasterPooler.Get <Asteroid>(position, Quaternion.identity); var asteroidRB = asteroid.GetComponent <Rigidbody2D>(); asteroid.transform.localScale = Vector3.one * Size[level]; asteroid.Level = level; asteroid.SetHitpoints(Health[level], Health[level]); asteroid.OnDeath += OnAsteroidDeath; asteroidRB.AddForce(fling, ForceMode2D.Impulse); asteroidRB.mass = Mass[level]; return(asteroid); }
protected override void Explode() { _isActive = false; var targets = Physics2D.CircleCastAll(transform.position, _explosionRadius, transform.up); foreach (var hit in targets) { var damagable = hit.transform.GetComponent <BaseDamagable>(); if (damagable != null) { damagable.TakeDamage(_owner.GunDamage); } } var effect = MasterPooler.Get <MissileExplodeEffect>(transform.position, transform.rotation); effect.OnEffectEnd += OnEffectEnd; effect.Play(); gameObject.SetActive(false); }
protected override void OnStart() { MasterPooler.InitPool <Bomb>(_bombPrefab); }
protected override void FireOnTarget(BaseDamagable target) { var bomb = MasterPooler.Get <Bomb>(transform.position, transform.rotation); bomb.LaunchBomb(this, 20); }
private void OnEffectEnd(MissileExplodeEffect effect) { effect.OnEffectEnd -= OnEffectEnd; MasterPooler.Return <MissileExplodeEffect>(effect); MasterPooler.Return <Missile>(this); }
protected override void OnStart() { MasterPooler.InitPool <AsteroidDeathEffect>(_deathEffect); }
private void FireMissile(float directionMod) { var missile = MasterPooler.Get <Missile>(transform.position, transform.rotation); missile.Shoot(directionMod); }
protected override void OnStart() { MasterPooler.InitPool <Asteroid>(AsteroidPrefab); _originalSpawnInterval = SpawnInterval; SetSpawning(true); }
private void EndDeathEffect(AsteroidDeathEffect effect) { effect.OnEffectEnd -= EndDeathEffect; MasterPooler.Return <AsteroidDeathEffect>(effect); }
protected override void OnStart() { MasterPooler.InitPool <Missile>(_missilePrefab); }
private void Awake() { _targetLane = 0; MasterPooler.InitPool <Missile>(MissilePrefab); }