Esempio n. 1
0
        private bool ProcessForwardShieldProjectors(ref int p, byte[] d, long bseq, float sendertime)
        {
            int count = d[p];

            p++;

            for (int i = 0; i < count; i++)
            {
                var id    = NetworkDataTools.GetByte(d[p + 0]);
                var ifrac = NetworkDataTools.GetHighBits(d[p + 1], 3);
                var boost = NetworkDataTools.GetLowBits(d[p + 1], 5);
                var rotA  = NetworkDataTools.GetSingle(d[p + 2], d[p + 3], d[p + 4], d[p + 5]);
                var rotT  = NetworkDataTools.GetSingle(d[p + 6], d[p + 7], d[p + 8], d[p + 9]);
                var hp    = NetworkDataTools.GetByte(d[p + 10]) / 255f;
                var ct    = (NetworkDataTools.GetByte(d[p + 11]) / 255f) * Cannon.SHIELDLASER_CHARGE_COOLDOWN_MAX;

                var frac = Screen.GetFractionByID(ifrac, out bool gfbiError);
                if (gfbiError)
                {
                    SAMLog.Error("SNS-COMMON::PFSP_GFBI", "GetFractionByID returned error: Unknown Fraction " + ifrac + "\nData:\n" + ByteUtils.CompressBytesForStorage(d));
                    return(false);
                }

                Cannon c;
                if (Screen.CannonMap.TryGetValue(id, out c))
                {
                    ShieldProjectorCannon sc = c as ShieldProjectorCannon;
                    if (sc != null && ShouldRecieveData(frac, sc))
                    {
                        if (ShouldRecieveRotationData(frac, sc))
                        {
                            sc.RemoteRotationUpdate(rotA, rotT, sendertime);
                        }

                        if (ShouldRecieveStateData(frac, sc))
                        {
                            sc.RemoteUpdate(frac, hp, boost, ct, sendertime);
                        }
                    }
                }

                p += PLEN_SHIELDPROJECTOR;
            }

            return(true);
        }
Esempio n. 2
0
        private void ProcessForwardShieldProjectors(ref int p, byte[] d, long bseq, float sendertime)
        {
            int count = d[p];

            p++;

            for (int i = 0; i < count; i++)
            {
                var id    = NetworkDataTools.GetByte(d[p + 0]);
                var frac  = Screen.GetFractionByID(NetworkDataTools.GetHighBits(d[p + 1], 3));
                var boost = NetworkDataTools.GetLowBits(d[p + 1], 5);
                var rotA  = NetworkDataTools.GetSingle(d[p + 2], d[p + 3], d[p + 4], d[p + 5]);
                var rotT  = NetworkDataTools.GetSingle(d[p + 6], d[p + 7], d[p + 8], d[p + 9]);
                var hp    = NetworkDataTools.GetByte(d[p + 10]) / 255f;
                var ct    = (NetworkDataTools.GetByte(d[p + 11]) / 255f) * Cannon.SHIELDLASER_CHARGE_COOLDOWN_MAX;

                Cannon c;
                if (Screen.CannonMap.TryGetValue(id, out c))
                {
                    ShieldProjectorCannon sc = c as ShieldProjectorCannon;
                    if (sc != null && ShouldRecieveData(frac, sc))
                    {
                        if (ShouldRecieveRotationData(frac, sc))
                        {
                            sc.RemoteRotationUpdate(rotA, rotT, sendertime);
                        }

                        if (ShouldRecieveStateData(frac, sc))
                        {
                            sc.RemoteUpdate(frac, hp, boost, ct, sendertime);
                        }
                    }
                }

                p += PLEN_SHIELDPROJECTOR;
            }
        }