示例#1
0
    protected void SpawnShell()
    {
        if (Type == F3DWeaponController.WeaponType.Shotgun)
        {
            _weaponAudio.OnReload(AudioInfo);
        }
        if (Shell == null)
        {
            return;
        }

        // Pos
        var pos = ShellSocket.position;

        pos.z = -2;

        // Rotation
        var rot = ShellSocket.rotation *
                  Quaternion.Euler(0, 0, Random.Range(-5, 5));

        // Spawn
        var shell   = F3DSpawner.Spawn(Shell, pos, rot, null);
        var shellRb = shell.GetComponent <Rigidbody2D>();

        shellRb.AddForce((Vector2)ShellSocket.up * Random.Range(ShellForce.x, ShellForce.y), ForceMode2D.Impulse);
        shellRb.AddTorque(Random.Range(ShellTorque.x, ShellTorque.y), ForceMode2D.Force);

        // Despawn
        F3DSpawner.Despawn(shell, 1.5f);
    }
示例#2
0
    // Weapon drop on character killed
    public void Drop()
    {
        F3DGenericWeapon currentWeapon = GetCurrentWeapon();
        var powerUpPrefab = currentWeapon.PowerUp;

        if (powerUpPrefab != null)
        {
            // Random Rotation
            var rot = currentWeapon.FXSocket.rotation *
                      Quaternion.Euler(0, 0, Random.Range(-5, 5));

            // Spawn
            var powerUp = F3DSpawner.Spawn(powerUpPrefab, currentWeapon.FXSocket.position,
                                           rot, null);

            // Flip
            var powerUpFlip = Mathf.Sign(currentWeapon.FXSocket.lossyScale.x);
            var curScale    = powerUp.localScale;
            curScale.x        *= powerUpFlip;
            powerUp.localScale = curScale;

            // Add random force / torque
            var powerUpRb = powerUp.GetComponent <Rigidbody2D>();
            powerUpRb.AddForce((Vector2)currentWeapon.FXSocket.up * Random.Range(8, 12),
                               ForceMode2D.Impulse);
            powerUpRb.AddTorque(Random.Range(-250, 250), ForceMode2D.Force);

            // remove gun after 2s
            F3DSpawner.Despawn(powerUp, 2f);
        }

        // Deactivate components
        currentWeapon.gameObject.SetActive(false);
        this.enabled = false;
    }
示例#3
0
    public static void SpawnHit(Transform hitPrefab, Vector2 contactPoint, Vector2 contactNormal, Transform parent,
                                float lifeTime)
    {
        if (hitPrefab == null)
        {
            return;
        }
        var hit = F3DSpawner.Spawn(hitPrefab, contactPoint, Quaternion.LookRotation(Vector3.forward, contactNormal),
                                   parent);

        F3DSpawner.Despawn(hit, lifeTime);
    }
示例#4
0
    private void SpawnHit(Vector3 contactPoint, Vector3 contactNormal)
    {
        if (Hit == null)
        {
            return;
        }
        var normalOffset = contactNormal * Random.Range(HitNormalOffset.x, HitNormalOffset.y);
        var hit          = F3DSpawner.Spawn(Hit, contactPoint + normalOffset,
                                            Quaternion.LookRotation(Vector3.forward, contactNormal), transform);

        F3DSpawner.Despawn(hit, 1f);
    }
示例#5
0
    private IEnumerator SpawnProjectileDelayed(Transform projectilePrefab, Vector2 position, Quaternion rotation)
    {
        if (!projectilePrefab)
        {
            yield break;
        }
        if (ProjectileDelay > 0)
        {
            yield return(new WaitForSeconds(ProjectileDelay));
        }

        // Lifetime
        var lifeTime = Random.Range(ProjectileLifeTime.x, ProjectileLifeTime.y);

        // Spawn
        var projectile = F3DSpawner.Spawn(projectilePrefab, position, rotation, null);

        projectile.GetComponent <F3DGenericProjectile>().Source = transform.root.gameObject;

        // Set Weapon Type
        var projectileObject = projectile.GetComponent <F3DGenericProjectile>();

        projectileObject.WeaponType   = Type;
        projectileObject.DamageType   = DamageType;
        projectileObject.DamageAmount = DamageAmount;

        // Set AudioInfo
        projectileObject.AudioInfo = AudioInfo;

        // Scale
        var scale = projectile.localScale * Random.Range(ProjectileBaseScale.x, ProjectileBaseScale.y);

        projectile.localScale = scale;
        var projRb   = projectile.GetComponent <Rigidbody2D>();
        var collider = projectile.GetComponent <Collider2D>();

        // Ignore Self
        for (var j = 0; j < _colliders.Length; j++)
        {
            Physics2D.IgnoreCollision(collider, _colliders[j]);
        }

        // Launch
        var forceRandom = Random.Range(ProjectileForce.x, ProjectileForce.y);

        projRb.AddForce(projectile.right * forceRandom, ForceMode2D.Force);

        // Despawn on lifetime
        F3DSpawner.Despawn(projectile, lifeTime);
    }
