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();
    }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
ファイル: SyncHitscan.cs プロジェクト: emotitron/platformTest
        /// <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();
        }
コード例 #4
0
        /// <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);
    }
コード例 #6
0
        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);
                }
            }
        }
コード例 #7
0
        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();
 }