예제 #1
0
        public virtual void Load(VMMultitileGroupMarshal input, VMContext context)
        {
            MultiTile    = input.MultiTile;
            Name         = input.Name;
            InitialPrice = input.Price;
            SalePrice    = input.SalePrice;
            if (SalePrice == 0)
            {
                SalePrice = -1;
            }
            Objects = new List <VMEntity>();
            for (int i = 0; i < input.Objects.Length; i++)
            {
                var id  = input.Objects[i];
                var obj = context.VM.GetObjectById(id);
                if (obj == null)
                {
                    continue;
                }
                Objects.Add(obj);
                Offsets.Add(input.Offsets[i]);
                obj.MultitileGroup = this;
            }

            if (VM.UseWorld && (BaseObject?.PlatformState as VMTSOObjectState)?.Broken == true)
            {
                for (int i = 0; i < input.Objects.Length; i++)
                {
                    ((VMGameObject)Objects[i]).EnableParticle(256);
                }
            }
        }
예제 #2
0
        public void LoadGhost(VMMultitileGroupMarshal input, VMContext context, VMEntity[] objs)
        {
            MultiTile    = input.MultiTile;
            Name         = input.Name;
            InitialPrice = input.Price;
            SalePrice    = input.SalePrice;
            if (SalePrice == 0)
            {
                SalePrice = -1;
            }
            Objects = new List <VMEntity>();
            for (int i = 0; i < input.Objects.Length; i++)
            {
                var obj = objs[i];
                if (obj == null)
                {
                    continue;
                }
                Objects.Add(obj);
                Offsets.Add(input.Offsets[i]);

                if (VM.UseWorld && obj is VMGameObject)
                {
                    var component = (ObjectComponent)obj.WorldUI;

                    WorldGroup.Objects.Add(component);
                    component.MultitileGroup = WorldGroup;
                }

                obj.MultitileGroup = this;
            }
        }
예제 #3
0
 public virtual void Load(VMMultitileGroupMarshal input, VMContext context)
 {
     MultiTile = input.MultiTile;
     Objects   = new List <VMEntity>();
     foreach (var id in input.Objects)
     {
         var obj = context.VM.GetObjectById(id);
         Objects.Add(obj);
         obj.MultitileGroup = this;
     }
     foreach (var pos in input.Offsets)
     {
         Offsets.Add(pos);
     }
 }
예제 #4
0
        public void LoadGhost(VMMultitileGroupMarshal input, VMContext context, VMEntity[] objs)
        {
            MultiTile = input.MultiTile;
            Name      = input.Name;

            Objects = new List <VMEntity>();
            for (int i = 0; i < input.Objects.Length; i++)
            {
                var obj = objs[i];
                if (obj == null)
                {
                    continue;
                }
                Objects.Add(obj);
                Offsets.Add(input.Offsets[i]);
                obj.MultitileGroup = this;
            }
        }
예제 #5
0
        public void Deserialize(BinaryReader reader)
        {
            if (new string(reader.ReadChars(4)) != "FSOh")
            {
                return;
            }

            Version    = reader.ReadInt32();
            Compressed = reader.ReadBoolean();

            var          uReader   = reader;
            MemoryStream cStream   = null;
            GZipStream   zipStream = null;

            if (Compressed)
            {
                var length = reader.ReadInt32();
                cStream   = new MemoryStream(reader.ReadBytes(length));
                zipStream = new GZipStream(cStream, CompressionMode.Decompress);
                reader    = new BinaryReader(zipStream);
            }

            Context = new VMContextMarshal(Version);
            Context.Deserialize(reader);

            int ents = reader.ReadInt32();

            Entities = new VMHollowGameObjectMarshal[ents];
            for (int i = 0; i < ents; i++)
            {
                var ent = new VMHollowGameObjectMarshal(Version);
                ent.Deserialize(reader);
                Entities[i] = ent;
            }

            int mtgN = reader.ReadInt32();

            MultitileGroups = new VMMultitileGroupMarshal[mtgN];
            for (int i = 0; i < mtgN; i++)
            {
                MultitileGroups[i] = new VMMultitileGroupMarshal(Version);
                MultitileGroups[i].Deserialize(reader);
            }
        }
예제 #6
0
 public virtual void Load(VMMultitileGroupMarshal input, VMContext context)
 {
     MultiTile = input.MultiTile;
     Name      = input.Name;
     Price     = input.Price;
     SalePrice = input.SalePrice;
     if (SalePrice == 0)
     {
         SalePrice = -1;
     }
     Objects = new List <VMEntity>();
     for (int i = 0; i < input.Objects.Length; i++)
     {
         var id  = input.Objects[i];
         var obj = context.VM.GetObjectById(id);
         if (obj == null)
         {
             continue;
         }
         Objects.Add(obj);
         Offsets.Add(input.Offsets[i]);
         obj.MultitileGroup = this;
     }
 }
예제 #7
0
 public VMMultitileGroup(VMMultitileGroupMarshal input, VMContext context)
 {
     Load(input, context);
 }