示例#1
0
文件: Net.cs 项目: maesse/CubeHags
        public static void WriteDeltaPlayerstate(NetBuffer msg, Common.PlayerState from, Common.PlayerState to)
        {
            int msgStart = msg.LengthBits;
            if (from == null)
                from = new Common.PlayerState();

            if (from.commandTime != to.commandTime) { msg.Write(true); msg.Write(to.commandTime); } else { msg.Write(false); }
            if (from.pm_type != to.pm_type) { msg.Write(true); msg.Write((int)to.pm_type); } else { msg.Write(false); }
            if (from.pm_flags != to.pm_flags) { msg.Write(true); msg.Write((int)to.pm_flags); } else { msg.Write(false); }
            if (from.pm_time != to.pm_time) { msg.Write(true); msg.Write(to.pm_time); } else { msg.Write(false); }
            if (from.origin.X != to.origin.X) { msg.Write(true); msg.Write(to.origin.X); } else { msg.Write(false); }
            if (from.origin.Y != to.origin.Y)
            { msg.Write(true); msg.Write(to.origin.Y); }
            else
            { msg.Write(false); }
            if (from.origin.Z != to.origin.Z) { msg.Write(true); msg.Write(to.origin.Z); } else { msg.Write(false); }
            if (from.velocity.X != to.velocity.X) { msg.Write(true); msg.Write(to.velocity.X); } else { msg.Write(false); }
            if (from.velocity.Y != to.velocity.Y) { msg.Write(true); msg.Write(to.velocity.Y); } else { msg.Write(false); }
            if (from.velocity.Z != to.velocity.Z) { msg.Write(true); msg.Write(to.velocity.Z); } else { msg.Write(false); }

            if (from.weaponTime != to.weaponTime) { msg.Write(true); msg.Write(to.weaponTime); } else { msg.Write(false); }
            if (from.gravity != to.gravity) { msg.Write(true); msg.Write(to.gravity); } else { msg.Write(false); }
            if (from.delta_angles[0] != to.delta_angles[0]) { msg.Write(true); msg.Write(to.delta_angles[0]); } else { msg.Write(false); }
            if (from.delta_angles[1] != to.delta_angles[1]) { msg.Write(true); msg.Write(to.delta_angles[1]); } else { msg.Write(false); }
            if (from.delta_angles[2] != to.delta_angles[2]) { msg.Write(true); msg.Write(to.delta_angles[2]); } else { msg.Write(false); }
            if (from.groundEntityNum != to.groundEntityNum) { msg.Write(true); msg.Write(to.groundEntityNum); } else { msg.Write(false); }
            if (from.movementDir != to.movementDir) { msg.Write(true); msg.Write(to.movementDir); } else { msg.Write(false); }
            if (from.ladderNormal.X != to.ladderNormal.X) { msg.Write(true); msg.Write(to.ladderNormal.X); } else { msg.Write(false); }
            if (from.ladderNormal.Y != to.ladderNormal.Y) { msg.Write(true); msg.Write(to.ladderNormal.Y); } else { msg.Write(false); }
            if (from.ladderNormal.Z != to.ladderNormal.Z) { msg.Write(true); msg.Write(to.ladderNormal.Z); } else { msg.Write(false); }
            if (from.speed != to.speed) { msg.Write(true); msg.Write(from.speed); } else { msg.Write(false); }

            if (from.eFlags != to.eFlags) { msg.Write(true); msg.Write((int)to.eFlags); } else { msg.Write(false); }
            if (from.eventSequence != to.eventSequence) { msg.Write(true); msg.Write(to.eventSequence); } else { msg.Write(false); }
            if (from.events[0] != to.events[0]) { msg.Write(true); msg.Write(to.events[0]); } else { msg.Write(false); }
            if (from.events[1] != to.events[1]) { msg.Write(true); msg.Write(to.events[1]); } else { msg.Write(false); }
            if (from.eventParms[0] != to.eventParms[0]) { msg.Write(true); msg.Write(to.eventParms[0]); } else { msg.Write(false); }
            if (from.eventParms[1] != to.eventParms[1]) { msg.Write(true); msg.Write(to.eventParms[1]); } else { msg.Write(false); }
            if (from.externalEvent != to.externalEvent) { msg.Write(true); msg.Write(to.externalEvent); } else { msg.Write(false); }
            if (from.externalEventParm != to.externalEventParm) { msg.Write(true); msg.Write(to.externalEventParm); } else { msg.Write(false); }
            if (from.externalEventTime != to.externalEventTime) { msg.Write(true); msg.Write(to.externalEventTime); } else { msg.Write(false); }
            if (from.clientNum != to.clientNum) { msg.Write(true); msg.Write(to.clientNum); } else { msg.Write(false); }
            if (from.viewangles.X != to.viewangles.X) { msg.Write(true); msg.Write(to.viewangles.X); } else { msg.Write(false); }
            if (from.viewangles.Y != to.viewangles.Y) { msg.Write(true); msg.Write(to.viewangles.Y); } else { msg.Write(false); }
            if (from.viewangles.Z != to.viewangles.Z) { msg.Write(true); msg.Write(to.viewangles.Z); } else { msg.Write(false); }
            if (from.viewheight != to.viewheight) { msg.Write(true); msg.Write(to.viewheight); } else { msg.Write(false); }
            if (from.generic1 != to.generic1) { msg.Write(true); msg.Write(to.generic1); } else { msg.Write(false); }
            if (from.bobCycle != to.bobCycle) { msg.Write(true); msg.Write(to.bobCycle); } else { msg.Write(false); }

            if (from.Ducked != to.Ducked) { msg.Write(true); msg.Write(to.Ducked); } else { msg.Write(false); }
            if (from.Ducking != to.Ducking) { msg.Write(true); msg.Write(to.Ducking); } else { msg.Write(false); }
            if (from.DuckTime != to.DuckTime) { msg.Write(true); msg.Write(to.DuckTime); } else { msg.Write(false); }
            if (from.OldButtons != to.OldButtons) { msg.Write(true); msg.Write(to.OldButtons); } else { msg.Write(false); }

            //
            // send the arrays
            //
            int statbits = 0;
            for (int i = 0; i < 16; i++)
            {
                if (from.stats[i] != to.stats[i])
                    statbits |= 1 << i;
            }

            int persbits = 0;
            for (int i = 0; i < 16; i++)
            {
                if (from.persistant[i] != to.persistant[i])
                    persbits |= 1 << i;
            }

            if (persbits == statbits && statbits == 0)
            {
                // no change
                msg.Write(false);
                return;
            }
            msg.Write(true);
            if (statbits > 0)
            {
                msg.Write(true);
                msg.Write(statbits);
                for (int i = 0; i < 16; i++)
                {
                    if ((statbits & (1 << i)) == (1 << i))
                    {
                        msg.Write((short)to.stats[i]);
                    }
                }
            }
            else
                msg.Write(false);
            int msgMiddle = msg.LengthBits;
            if (persbits > 0)
            {
                msg.Write(true);
                msg.Write(persbits);
                for (int i = 0; i < 16; i++)
                {
                    if ((persbits & (1 << i)) == (1 << i))
                    {
                        msg.Write((short)to.persistant[i]);
                    }
                }
            }
            else
                msg.Write(false);

               // System.Console.WriteLine("Wrote {0}bits snapshot, {1} middle", msg.LengthBits - msgStart, msgMiddle - msgStart);
        }
