Beispiel #1
0
 void OnCollision(ProjectileManager.Basic projectile, ActorBase other, float damage, Vector3 dir)
 {
     if (other.OnPaintballHit())
     {
         if (--projectile.CustomCounter == 0)
         {
             projectile.DieOnCollision = true;
         }
     }
 }
Beispiel #2
0
    public override void Fire(Transform weaponTrans, Vector3 direction, int sortingLayer, out float recoil)
    {
        lastFire_ = Time.time;
        recoil    = 0.0f;
        Color color = new Color(0.8f, 0.6f, 0.1f);

        Vector3 worldMuzzle = weaponTrans.TransformPoint(Muzzle);

        worldMuzzle += -direction * 0.2f; // Start a little behind muzzle because its very unfun missing an enemy that is too close

        GameManager.Instance.MakePoof(worldMuzzle, 1);
        GameManager.Instance.MakeFlash(worldMuzzle);
        AudioManager.Instance.PlayClip(AudioManager.Instance.PlayerAudioSource, FireAudio, volumeScale: 0.7f);

        float   spreadFactor = 15f; // Increase this to limit spread (unit circle is moved further away)
        Vector3 dir          = direction * spreadFactor;
        Vector2 spread       = RndUtil.RandomInsideUnitCircle();

        dir.x += spread.x;
        dir.y += spread.y;
        dir.Normalize();

        ProjectileManager.Basic basic = ProjectileManager.Instance.GetProjectile();
        basic.SpriteInfo = ProjectileCache.Instance.GetSprite();
        basic.Type       = ProjectileManager.ProjectileType.HarmsEnemies;

        basic.Speed                   = 10.0f + Random.value * 2;
        basic.Damage                  = 25.0f;
        basic.MaxDistance             = 12.0f;
        basic.Radius                  = 0.3f;
        basic.DieOnCollision          = false;
        basic.CustomCounter           = 1;
        basic.CustomCollisionResponse = OnCollision;
        Vector3 scale = basic.SpriteInfo.Transform.localScale;

        scale.x = 3.0f;
        scale.y = 3.0f;
        scale.z = 1.0f;

        basic.Position = worldMuzzle;
        basic.SpriteInfo.Renderer.sprite         = BulletSprite;
        basic.SpriteInfo.Renderer.sortingLayerID = sortingLayer;
        basic.Direction = dir;
        basic.Color     = color;
        basic.DieTime   = 0.0f;
        basic.SpriteInfo.Transform.localScale = scale;

        ProjectileManager.Instance.Fire(basic);
    }
Beispiel #3
0
    public override void Fire(Transform weaponTrans, Vector3 direction, int sortingLayer, out float recoil)
    {
        lastFire_ = Time.time;
        recoil    = 0.2f;
        Color   color       = Color.white;
        Vector3 worldMuzzle = weaponTrans.TransformPoint(Muzzle);

        GameManager.Instance.MakeFlash(worldMuzzle);
        AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.PlayerAudioSource, FireAudio);
        Vector3 dir = direction.normalized;

        ProjectileManager.Basic basic = ProjectileManager.Instance.GetProjectile();
        basic.SpriteInfo = ProjectileCache.Instance.GetSprite();
        basic.Type       = ProjectileManager.ProjectileType.HarmsEnemies;

        basic.Speed  = 7.0f;
        basic.Damage = 2.0f;
        basic.DamageFalloffDistance = 0.0f;
        basic.DamageFalloffPerMeter = 0.0f;
        basic.Force                  = 1.0f;
        basic.MaxDistance            = 30.0f;
        basic.Radius                 = 0.5f;
        basic.DieOnCollision         = false;
        basic.ReflectOnEdges         = true;
        basic.CollisionSound         = AudioManager.Instance.AudioData.Chainsaw;
        basic.StickySoundRepeater    = AudioManager.Instance.RepeatingSawblade;
        basic.RotationSpeed          = 360.0f * 1;
        basic.RotationSpeedWhenStuck = 360.0f * 6;
        basic.StickToTarget          = true;

        Vector3 scale = basic.SpriteInfo.Transform.localScale;

        scale.x = 0.5f;
        scale.y = 0.5f;
        scale.z = 1.0f;

        basic.Position = worldMuzzle;
        basic.SpriteInfo.Renderer.sprite         = BulletSprite;
        basic.SpriteInfo.Renderer.sortingLayerID = sortingLayer;
        basic.Direction = dir;
        basic.Color     = color;
        basic.DieTime   = 0.0f;
        basic.SpriteInfo.Transform.localScale = scale;

        ProjectileManager.Instance.Fire(basic);
    }
