/*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 ); }
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; }
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; }