예제 #1
0
 internal SerializableCustomEntity(CustomEntity ent) : base(null)
 {
     this.MyTypeName     = SerializableCustomEntity.GetTypeName(ent);
     this.Core           = ent.Core;
     this.Components     = ent.InternalComponents;
     this.OwnerPlayerUID = ent.MyOwnerPlayerUID;
     this.OwnerPlayerWho = ent.MyOwnerPlayerWho;
 }
예제 #2
0
        protected override void ReadStream(BinaryReader reader)
        {
            int    typeId      = (ushort)reader.ReadUInt16();
            byte   ownerWho    = (byte)reader.ReadByte();
            int    who         = (ushort)reader.ReadUInt16();
            string displayName = (string)reader.ReadString();
            var    pos         = new Vector2 {
                X = (float)reader.ReadSingle(),
                Y = (float)reader.ReadSingle()
            };
            int dir = (short)reader.ReadInt16();
            int wid = (ushort)reader.ReadUInt16();
            int hei = (ushort)reader.ReadUInt16();
            var vel = new Vector2 {
                X = (float)reader.ReadSingle(),
                Y = (float)reader.ReadSingle()
            };

            Type entType = CustomEntityManager.GetTypeById(typeId);

            if (entType == null)
            {
                //throw new HamstarException( "!ModHelpers.CustomEntity.ReadStream - Invalid entity type id " + typeId );
                throw new HamstarException("Invalid entity type id " + typeId);
            }

            Player plr = ownerWho == (byte)255 ? null : Main.player[ownerWho];

            var myentTemplate = (CustomEntity)PacketProtocolData.CreateInstance(entType);
            //var myentTemplate = (CustomEntity)Activator.CreateInstance( entType, BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { }, null );

            CustomEntityCore core = myentTemplate.CreateCoreTemplate();
            IList <CustomEntityComponent> components = myentTemplate.CreateComponentsTemplate();

            core.WhoAmI      = who;
            core.DisplayName = displayName;
            core.Width       = wid;
            core.Height      = hei;
            core.Position    = pos;
            core.Velocity    = vel;
            core.Direction   = dir;

            for (int i = 0; i < components.Count; i++)
            {
                components[i].ReadStreamForwarded(reader);
                components[i].InternalOnClone();
            }

            this.MyTypeName = SerializableCustomEntity.GetTypeName(myentTemplate);
            this.CopyChangesFrom(core, components, plr);
//LogHelpers.Log( "READ "+this );
        }