Пример #1
0
    public void TryToFire( )
    {
        if (spawnPoint == null)
        {
            return;
        }

        if (realoadTimeLeft > 0 || timeToNextShot > 0)
        {
            return;
        }

        GameObject shotGO = Instantiate
                            (
            parameters.Projectile,
            spawnPoint.position,
            Quaternion.Euler
            (
                spawnPoint.rotation.eulerAngles.x,
                spawnPoint.rotation.eulerAngles.y,
                spawnPoint.rotation.eulerAngles.z + Random.Range(0f, 15f)
            )
                            );

        Rigidbody2D shotRB = shotGO.GetComponent <Rigidbody2D>( );

        shotRB.velocity = shotGO.transform.rotation * Vector2.left * parameters.Force;

        CanisterGrenade grenade = shotGO.GetComponent <CanisterGrenade>();

        grenade.fromTeam = FromTeam;
        grenade.SetDamage(parameters.GetDamage( ));

        shotGO.transform.SetParent(LitterContainer.instanceTransform);

        timeToNextShot = parameters.DelayBetweenShots;
        currentMagSize--;

        if (isPlayerDriver)
        {
            weaponSlotEvents.Raise(UIEvent.ThrowerOn, currentMagSize / parameters.MagSize);
        }

        if (currentMagSize <= 0)
        {
            currentMagSize  = (int)parameters.MagSize;
            realoadTimeLeft = parameters.RealoadTime;
        }
    }
Пример #2
0
    private void ShootLaser()
    {
        if (!shooting)
        {
            audioEvent.Raise(audioEventType, gun.transform.position);
            shooting = true;
            Invoke("StopSound", 1f);
        }

        beam.gameObject.SetActive(true);
        if (!muzzleFlesh.isPlaying)
        {
            muzzleFlesh.Play( );
        }

        Vector2 laserDirection   = spawnPoint.rotation * (spawnPoint.right * -1);
        float   currentLaserSize = maxLaserSize;

        RaycastHit2D hit = Physics2D.Raycast(spawnPoint.position, laserDirection, maxLaserSize);

        if (hit.collider != null)
        {
            currentLaserSize             = Vector2.Distance(spawnPoint.position, hit.point);
            beam.transform.localScale    = new Vector3(beam.transform.localScale.x, beam.transform.localScale.y, currentLaserSize * laserScaleCorrection);
            beam.transform.localPosition = new Vector3(beam.transform.localPosition.x, beam.transform.localPosition.y, currentLaserSize * laserMoveCorrection);

            impact.transform.position = hit.point;

            if (!impact.isPlaying)
            {
                impact.Play( );
            }

            Player collidedPlayer = hit.collider.gameObject.GetComponent <Player>();
            Mech   collidedMech   = hit.collider.gameObject.GetComponent <Mech>();

            if (collidedPlayer != null || collidedMech != null)
            {
                collidedPlayer = collidedPlayer == null ? collidedMech.driver : collidedPlayer;
            }

            if (FromTeam != Team.Independant && collidedPlayer && collidedPlayer.team == FromTeam)
            {
                return;
            }

            HP hp = hit.collider.GetComponent <HP>( );
            if (hp)
            {
                didDamageEvent.Raise(0.1f);
                hp.TakeDamage(parameters.GetDamage( ) * Time.deltaTime);
            }

            CanisterGrenade canisterGrenade = hit.collider.GetComponent <CanisterGrenade>();
            if (canisterGrenade)
            {
                canisterGrenade.DoDestruction(canisterGrenade.transform.position);
            }

            Mine mine = hit.collider.GetComponent <Mine>();
            if (mine)
            {
                mine.ExplodeAndDestroy();
            }
        }
        else
        {
            // Shooting in the air :(
            currentLaserSize             = maxLaserSize;
            beam.transform.localScale    = new Vector3(beam.transform.localScale.x, beam.transform.localScale.y, currentLaserSize * laserScaleCorrection);
            beam.transform.localPosition = new Vector3(beam.transform.localPosition.x, beam.transform.localPosition.y, currentLaserSize * laserMoveCorrection);
        }
    }