示例#2
0
文件: Net.cs 项目: maesse/CubeHags
        public static void ReadDeltaPlayerstate(NetBuffer msg, Common.PlayerState from, Common.PlayerState to)
        {
            int startoffset = msg.Position;
            if (from == null)
                from = new Common.PlayerState();

            to.commandTime = msg.ReadBoolean() ? msg.ReadInt32() : from.commandTime;
            to.pm_type = msg.ReadBoolean() ? (Common.PMType)msg.ReadInt32() : from.pm_type;
            to.pm_flags = msg.ReadBoolean() ? (client.PMFlags)msg.ReadInt32() : from.pm_flags;
            to.pm_time = msg.ReadBoolean() ? msg.ReadInt32() : from.pm_time;
            to.origin.X = msg.ReadBoolean() ? msg.ReadFloat() : from.origin.X;
            to.origin.Y = msg.ReadBoolean() ? msg.ReadFloat() : from.origin.Y;
            to.origin.Z = msg.ReadBoolean() ? msg.ReadFloat() : from.origin.Z;
            to.velocity.X = msg.ReadBoolean() ? msg.ReadFloat() : from.velocity.X;
            to.velocity.Y = msg.ReadBoolean() ? msg.ReadFloat() : from.velocity.Y;
            to.velocity.Z = msg.ReadBoolean() ? msg.ReadFloat() : from.velocity.Z;
            to.weaponTime = msg.ReadBoolean() ? msg.ReadInt32() : from.weaponTime;
            to.gravity = msg.ReadBoolean() ? msg.ReadInt32() : from.gravity;
            to.delta_angles[0] = msg.ReadBoolean() ? msg.ReadInt32() : from.delta_angles[0];
            to.delta_angles[1] = msg.ReadBoolean() ? msg.ReadInt32() : from.delta_angles[1];
            to.delta_angles[2] = msg.ReadBoolean() ? msg.ReadInt32() : from.delta_angles[2];
            to.groundEntityNum = msg.ReadBoolean() ? msg.ReadInt32() : from.groundEntityNum;
            to.movementDir = msg.ReadBoolean() ? msg.ReadInt32() : from.movementDir;
            to.ladderNormal.X = msg.ReadBoolean() ? msg.ReadFloat() : from.ladderNormal.X;
            to.ladderNormal.Y = msg.ReadBoolean() ? msg.ReadFloat() : from.ladderNormal.Y;
            to.ladderNormal.Z = msg.ReadBoolean() ? msg.ReadFloat() : from.ladderNormal.Z;
            to.speed = msg.ReadBoolean() ? msg.ReadInt32() : from.speed;
            to.eFlags = msg.ReadBoolean() ? (Common.EntityFlags)Enum.Parse(typeof(Common.EntityFlags), ""+msg.ReadInt32()) : from.eFlags;
            to.eventSequence = msg.ReadBoolean() ? msg.ReadInt32() : from.eventSequence;
            to.events[0] = msg.ReadBoolean() ? msg.ReadInt32() : from.events[0];
            to.events[1] = msg.ReadBoolean() ? msg.ReadInt32() : from.events[1];
            to.eventParms[0] = msg.ReadBoolean() ? msg.ReadInt32() : from.eventParms[0];
            to.eventParms[1] = msg.ReadBoolean() ? msg.ReadInt32() : from.eventParms[1];
            to.externalEvent = msg.ReadBoolean() ? msg.ReadInt32() : from.externalEvent;
            to.externalEventParm = msg.ReadBoolean() ? msg.ReadInt32() : from.externalEventParm;
            to.externalEventTime = msg.ReadBoolean() ? msg.ReadInt32() : from.externalEventTime;
            to.clientNum = msg.ReadBoolean() ? msg.ReadInt32() : from.clientNum;
            to.viewangles.X = msg.ReadBoolean() ? msg.ReadFloat() : from.viewangles.X;
            to.viewangles.Y = msg.ReadBoolean() ? msg.ReadFloat() : from.viewangles.Y;
            to.viewangles.Z = msg.ReadBoolean() ? msg.ReadFloat() : from.viewangles.Z;
            to.viewheight = msg.ReadBoolean() ? msg.ReadInt32() : from.viewheight;
            //if (to.viewheight == 16)
            //{
            //    int test = 2;
            //}
            to.generic1 = msg.ReadBoolean() ? msg.ReadInt32() : from.generic1;
            to.bobCycle = msg.ReadBoolean() ? msg.ReadInt32() : from.bobCycle;

            to.Ducked = msg.ReadBoolean() ? msg.ReadBoolean() : from.Ducked;
            to.Ducking = msg.ReadBoolean() ? msg.ReadBoolean() : from.Ducking;
            to.DuckTime = msg.ReadBoolean() ? msg.ReadInt32() : from.DuckTime;
            to.OldButtons = msg.ReadBoolean() ? msg.ReadInt32() : from.OldButtons;

            // Got diff arrays

            int msgMiddle = 99999;
            if (msg.ReadBoolean())
            {
                if (msg.ReadBoolean())
                {
                    // stat
                    int statbits = msg.ReadInt32();
                    for (int i = 0; i < 16; i++)
                    {
                        if ((statbits & (1 << i)) == (1 << i))
                        {
                            to.stats[i] = msg.ReadInt16();
                        }
                        else
                            to.stats[i] = from.stats[i];
                    }
                }
                else
                    to.stats = from.stats;
                msgMiddle = msg.Position;
                if (msg.ReadBoolean())
                {
                    // pers
                    int persbits = msg.ReadInt32();
                    for (int i = 0; i < 16; i++)
                    {
                        if ((persbits & (1 << i)) == (1 << i))
                        {
                            to.persistant[i] = msg.ReadInt16();
                        }
                        else
                            to.persistant[i] = from.persistant[i];
                    }
                }
                else
                    to.persistant = from.persistant;
            }
            else
            {
                to.stats = from.stats;
                to.persistant = from.persistant;
            }

            //System.Console.WriteLine("Read {0}bits snapshot, {1} middle", msg.Position - startoffset, msgMiddle - startoffset);
        }