Exemplo n.º 1
0
        public void Execute(int index)
        {
            // copy storage data from unmanaged to managed
            using (var data = MemHelper.ToByteArray(Data[index], DataLength[index])) {
                // do the work, managed
                Engine.VPT.Table.TableLoader.LoadGameItem(data.Value, index, out var itemType, out var item);

                // convert result back to unmanaged
                ItemObj[index]  = MemHelper.ToIntPtr(item);
                ItemType[index] = (int)itemType;
            }
        }
Exemplo n.º 2
0
        public static Table LoadTable(string path)
        {
            var table = Table.Load(path, false);

            var job       = new GameItemJob(table.Data.NumGameItems);
            var gameItems = Engine.VPT.Table.TableLoader.ReadGameItems(path, table.Data.NumGameItems);

            for (var i = 0; i < table.Data.NumGameItems; i++)
            {
                job.Data[i]       = MemHelper.FromByteArray(gameItems[i]);
                job.DataLength[i] = gameItems[i].Length;
            }

            // parse threaded
            var handle = job.Schedule(table.Data.NumGameItems, 64);

            handle.Complete();

            // update table with results
            for (var i = 0; i < table.Data.NumGameItems; i++)
            {
                if (job.ItemObj[i].ToInt32() > 0)
                {
                    var objHandle = (GCHandle)job.ItemObj[i];
                    switch ((ItemType)job.ItemType[i])
                    {
                    case ItemType.Bumper: {
                        table.Add(objHandle.Target as Bumper);
                        break;
                    }

                    case ItemType.Decal: {
                        table.Add(objHandle.Target as Decal);
                        break;
                    }

                    case ItemType.DispReel: {
                        table.Add(objHandle.Target as DispReel);
                        break;
                    }

                    case ItemType.Flasher: {
                        table.Add(objHandle.Target as Flasher);
                        break;
                    }

                    case ItemType.Flipper: {
                        table.Add(objHandle.Target as Flipper);
                        break;
                    }

                    case ItemType.Gate: {
                        table.Add(objHandle.Target as Gate);
                        break;
                    }

                    case ItemType.HitTarget: {
                        table.Add(objHandle.Target as HitTarget);
                        break;
                    }

                    case ItemType.Kicker: {
                        table.Add(objHandle.Target as Kicker);
                        break;
                    }

                    case ItemType.Light: {
                        table.Add(objHandle.Target as Light);
                        break;
                    }

                    case ItemType.LightSeq: {
                        table.Add(objHandle.Target as LightSeq);
                        break;
                    }

                    case ItemType.Plunger: {
                        table.Add(objHandle.Target as Plunger);
                        break;
                    }

                    case ItemType.Primitive: {
                        table.Add(objHandle.Target as Primitive);
                        break;
                    }

                    case ItemType.Ramp: {
                        table.Add(objHandle.Target as Ramp);
                        break;
                    }

                    case ItemType.Rubber: {
                        table.Add(objHandle.Target as Rubber);
                        break;
                    }

                    case ItemType.Spinner: {
                        table.Add(objHandle.Target as Spinner);
                        break;
                    }

                    case ItemType.Surface: {
                        table.Add(objHandle.Target as Surface);
                        break;
                    }

                    case ItemType.TextBox: {
                        table.Add(objHandle.Target as TextBox);
                        break;
                    }

                    case ItemType.Timer: {
                        table.Add(objHandle.Target as Timer);
                        break;
                    }

                    case ItemType.Trigger: {
                        table.Add(objHandle.Target as Trigger);
                        break;
                    }

                    default:
                        throw new ArgumentException("Unknown item type " + (ItemType)job.ItemType[i] + ".");
                    }
                }
            }
            table.SetupPlayfieldMesh();
            job.Dispose();

            return(table);
        }