Beispiel #4
0
    public override void Fire(Transform weaponTrans, Vector3 direction, int sortingLayer, out float recoil)
    {
        lastFire_ = Time.time;
        recoil    = 0.0f;
        Color   color       = Color.white;
        Vector3 worldMuzzle = weaponTrans.TransformPoint(Muzzle);

        worldMuzzle += -direction * 0.2f; // Start a little behind muzzle because its very unfun missing an enemy that is too close

        GameManager.Instance.MakePoof(worldMuzzle, 4);
        GameManager.Instance.MakeFlash(worldMuzzle);
        AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.PlayerAudioSource, FireAudio);

        Vector3 dir = direction.normalized;

        ProjectileManager.Basic basic = ProjectileManager.Instance.GetProjectile();
        basic.SpriteInfo = ProjectileCache.Instance.GetSprite();
        basic.Type       = ProjectileManager.ProjectileType.HarmsEnemies;

        basic.Speed                   = 6.0f;
        basic.SwayFactor              = 0.1f;
        basic.Damage                  = 20.0f;
        basic.DamageFalloffDistance   = 0.0f;
        basic.DamageFalloffPerMeter   = 0.0f;
        basic.MaxDistance             = 15.0f;
        basic.Radius                  = 1.0f;
        basic.DieOnCollision          = false;
        basic.CustomCollisionResponse = OnCollision;

        Vector3 scale = basic.SpriteInfo.Transform.localScale;

        scale.x = 1.0f * (direction.x < 0 ? -1 : 1);
        scale.y = 1.0f;
        scale.z = 1.0f;

        basic.Position = worldMuzzle;
        basic.SpriteInfo.Renderer.sprite         = BulletSprite;
        basic.SpriteInfo.Renderer.sortingLayerID = sortingLayer;
        basic.Direction = dir;
        basic.Color     = color;
        basic.DieTime   = 0.0f;
        basic.SpriteInfo.Transform.localScale = scale;
        basic.SpriteInfo.Transform.rotation   = Quaternion.identity;

        ProjectileManager.Instance.Fire(basic);
    }
Beispiel #5
0
    void Shoot()
    {
        if (Hp <= 0.0f)
        {
            return;
        }

        Vector2 direction = BlackboardScript.PlayerTrans.position - position_;

        direction.Normalize();
        direction = RndUtil.RandomSpread(direction, 3);

        Vector3 muzzlePoint = direction * 0.6f;

        AddForce(-direction * 0.05f);

        ProjectileManager.Basic basic = ProjectileManager.Instance.GetProjectile();
        basic.SpriteInfo = ProjectileCache.Instance.GetSprite();
        basic.Type       = ProjectileManager.ProjectileType.HarmsPlayer;

        basic.Speed       = 4.0f;
        basic.Damage      = 100.0f;
        basic.MaxDistance = 15.0f;
        basic.Radius      = 0.3f;
        Vector3 scale = basic.SpriteInfo.Transform.localScale;

        scale.x = 3.0f;
        scale.y = 3.0f;
        scale.z = 1.0f;

        basic.Position = transform_.position + muzzlePoint;
        basic.SpriteInfo.Renderer.sprite         = SpriteData.Instance.Bullet;
        basic.SpriteInfo.Renderer.sortingLayerID = GameManager.Instance.SortLayerTopEffects;
        basic.Direction = direction;
        basic.Color     = Color.white;
        basic.DieTime   = 0.0f;
        basic.SpriteInfo.Transform.localScale = scale;
        float rot_z = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

        basic.SpriteInfo.Transform.rotation = Quaternion.Euler(0f, 0f, rot_z);

        ProjectileManager.Instance.Fire(basic);
        AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.EnemyShootAudioSource, AudioManager.Instance.AudioData.EnemyShoot, 0.5f);
    }
