/*public void SendShootBulletMessage( WEAPON_TYPE _weaponType, int _index, Vector3 _pos, Quaternion _rot )
    {
        this.networkView.RPC( "OnShootBulletRPC", RPCMode.Others, Common.MyNetworkID(), (float)Network.time, (int)_weaponType, _index, _pos, _rot );// _forward );
    }

    [RPC]
    private void OnShootBulletRPC( int _ownerID, float _creationTime, int _weaponType,
                                  int _index,
                                  Vector3 _pos, Quaternion _rot )
    {
        if ( !System.Enum.IsDefined( typeof(WEAPON_TYPE), _weaponType ) )
        {
            DebugConsole.Error( "Bullet type " + _weaponType + " not defined" );
        }

        BulletManager.instance.CreateBulletRPC( _ownerID, _creationTime, (WEAPON_TYPE)_weaponType, _index, _pos, _rot );
    }*/
    public void SendWeaponFireMessage( NetworkViewID _weaponManagerViewID, int _weaponIndex, WeaponFirePoint _firePoint )
    {
        this.GetComponent<NetworkView>().RPC( "OnWeaponFireRPC", RPCMode.Others, _weaponManagerViewID, _weaponIndex, (float)Network.time, _firePoint.transform.rotation );
    }
Exemple #2
0
    private BulletBase FireBulletFromFirePoint( WeaponFirePoint _firePoint, float _damageScale, bool _local, float _timeSent, Quaternion _firePointRotation )
    {
        if ( Network.peerType != NetworkPeerType.Disconnected )
        {
            if (_local )
            {
                GameNetworkManager.instance.SendWeaponFireMessage( this.source.GetComponent<NetworkView>().viewID, this.weaponIndex, _firePoint );
            }
            else
            {
                _firePoint.transform.rotation = _firePointRotation;
            }
        }

        BulletBase bullet = BulletManager.instance.CreateBullet
        (
            this,
            _firePoint,
            _damageScale,
            _local, _timeSent );

        --this.ammunition;

        if ( _firePoint.muzzleFlash != null )
        {
            _firePoint.muzzleFlash.OnFire();
        }
        return bullet;
    }
Exemple #3
0
    public BulletBase CreateBullet( WeaponBase _weapon, WeaponFirePoint _firePoint, float _damageScale,
	                               bool _local, float _sentTime )
    {
        BulletDescriptor descriptor = BulletDescriptorManager.instance.GetDescOfType( _weapon.weaponType );

        if ( descriptor.smartBullet && !_local )
        {
            return null;
        }

        BulletBase bulletScript = null;
        GameObject bulletObj = null;
        if ( descriptor.smartBullet == false )
        {
            bulletScript = this.bulletDictionary[ _weapon.weaponType ].GetAvailableBullet( -1, -1 );

            if ( bulletScript == null )
            {
                DebugConsole.Error( "Error shooting bullet of type \"" + _weapon.weaponType + "\"", this );
                return null;
            }

            bulletObj = bulletScript.gameObject;
            bulletObj.transform.position = _firePoint.transform.position;
            bulletObj.transform.rotation = Quaternion.LookRotation( _firePoint.transform.forward );

            bulletObj.SetActive( true );
            bulletScript.Reset();
            bulletScript.enabled = true;
        }
        else // Smart bullets
        {
        #if UNITY_EDITOR
            if ( Network.peerType == NetworkPeerType.Disconnected )
            {
                bulletObj = GameObject.Instantiate(
                    descriptor.prefab,
                    _firePoint.transform.position,
                    Quaternion.LookRotation( _firePoint.transform.forward ) ) as GameObject;
            }
            else
        #endif
            {
                bulletObj = Network.Instantiate(
                    descriptor.prefab,
                    _firePoint.transform.position,
                    Quaternion.LookRotation( _firePoint.transform.forward ),
                    0) as GameObject;
            }
            bulletScript = bulletObj.GetComponent<BulletBase>();

            BaseHealth bulletHealth = bulletObj.GetComponent<BaseHealth>();
            bulletHealth.Owner = _weapon.source.health.Owner;
        }

        bulletScript.state = BulletBase.BULLET_STATE.ACTIVE_OWNED;
        bulletScript.damageScale = _damageScale;
        bulletScript.source = _weapon.source;
        if ( _weapon.source.GetComponent<Collider>() != null )
        {
            Physics.IgnoreCollision( bulletObj.GetComponent<Collider>(), _weapon.source.GetComponent<Collider>() );
        }

        // Bullet spread
        if ( _weapon.weaponDesc.spread != 0.0f )
        {
            System.Random newRand = new System.Random( (int)( _sentTime * 1000.0f ) );
            Vector3 perp = new Vector3( (float)(newRand.NextDouble() * 2.0f - 1.0f),
                                        (float)(newRand.NextDouble() * 2.0f - 1.0f), 0.0f );
            perp.Normalize();
            perp = bulletObj.transform.TransformDirection( perp );
            bulletObj.transform.Rotate( perp, UnityEngine.Random.Range( -_weapon.weaponDesc.spread, _weapon.weaponDesc.spread ) );
        }

        /*
        // Tell everyone else to fire the bullet
        if ( descriptor.smartBullet == false
          && Network.peerType != NetworkPeerType.Disconnected )
        {
            GameNetworkManager.instance.SendShootBulletMessage(
               _weapon.weaponType,
               bulletScript.index,
               _firePoint.transform.position,
               bulletObj.transform.rotation );
        }

        */
        if ( !_local && !descriptor.smartBullet )
        {
            bulletScript.Reset();
            bulletScript.state = BulletBase.BULLET_STATE.ACTIVE_NOT_OWNED;

            bulletObj.GetComponent<Collider>().enabled = false;

            float delta = (float)Network.time - _sentTime;
            Vector3 offset = bulletObj.transform.forward * descriptor.moveSpeed * delta;
            bulletObj.transform.Translate( offset );
        }

        bulletScript.OnShoot();
        _weapon.source.OnBulletCreated( _weapon, bulletScript );

        // Tell everyone else about the owner of this bullet
        if ( descriptor.smartBullet == true
          && Network.peerType != NetworkPeerType.Disconnected )
        {
            SeekingBullet seekingScript = descriptor.prefab.GetComponent<SeekingBullet>();
            BaseHealth target = seekingScript != null ? bulletObj.GetComponent<SeekingBullet>().target : null;
            NetworkViewID viewID = target != null ? target.GetComponent<NetworkView>().viewID : NetworkViewID.unassigned;

            GameNetworkManager.instance.SendSmartBulletInfoRPC(
                  bulletObj.GetComponent<NetworkView>().viewID,
                  GamePlayerManager.instance.myPlayer.id,
                  viewID );
        }

        return bulletScript;
    }