void Accept(NetworkHits data) { var hits = data.Hits; var ids = data.PlayerIDs; m_PlayerInfo.Clear(); //берем игровое представление наших игроков for (int i = 0; i < ids.Count; i++) { m_PlayerInfo.Add(ids[i], GetPlayer(ids[i])); } //перебираем все попадания for (int i = 0; i < hits.Count; i++) { var hitInfo = hits[i]; var idObj = ids[hitInfo.IndexObjectPlayer]; var idSub = ids[hitInfo.IndexSubjectPlayer]; var playerObj = m_PlayerInfo[idObj]; var playerSub = m_PlayerInfo[idSub]; //Debug.LogError("Receive Hit Obj=" + playerObj + " Sub=" + playerSub); float impulse = 1f; playerSub.Unit.Receiver.SetRangeHitAbsorbLogicImpulse(hitInfo.Pos, hitInfo.Dir, ref impulse); } m_PlayerInfo.Clear(); }
public WeaponFrame(SyncNetHitBase weapon, bool nearestOnly, int frameId) : base(frameId) { netHits = new NetworkHits[sendEveryXTick]; for (int i = 0; i < sendEveryXTick; ++i) { netHits[i] = new NetworkHits(nearestOnly, HitGroupSettings.bitsForMask); } }
/// <summary> /// Calls the actual generic hitscan and gets the results. Results are stored to the frame. /// </summary> /// <param name="frame"></param> protected override void Trigger(WeaponFrame frame, int subFrameId) { //Debug.Log(name + " Triggered"); NetworkHits results = frame.netHits[subFrameId]; List <NetworkHit> hits = results.hits; hitscanDefinition.GenericHitscanNonAlloc(origin, ref hits, ref results.nearestIndex, Realm.Primary, visualizeHitscan); HitsCallbacks(results); //TriggerCosmetic(); }
/// <summary> /// Broadcast to interested interfaces that a hit has been processed. /// </summary> /// <param name="hits"></param> protected virtual void HitsCallbacks(NetworkHits hits) { if (hits.hits.Count == 0) { return; } int cnt = onNetworkHit.Count; for (int i = 0; i < cnt; ++i) { onNetworkHit[i].OnNetworkHit(hits); } }
public bool GetData(NetDataWriter writer) { if (m_CurrentData.Hits.Count <= 0) { return(false); } bool res = m_CurrentData.PutInWriter(writer); if (m_ActualData.Count >= MAX_DATA) { m_ActualData.RemoveAt(0); } m_ActualData.Add(m_CurrentData); m_CurrentData = NetworkHits.Get(); return(res); }
public void OnNetworkHit(NetworkHits results) { var hits = results.hits; var hitcount = hits.Count; var bitsformask = results.bitsForHitGroupMask; /// if results is nearest only, we won't be looping if (results.nearestOnly) { ProcessHit(hits[0], bitsformask); } else { int cnt = hits.Count; for (int i = 0; i < cnt; ++i) { ProcessHit(hits[i], bitsformask); } } }
public void OnNetworkHit(NetworkHits results) { //Debug.Log(name + " OnNetHit " + results); var hits = results.hits; var bitsformask = results.bitsForHitGroupMask; /// if results is nearest only, we won't be looping if (results.nearestOnly) { hits[0].ProcessHit(damage, multipliers, bitsformask); } else { int cnt = hits.Count; for (int i = 0; i < cnt; ++i) { hits[i].ProcessHit(damage, multipliers, bitsformask); } } }
public void AddData(NetDataReader reader) { var data = NetworkHits.Get(); bool res = data.FromReader(reader); if (!res) { NetworkHits.Return(data); return; } var hits = data.Hits; if (hits == null || hits.Count <= 0) { NetworkHits.Return(data); return; } m_CurrentData = data; Accept(data); }
public static void Return(NetworkHits hits) { hits.Clear(); m_PoolHits.Return(hits); }
private void Start() { HitsController.CreateHit += OnHit; m_CurrentData = NetworkHits.Get(); }