/// <summary> /// scans this player hierarchy for shooter components, hooks up their /// fire seed, position and rotation with data from the 'FireEvents' /// array and puts them in a dictionary for validation later /// </summary> public override void InitShooters() { vp_WeaponShooter[] shooters = gameObject.GetComponentsInChildren <vp_WeaponShooter>(true) as vp_WeaponShooter[]; m_Shooters.Clear(); foreach (vp_WeaponShooter f in shooters) { vp_WeaponShooter shooter = f; // need to cache shooter or delegate will only be set with values of last weapon if (m_Shooters.ContainsKey(WeaponHandler.GetWeaponIndex(shooter.Weapon))) { continue; } //Debug.Log("setting 'GetFireRotation' for: " + f); shooter.GetFireSeed = delegate { return(FireEvents[0].Seed); }; shooter.GetFirePosition = delegate { return(FireEvents[0].Position); }; shooter.GetFireRotation = delegate { return(FireEvents[0].Rotation); }; m_Shooters.Add(WeaponHandler.GetWeaponIndex(shooter.Weapon), shooter); } }
/// <summary> /// scans this player hierarchy for shooter components, hooks up /// their fire seed with the 'Shots' variable, and their firing /// delegate with a network (RPC) call. finally, puts them in a /// dictionary for validation later /// </summary> public override void InitShooters() { vp_WeaponShooter[] shooters = gameObject.GetComponentsInChildren <vp_WeaponShooter>(true) as vp_WeaponShooter[]; m_Shooters.Clear(); foreach (vp_WeaponShooter f in shooters) { vp_WeaponShooter shooter = f; // need to cache shooter or delegate will only be set with values of last weapon if (m_Shooters.ContainsKey(WeaponHandler.GetWeaponIndex(shooter.Weapon))) { continue; } shooter.GetFireSeed = delegate { return(Shots); }; shooter.m_SendFireEventToNetworkFunc = delegate() { if (!PhotonNetwork.offlineMode) { photonView.RPC("FireWeapon", PhotonTargets.All, WeaponHandler.GetWeaponIndex(shooter.Weapon), shooter.GetFirePosition(), shooter.GetFireRotation()); } //vp_MPDebug.Log("sending RPC: " + sho.gameObject.name + ", " + sho.GetFirePosition() + ", " + sho.GetFireRotation()); }; m_Shooters.Add(WeaponHandler.GetWeaponIndex(shooter.Weapon), shooter); } //Debug.Log("Stored " + m_Shooters.Count + " local weapons."); }