Beispiel #6
0
    public override void Fire(Transform weaponTrans, Vector3 direction, int sortingLayer, out float recoil)
    {
        lastFire_ = Time.time;
        recoil    = 0.1f;

        Color color = new Color(0.8f, 0.6f, 0.1f);

        Vector3 worldMuzzle = weaponTrans.TransformPoint(Muzzle);

        worldMuzzle += -direction * 0.2f; // Start a little behind muzzle because its very unfun missing an enemy that is too close

        GameManager.Instance.MakeFlash(worldMuzzle);
        GameManager.Instance.MakePoof(worldMuzzle, 2);
        AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.PlayerAudioSource, FireAudio);

        ProjectileManager.Basic basic = ProjectileManager.Instance.GetProjectile();
        basic.SpriteInfo = ProjectileCache.Instance.GetSprite();

        basic.Speed       = 100.0f;
        basic.Damage      = 450.0f;
        basic.MaxDistance = 80.0f;

        basic.Radius = 0.1f;
        Vector3 scale = basic.SpriteInfo.Transform.localScale;

        scale.x = 1.0f;
        scale.y = 1.0f;
        scale.z = 1.0f;
        basic.SpriteInfo.Transform.localScale = scale;

        basic.Position = worldMuzzle;
        basic.SpriteInfo.Renderer.sprite         = BulletSprite;
        basic.SpriteInfo.Renderer.sortingLayerID = sortingLayer;
        basic.Direction = direction;
        basic.Color     = color;
        basic.DieTime   = 0.0f;
        basic.Type      = ProjectileManager.ProjectileType.HarmsNothing;
        float rot_z = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

        basic.SpriteInfo.Transform.rotation = Quaternion.Euler(0f, 0f, rot_z);

        ProjectileManager.Instance.Fire(basic);

        // TODO PE: Spherecast will return sorted list
        // Sniper immediately hits the full line. Since we sort by distance we have to allow a large number of hits or we might not include closest in match list.
        float damage = basic.Damage;
        int   count  = BlackboardScript.GetEnemies(worldMuzzle, worldMuzzle + direction * 1000, 50);
        // Copy matches to local array. Sort it by distance.
        List <BlackboardScript.HitMatch> matches = new List <BlackboardScript.HitMatch>(BlackboardScript.Matches.Take(count));
        var ordered = matches.OrderBy(hit => hit.Distance).Take(5).ToList();

        for (int i = 0; i < ordered.Count; ++i)
        {
            BlackboardScript.HitMatch match = ordered[i];
            ActorBase enemy       = BlackboardScript.Enemies[match.Idx];
            float     enemyDamage = Mathf.Min(enemy.Hp, damage);
            GameManager.Instance.DamageEnemy(enemy, enemyDamage, direction, 1.0f, match.IsHeadshot);
            damage -= enemyDamage;
            if (damage <= 0)
            {
                break;
            }
        }
    }
Beispiel #7
0
 void OnCollision(ProjectileManager.Basic projectile, ActorBase other, float damage, Vector3 dir)
 {
     other.ApplyDamage(damage, dir, 1.0f, false);
 }
Beispiel #8
0
 void OnCollision(ProjectileManager.Basic projectile, ActorBase other, float damage, Vector3 dir)
 {
     other.OnLivingBombHit(500.0f);
 }