示例#6
0
    protected void SpawnMuzzleFlash()
    {
        if (MuzzleFlash == null)
        {
            return;
        }

        // Direction
        _dir = Mathf.Sign(FXSocket.parent.lossyScale.x);

        // Pos
        var pos = FXSocket.position;

        pos  += MuzzleFlashOffset.x * FXSocket.right * _dir;
        pos  += MuzzleFlashOffset.y * FXSocket.up;
        pos.z = MuzzleFlashZ;

        // Rotation
        var rot = FXSocket.rotation;

        if (MuzzleFlashRandomFlip && Random.Range(-1f, 1f) < 0)
        {
            rot *= Quaternion.Euler(180, 0, 0);
        }
        if (_dir < 0)
        {
            rot *= Quaternion.Euler(0, 180, 0);
        }

        //var rotation = FXSocket.rotation *Quaternion.Euler(0, 0, Random.Range(MuzzleFlashRotation.x, MuzzleFlashRotation.y));

        // Lifetime
        var lifeTime = Random.Range(MuzzleFlashLifeTime.x, MuzzleFlashLifeTime.y);

        // Spawn
        var muzzleFlash = F3DSpawner.Spawn(MuzzleFlash, pos, rot, FXSocket);

        //        // Scale
        //        var scale = muzzleFlash.localScale;//* Random.Range(MuzzleFlashBaseScale.x, MuzzleFlashBaseScale.y);
        //        scale.x *= _dir;
        //   scale.x += Random.Range(MuzzleFlashScaleX.x, MuzzleFlashScaleX.y);

        //  scale.z = Random.Range(-1f, 1f) > 0 ? scale.z : -scale.z;

        //  muzzleFlash.localScale = scale;
        _barrelEffects.Add(muzzleFlash);

        // Despawn
        F3DSpawner.Despawn(muzzleFlash, lifeTime);
    }
示例#7
0
    private void DespawnFXSocketObjects()
    {
        var fxSocketObjects = FXSocket.GetComponentsInChildren <Animator>();

        if (fxSocketObjects == null)
        {
            return;
        }
        for (var i = 0; i < fxSocketObjects.Length; i++)
        {
            if (fxSocketObjects[i] != null)
            {
                F3DSpawner.Despawn(fxSocketObjects[i].gameObject);
            }
        }
    }
示例#8
0
    private void OnCollisionEnter2D(Collision2D other)
    {
        // Send damage and spawn hit effects


        var contacts       = new ContactPoint2D[2];
        var contactsLength = other.GetContacts(contacts);

        if (contactsLength > 0)
        {
            var contact = other.contacts[0];

            DealDamage(Source, DamageType, DamageAmount, WeaponType, contact.collider.transform, Hit, HitLifeTime, contact.point, contact.normal);

            // Play hit sound
            F3DWeaponAudio.OnProjectileImpact(Audio, AudioInfo);

            // Disable Physics if we have any
            if (_rBody != null && _collider != null)
            {
                _rBody.isKinematic = true;
                _collider.enabled  = false;

                _rBody.simulated = false;
            }

            // Hide the sprite
            if (PostHitHide)
            {
                _pSystem.Stop(true);
                _pSystem.Clear(true);
            }

            // Despawn self
            F3DSpawner.Despawn(transform, DelayDespawn);
        }
    }
示例#9
0
    protected void SpawnBarrelSpark()
    {
        if (!BarrelSpark)
        {
            return;
        }
        var lifeTime = Random.Range(3, 3);

        // Pos
        var pos = FXSocket.position;

        pos.z = 0;

        // Rotation
        var rot         = FXSocket.rotation;
        var barrelSpark = F3DSpawner.Spawn(BarrelSpark, pos, rot, null);

        _dir = Mathf.Sign(FXSocket.parent.lossyScale.x);
        var dirScale = barrelSpark.localScale;

        dirScale.x            *= _dir;
        barrelSpark.localScale = dirScale;
        F3DSpawner.Despawn(barrelSpark, lifeTime);
    }
示例#10
0
    protected void SpawnSmoke()
    {
        if (!Smoke)
        {
            return;
        }
        var lifeTime = Random.Range(3, 3);

        // Pos
        var pos = FXSocket.position;

        pos.z = 0;

        // Rotation
        var rot       = FXSocket.rotation;
        var smoke     = F3DSpawner.Spawn(Smoke, pos, rot, null);
        var direction = Mathf.Sign(FXSocket.parent.lossyScale.x);
        var dirScale  = smoke.localScale;

        dirScale.x      *= direction;
        smoke.localScale = dirScale;
        _smokeEffects.Add(smoke);
        F3DSpawner.Despawn(smoke, lifeTime);
    }
示例#11
0
    protected void SpawnBeam(Transform projectilePrefab)
    {
        if (!projectilePrefab)
        {
            return;
        }

        // Pos
        var pos = FXSocket.position;

        pos.z = 0;

        // Rotation
        var rot = FXSocket.rotation;

        // Spawn
        var projectile = F3DSpawner.Spawn(projectilePrefab, pos, rot, FXSocket);

        // Set Weapon Type
        var projectileObject = projectile.GetComponent <F3DPulse>();

        projectileObject.WeaponType = Type;
        projectileObject.AudioInfo  = AudioInfo;
    }
示例#12
0
 private void Start()
 {
     F3DSpawner.Despawn(transform, DelayDespawn);
 }