Пример #1
0
    public static Projectile Create(ControlledShooter shooter, Vector3 position, Vector3 direction, float speed, string prefab_path = "Prefabs/DefaultProjectile")
    {
        Projectile projectile = Projectile.Create((Shooter)shooter, position, direction, speed, prefab_path);

        Physics2D.IgnoreCollision(shooter.GetComponent <BoxCollider2D>(), projectile.GetComponent <BoxCollider2D>());
        return(projectile);
    }
Пример #2
0
    void OnTriggerStay2D(Collider2D other)
    {
        if (this.shooter == null)
        {
            return;
        }
        Damageable        damageable         = other.gameObject.GetComponent <Damageable>();
        Rock              rock               = other.gameObject.GetComponent <Rock>();
        UFO               ufo                = other.gameObject.GetComponent <UFO>();
        Nebula            nebula             = other.gameObject.GetComponent <Nebula>();
        ControlledShooter controlled_shooter = this.shooter.gameObject.GetComponent <ControlledShooter>();

        /// The projectile collided with something!
        if (damageable != null)
        {
            damageable.Damage(this.damage);
            if (rock != null)
            {
                if (controlled_shooter != null && controlled_shooter.GetComponent <Scored>() != null)
                {
                    uint value = 0;
                    switch (rock.rock_type)
                    {
                    case Rock.RockType.LARGE:
                        value = controlled_shooter.score_per_large_asteroid_kill;
                        break;

                    case Rock.RockType.MEDIUM:
                        value = controlled_shooter.score_per_medium_asteroid_kill;
                        break;

                    case Rock.RockType.SMALL:
                        value = controlled_shooter.score_per_small_asteroid_kill;
                        break;
                    }
                    controlled_shooter.GetComponent <Scored>().score += value;
                }
            }
            else if (ufo != null && controlled_shooter != null)
            {
                Scored scored = controlled_shooter.GetComponent <Scored>();
                if (scored != null)
                {
                    scored.score += ufo.score_on_hit;
                    if (!ufo.damageable.IsAlive())
                    {
                        controlled_shooter.GetComponent <Scored>().score += ufo.score_on_kill;
                    }
                }
            }
            if (nebula == null)
            {
                Destroy(this.gameObject);
            }
        }
    }
Пример #3
0
 private ControlledShooter GetPlayer()
 {
     foreach (GameObject game_object in SceneManager.GetActiveScene().GetRootGameObjects())
     {
         ControlledShooter player_component = game_object.GetComponent <ControlledShooter>();
         if (player_component != null)
         {
             return(player_component);
         }
     }
     return(null);
 }
Пример #4
0
    void OnTriggerEnter2D(Collider2D collider)
    {
        Rock              rock   = collider.gameObject.GetComponent <Rock>();
        Projectile        bullet = collider.gameObject.GetComponent <Projectile>();
        UFO               ufo    = collider.gameObject.GetComponent <UFO>();
        ControlledShooter player = collider.gameObject.GetComponent <ControlledShooter>();
        Nebula            nebula = collider.gameObject.GetComponent <Nebula>();

        this.GetComponent <Damageable>().Damage(1);
        if (rock != null)
        {
            Color colour = rock.gameObject.GetComponent <SpriteRenderer>().color;
            colour.g *= 0.75f;
            rock.gameObject.GetComponent <SpriteRenderer>().color = colour;
            rock.gameObject.GetComponent <Rigidbody2D>().mass    *= 0.5f;
            Destroy(rock.gameObject.GetComponent <ScreenWrapped>());
        }
        else if (bullet != null)
        {
            bullet.gameObject.AddComponent <ScreenWrapped>();
            Color colour = bullet.gameObject.GetComponent <SpriteRenderer>().color;
            colour.g *= 0.75f;
            bullet.gameObject.GetComponent <SpriteRenderer>().color = colour;
            bullet.damage *= 2;
        }
        else if (ufo != null)
        {
            ufo.gameObject.AddComponent <ScreenWrapped>();
            Color colour = ufo.gameObject.GetComponent <SpriteRenderer>().color;
            colour.g *= 0.75f;
            ufo.gameObject.GetComponent <SpriteRenderer>().color = colour;
            ufo.shoot_rate     *= 100.0f;
            ufo.shoot_accuracy *= 0.01f;
            ufo.GetComponent <Rigidbody2D>().freezeRotation       = false;
            ufo.gameObject.GetComponent <Rigidbody2D>().velocity *= 8.0f;
            if (ufo.gameObject.GetComponent <Damageable>().current_health == 1)
            {
                Destroy(ufo.gameObject);
            }
            else
            {
                ufo.gameObject.GetComponent <Damageable>().current_health = 1;
            }
        }
        else if (player != null)
        {
            player.GetComponent <Rigidbody2D>().velocity = player.GetComponent <Rigidbody2D>().velocity * 4.0f;
            player.gameObject.GetComponent <Rigidbody2D>().angularVelocity = 256.0f * Random.Range(-Mathf.PI, Mathf.PI);
            player.gameObject.GetComponent <Damageable>().Heal(1);
            Destroy(this.gameObject);
        }
        else if (nebula != null)
        {
            Damageable nebula_dmg = nebula.GetComponent <Damageable>();
            nebula_dmg.max_health    *= 2;
            nebula_dmg.current_health = nebula_dmg.max_health;
            nebula.GetComponent <Rigidbody2D>().velocity *= 4.0f;
            this.GetComponent <Rigidbody2D>().velocity   *= 0.25f;
        }
        else
        {
            this.GetComponent <Damageable>().Heal(1);
        }
    }