コード例 #1
0
    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);
    }
コード例 #2
0
 protected override void OnTriggerEnter2D(Collider2D other)
 {
     if (other.GetComponent <EdgeWrapper>())
     {
         MasterPooler.Return <Bomb>(this);
     }
 }
コード例 #3
0
    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;
        }
    }
コード例 #4
0
ファイル: Missile.cs プロジェクト: bluTomer/HeapsOfSpace
 protected override void OnStart()
 {
     MasterPooler.InitPool <MissileExplodeEffect>(_effectPrefab);
     if (_launchOnStart)
     {
         LaunchMissile(_defaultMissileTimeout);
     }
 }
コード例 #5
0
ファイル: Asteroid.cs プロジェクト: bluTomer/HeapsOfSpace
    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);
        }
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    private void OnTriggerEnter(Collider other)
    {
        MasterPooler.Return(this);

        if (other.CompareTag("Killzone"))
        {
            return;
        }

        Messenger.Broadcast(new HitEvent
        {
            Other    = other,
            Position = transform.position
        });
    }
コード例 #8
0
    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);
    }
コード例 #9
0
ファイル: Missile.cs プロジェクト: bluTomer/HeapsOfSpace
    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);
    }
コード例 #10
0
 protected override void OnStart()
 {
     MasterPooler.InitPool <Bomb>(_bombPrefab);
 }
コード例 #11
0
    protected override void FireOnTarget(BaseDamagable target)
    {
        var bomb = MasterPooler.Get <Bomb>(transform.position, transform.rotation);

        bomb.LaunchBomb(this, 20);
    }
コード例 #12
0
ファイル: Missile.cs プロジェクト: bluTomer/HeapsOfSpace
 private void OnEffectEnd(MissileExplodeEffect effect)
 {
     effect.OnEffectEnd -= OnEffectEnd;
     MasterPooler.Return <MissileExplodeEffect>(effect);
     MasterPooler.Return <Missile>(this);
 }
コード例 #13
0
ファイル: Asteroid.cs プロジェクト: bluTomer/HeapsOfSpace
 protected override void OnStart()
 {
     MasterPooler.InitPool <AsteroidDeathEffect>(_deathEffect);
 }
コード例 #14
0
ファイル: PlayerController.cs プロジェクト: bluTomer/LazorCar
    private void FireMissile(float directionMod)
    {
        var missile = MasterPooler.Get <Missile>(transform.position, transform.rotation);

        missile.Shoot(directionMod);
    }
コード例 #15
0
 protected override void OnStart()
 {
     MasterPooler.InitPool <Asteroid>(AsteroidPrefab);
     _originalSpawnInterval = SpawnInterval;
     SetSpawning(true);
 }
コード例 #16
0
ファイル: Asteroid.cs プロジェクト: bluTomer/HeapsOfSpace
 private void EndDeathEffect(AsteroidDeathEffect effect)
 {
     effect.OnEffectEnd -= EndDeathEffect;
     MasterPooler.Return <AsteroidDeathEffect>(effect);
 }
コード例 #17
0
 protected override void OnStart()
 {
     MasterPooler.InitPool <Missile>(_missilePrefab);
 }
コード例 #18
0
ファイル: PlayerController.cs プロジェクト: bluTomer/LazorCar
 private void Awake()
 {
     _targetLane = 0;
     MasterPooler.InitPool <Missile>(MissilePrefab);
 }