private void LoadConfiguration()
        {
#if DEBUG
            ConsoleController.ShowMessage("On load en");
#endif
            if (EnhancementBlockController.Instance.PMI == null)
            {
                return;
            }

            foreach (var blockinfo in EnhancementBlockController.Instance.PMI.Blocks)
            {
                if (blockinfo.Guid == BB.Guid)
                {
                    XDataHolder bd = blockinfo.Data;

                    try { BlockDataLoadEvent(bd); } catch { };

                    LoadConfiguration(bd);

                    //foreach (MapperType item in myMapperTypes)
                    //{
                    //    string str = string.Concat(MapperType.XDATA_PREFIX + item.Key);
                    //    XData xDatum = bd.Read(str);
                    //    if (xDatum != null || !StatMaster.isPaste)
                    //    {
                    //        item.DeSerialize((xDatum ?? item.defaultData));
                    //    }
                    //}

                    break;
                }
            }
        }
예제 #2
0
        public override void OnLoad(XDataHolder data)
        {
            base.OnLoad(data);

            Script.DeSerialize(data.Read("bmt-" + Script.Key));
            CheckScript(Script.Value);

            var newPio = data.ReadAll().Where(x => x.Key.StartsWith("bmt-pio")).Select(x =>
            {
                var key = new MExtKey(x.Key.Substring(4), x.Key.Substring(4), KeyCode.None, BlockBehaviour, true);
                key.DeSerialize(x);
                if (!long.TryParse(key.Key.Replace("pio", ""), out long id))
                {
                    return(null);
                }
                return(new KeyValuePair <long, MExtKey>?(new KeyValuePair <long, MExtKey>(id, key)));
            }).Where(x => x != null).ToDictionary(x => x.Value.Key, x => x.Value.Value);

            // merge into old pio because we don't want to replace MExtKey every time
            BlockBehaviour.KeyList.Clear();
            foreach (var kp in newPio)
            {
                if (PIO.ContainsKey(kp.Key))
                {
                    PIO[kp.Key].CopyFrom(kp.Value);
                    BlockBehaviour.KeyList.Add(PIO[kp.Key]);
                }
                else
                {
                    PIO[kp.Key] = kp.Value;
                    BlockBehaviour.KeyList.Add(kp.Value);
                }
            }
        }
예제 #3
0
        private void LoadConfiguration()
        {
            if (Controller.Instance.MI == null)
            {
                return;
            }

            foreach (var blockinfo in Controller.Instance.MI.Blocks)
            {
                if (blockinfo.Guid == BB.Guid)
                {
                    XDataHolder bd = blockinfo.BlockData;

                    try { BlockDataLoadEvent(bd); } catch { };

                    LoadConfiguration(bd);

                    foreach (MapperType item in myMapperTypes)
                    {
                        string str    = string.Concat(MapperType.XDATA_PREFIX + item.Key);
                        XData  xDatum = bd.Read(str);
                        if (xDatum != null || !StatMaster.isPaste)
                        {
                            item.DeSerialize((xDatum == null ? item.defaultData : xDatum));
                        }
                    }

                    break;
                }
            }
        }
 public override void LoadConfiguration(XDataHolder BlockData)
 {
     if (BlockData.HasKey("bmt-" + "CameraTarget"))
     {
         SaveTargetToDict(BlockData.ReadInt("bmt-" + "CameraTarget"));
     }
 }
예제 #5
0
        public override void OnLoad(XDataHolder stream)
        {
            LoadMapperValues(stream);

            // "bmt-" prefix is necessary to enable copying&pasting of actions, keys that don't have it are deleted upon copying
            // String can be empty when it shouldn't be because of a bug in Undosystem, so ignore that.
            if (stream.HasKey("bmt-automatron-actions") && stream.ReadString("bmt-automatron-actions") != "")
            {
                // Clear actions so they don't get duplicated if OnLoad is called by the UndoSystem
                actions.Clear();

                DeserializeActions(stream.ReadString("bmt-automatron-actions"));
            }
            // Since earlier versions of the Automatron didn't use the prefix, also check for the presence of the key without
            // in order to preserve backwards-compatibility
            else if (stream.HasKey("automatron-actions") && stream.ReadString("automatron-actions") != "")
            {
                // Clear actions so they don't get duplicated if OnLoad is called by the UndoSystem
                actions.Clear();

                DeserializeActions(stream.ReadString("automatron-actions"));
            }
            else
            {
                Debug.Log("OnLoad called without action data.");
            }
        }
 public override void SaveConfiguration(XDataHolder BlockData)
 {
     if (Machine.Active().GetComponent <TargetScript>().previousTargetDic.ContainsKey(selfIndex))
     {
         BlockData.Write("bmt-" + "CameraTarget", Machine.Active().GetComponent <TargetScript>().previousTargetDic[selfIndex]);
     }
 }
예제 #7
0
        private void SaveConfiguration(MachineInfo Mi)
        {
            BesiegeConsoleController.ShowMessage("On save en");


            BesiegeConsoleController.ShowMessage((Mi == null).ToString());
            if (Mi == null)
            {
                return;
            }

            foreach (var blockinfo in Mi.Blocks)
            {
                if (blockinfo.Guid == BB.Guid)
                {
                    XDataHolder bd = blockinfo.BlockData;

                    try { BlockDataSaveEvent(bd); } catch { }

                    SaveConfiguration(bd);

                    bool flag = (!StatMaster.SavingXML ? false : OptionsMaster.BesiegeConfig.ExcludeDefaultSaveData);

                    foreach (MapperType item in myMapperTypes)
                    {
                        if (!flag)
                        {
                            bd.Write(item.Serialize());
                        }
                    }

                    break;
                }
            }
        }
예제 #8
0
        public void AfterEdit(MapperType mapper)
        {
            // We cannot use undo system for PIOs, because they are dymanic
            // trying to save them will result in exception on 'undo' while
            // getting mapper type inside OnEditField
            if (mapper is MCustom <string> )
            {
                BlockMapper.OnEditField(BlockBehaviour, mapper);
            }
            else
            {
                Player localPlayer = Player.GetLocalPlayer();
                if (localPlayer == null || localPlayer.IsHost)
                {
                    return;
                }

                var tempdata = new XDataHolder();
                BlockBehaviour.OnSave(tempdata);
                tempdata.Encode(out byte[] dataBytes);

                var message = ModContext.CpuInfoMessage.CreateMessage(
                    this.BlockBehaviour,
                    dataBytes
                    );
                ModNetworking.SendToHost(message);
            }
        }
        private void SaveConfiguration(PlayerMachineInfo pmi)
        {
#if DEBUG
            ConsoleController.ShowMessage("On save en");
#endif

            if (pmi == null)
            {
                return;
            }

            foreach (var blockinfo in pmi.Blocks)
            {
                if (blockinfo.Guid == BB.Guid)
                {
                    XDataHolder bd = blockinfo.Data;

                    try { BlockDataSaveEvent(bd); } catch { }

                    SaveConfiguration(bd);

                    //bool flag = (!StatMaster.SavingXML ? false : OptionsMaster.BesiegeConfig.ExcludeDefaultSaveData);

                    //foreach (MapperType item in myMapperTypes)
                    //{
                    //    if (!flag)
                    //    {
                    //        bd.Write(item.Serialize());
                    //    }
                    //}

                    break;
                }
            }
        }
예제 #10
0
 public override void Apply(XDataHolder input)
 {
     if (input.HasKey("BlockID"))
     {
         var blockType = input.ReadInt("BlockID");
         AddPiece.Instance?.SetBlockType((BlockType)blockType);
     }
 }
예제 #11
0
 public override void OnLoad(XDataHolder data)
 {
     LoadMapperValues(data);
     if (data.WasSimulationStarted)
     {
         return;
     }
 }
예제 #12
0
 public override void Apply(XDataHolder input)
 {
     AddPiece.PlacementOffset.position = input.ReadVector3("Position");
     AddPiece.PlacementOffset.rotation =
         Quaternion.Euler(
             input.ReadVector3("Rotation")
             );
 }
예제 #13
0
        public void AfterEdit_ServerRecv(byte[] data)
        {
            var xholder = new XDataHolder();

            xholder.Decode(data, 0);
            BlockBehaviour.OnLoad(xholder, CopyMode.All);
            //BlockBehaviour.ParentMachine.UndoSystem.EditBlockField(BlockBehaviour.Guid, xdata, xdata);
        }
 public override void OnSave(XDataHolder data)
 {
     SpawnChild();
     SaveMapperValues(data);
     if (blockToSpawn != null)
     {
         blockToSpawn.OnSave(data);
     }
 }
예제 #15
0
 public override void OnSave(XDataHolder data)
 {
     base.OnSave(data);
     data.Write(Script.Serialize());
     foreach (var key in PIO.Values)
     {
         data.Write(key.Serialize());
     }
 }
예제 #16
0
 public override void Apply(XDataHolder input)
 {
     input.Write(_defaultInput);
     foreach (var uiContainer in _containers)
     {
         if (_defaultInput.HasKey(uiContainer.Title))
         {
             uiContainer.Display =
                 _defaultInput.ReadBool(uiContainer.Title);
         }
     }
 }
 public override void OnLoad(XDataHolder data)
 {
     LoadMapperValues(data);
     if (blockToSpawn == null && !FunnyMode.IsActive)
     {
         SpawnChild();
     }
     if (blockToSpawn != null && !StatMaster.isSimulating)
     {
         blockToSpawn.gameObject.SetActive(true);
         blockToSpawn.OnLoad(data);
         blockToSpawn.gameObject.SetActive(false);
     }
 }
예제 #18
0
 public PluginData(
     string name,
     Plugin plugin,
     XDataHolder input,
     UIContainer container,
     ValueInfo valueInfo
     )
 {
     Name        = name;
     Plugin      = plugin;
     Input       = input;
     UIContainer = container;
     ValueInfo   = valueInfo;
 }
 protected override void OnSimulateFixedUpdate()
 {
     if (countdown > 0)
     {
         countdown -= Time.fixedDeltaTime;
     }
     if (Key1.IsDown && countdown <= 0)
     {
         GameObject Nlock;
         if (FunnyMode.IsActive)
         {
             Nlock = (GameObject)Instantiate(funEnumerator.Current.Value.gameObject,
                                             this.transform.position + this.transform.forward, this.transform.rotation);
             if (!funEnumerator.MoveNext())
             {
                 funEnumerator = PrefabMaster.BlockPrefabs.GetEnumerator();
                 funEnumerator.MoveNext();
             }
         }
         else
         {
             if (blockToSpawn == null)
             {
                 SpawnChild();
             }
             Nlock = (GameObject)Instantiate(blockToSpawn.gameObject,
                                             this.transform.position + this.transform.forward, this.transform.rotation);
             Nlock.SetActive(true);
             XDataHolder xDataHolder = new XDataHolder {
                 WasSimulationStarted = true
             };
             blockToSpawn.OnSave(xDataHolder);
             Nlock.GetComponent <BlockBehaviour>().OnLoad(xDataHolder);
         }
         Nlock.transform.localScale *= 生成大小.Value;
         Nlock.GetComponent <Rigidbody>().isKinematic = false;
         if (继承速度.IsActive)
         {
             Nlock.GetComponent <Rigidbody>().velocity = this.rigidbody.velocity;
         }
         Nlock.transform.SetParent(Machine.Active().SimulationMachine);
         Audio.volume = 0.05f * 10 / Vector3.Distance(this.transform.position, Camera.main.transform.position);
         Audio.Play();
         countdown = 生成间隔.Value;
     }
 }
예제 #20
0
 public void UpdateDataAndUI(Plugin plugin, XDataHolder holder)
 {
     for (int i = 0; i < _plugins.Count; i++)
     {
         if (_plugins[i].Plugin != plugin)
         {
             continue;
         }
         holder.Write(_plugins[i].Input);
         var uiObjects = GetObjects(
             plugin,
             _plugins[i].Input,
             _plugins[i].ValueInfo
             );
         _plugins[i].UIContainer.UIObjects = uiObjects;
     }
 }
        public override void Trigger(AutomatronBlock automatron)
        {
            try
            {
                valueID = int.Parse(blockID);
            } catch { valueID = 0; }
            for (int i = 0; i < 9; i++)
            {
                try
                {
                    fValues[i / 3][i % 3] = float.Parse(sValues[i]);
                } catch { fValues[i / 3][i % 3] = 0; }
            }

            if (valueID == 0)
            {
                fValues[(int)value.pos][(int)dim.z] += 0.5f;
            }

            GameObject Nlock;

            if (blockToSpawn == null)
            {
                SpawnChild();
            }

            Nlock = (GameObject)GameObject.Instantiate(blockToSpawn.gameObject);

            var st = Nlock.transform;
            var at = automatron.transform;

            st.parent        = at;
            st.localPosition = fValues[(int)value.pos];
            st.localRotation = Quaternion.Euler(fValues[(int)value.rot]);
            st.localScale    = fValues[(int)value.scale];
            Nlock.SetActive(true);
            XDataHolder xDataHolder = new XDataHolder {
                WasSimulationStarted = true
            };

            blockToSpawn.OnSave(xDataHolder);
            Nlock.GetComponent <BlockBehaviour>().OnLoad(xDataHolder);
            Nlock.GetComponent <Rigidbody>().isKinematic = false;
            Nlock.transform.SetParent(Machine.Active().SimulationMachine);
        }
 /// <summary>
 /// 加载配置
 /// </summary>
 public virtual void LoadConfiguration(XDataHolder BlockData)
 {
 }
 protected override void OnSimulateFixedUpdate()
 {
     if (countdown > 0)
     {
         countdown -= Time.fixedDeltaTime;
     }
     if (Key1.IsDown && countdown <= 0)
     {
         GameObject Nlock;
         if (FunnyMode.IsActive)
         {
             Nlock = (GameObject)Instantiate(funEnumerator.Current.Value.gameObject,
                 this.transform.position + this.transform.forward, this.transform.rotation);
             if (!funEnumerator.MoveNext())
             {
                 funEnumerator = PrefabMaster.BlockPrefabs.GetEnumerator();
                 funEnumerator.MoveNext();
             }
         }
         else
         {
             if (blockToSpawn == null)
             {
                 SpawnChild();
             }
             Nlock = (GameObject)Instantiate(blockToSpawn.gameObject,
             transform.position + this.transform.forward, this.transform.rotation);
             Nlock.SetActive(true);
             XDataHolder xDataHolder = new XDataHolder { WasSimulationStarted = true };
             blockToSpawn.OnSave(xDataHolder);
             Nlock.GetComponent<BlockBehaviour>().OnLoad(xDataHolder);
         }
         Nlock.transform.localScale *= 生成大小.Value;
         Nlock.GetComponent<Rigidbody>().isKinematic = false;
         if (继承速度.IsActive) { Nlock.GetComponent<Rigidbody>().velocity = this.rigidbody.velocity; }
         Nlock.transform.SetParent(Machine.Active().SimulationMachine);
         Audio.volume = 0.05f * 10 / Vector3.Distance(this.transform.position, Camera.main.transform.position);
         Audio.Play();
         countdown = 生成间隔.Value;
     }
 }
예제 #24
0
 /// <summary>
 /// Apply the input for the UI
 /// </summary>
 /// <param name="input">
 /// The input in the format specified by <see cref="DefaultInput"/>
 /// </param>
 public abstract void Apply(XDataHolder input);
 public override void OnLoad(XDataHolder data)
 {
     LoadMapperValues(data);
     if (data.WasSimulationStarted) return;
 }
예제 #26
0
 public override void OnLoad(XDataHolder stream)
 {
     base.OnLoad(stream);
     LoadMapperValues(stream);
 }
예제 #27
0
 public override void OnSave(XDataHolder stream)
 {
     base.OnSave(stream);
     SaveMapperValues(stream);
 }
 public override void OnSave(XDataHolder data)
 {
     SaveMapperValues(data);
 }
예제 #29
0
 public override void OnSave(XDataHolder data)
 {
     SaveMapperValues(data);
 }
        public override void Apply(XDataHolder input)
        {
            var buildingBlocks = Machine.Active()?.BuildingBlocks;
            var machine        = Machine.Active().transform;

            if (buildingBlocks == null)
            {
                return;
            }
            var position = input.ReadVector3("Position");
            var rotation = Quaternion.Euler(input.ReadVector3("Rotation"));
            var scale    = input.ReadVector3("Scale");

            var translator = new GameObject().transform;

            translator.position   = machine.TransformPoint(position);
            translator.rotation   = machine.rotation * rotation;
            translator.localScale = machine.TransformVector(scale);

            Vector3 Translate(Vector3 pos)
            {
                return(machine.InverseTransformPoint(
                           translator.TransformPoint(
                               pos
                               )
                           ));
            }

            foreach (var block in buildingBlocks)
            {
                var     dragged = block as GenericDraggedBlock;
                Vector3 start = Vector3.zero, end = Vector3.zero;
                if (dragged)
                {
                    start = dragged.startPoint.position;
                    end   = dragged.endPoint.position;

                    start = Translate(start);
                    end   = Translate(end);
                }


                var transform = block.transform;
                block.SetPosition(Translate(transform.position));
                block.SetRotation(rotation * transform.rotation);
                block.SetScale(
                    transform.InverseTransformVector(
                        Vector3.Scale(
                            transform.TransformVector(
                                transform.localScale
                                ),
                            scale
                            )
                        )
                    );

                if (dragged)
                {
                    var parentEuler = dragged.ParentMachine
                                      .boundingBoxController
                                      .transform
                                      .eulerAngles;

                    dragged.SetPositionsGlobal(
                        start,
                        dragged.startPoint.eulerAngles - parentEuler,
                        end,
                        dragged.startPoint.eulerAngles - parentEuler,
                        true
                        );
                }
            }
        }
예제 #31
0
        public static Configuration FormatXDataToConfig(Configuration config = null)
        {
            XDataHolder xDataHolder = Modding.Configuration.GetData();
            bool        reWrite     = true;
            bool        needWrite   = false;

            if (config == null)
            {
                reWrite   = false;
                needWrite = true;
                config    = new Configuration();
            }

            for (int i = 0; i < Propertises.Count; i++)
            {
                var value = Propertises[i];

                if (value is Propertise <int> )
                {
                    value = getValue(value as Propertise <int>);
                }
                else if (value is Propertise <bool> )
                {
                    value = getValue(value as Propertise <bool>);
                }
                else if (value is Propertise <float> )
                {
                    value = getValue(value as Propertise <float>);
                }
                else if (value is Propertise <string> )
                {
                    value = getValue(value as Propertise <string>);
                }
                else if (value is Propertise <Vector3> )
                {
                    value = getValue(value as Propertise <Vector3>);
                }
                Propertises[i] = value;
            }

            if (needWrite)
            {
                Modding.Configuration.Save();
            }

            return(config);

            Propertise <T> getValue <T>(Propertise <T> propertise)
            {
                var key          = propertise.Key;
                var defaultValue = propertise.Value;

                if (xDataHolder.HasKey(key) && !reWrite)
                {
                    defaultValue = (T)Convert.ChangeType(typeSpecialAction[typeof(T)](xDataHolder, key), typeof(T));
                }
                else
                {
                    xDataHolder.Write(key, defaultValue);
                    needWrite = true;
                }

                return(new Propertise <T>(key, defaultValue));
            }
        }
예제 #32
0
        private UIObject[] GetObjects(
            Plugin plugin,
            XDataHolder input,
            ValueInfo valueInfo
            )
        {
            ///Create UI elements for each input
            var uiObjects = new List <UIObject>();

            foreach (var data in input.ReadAll())
            {
                switch (data.Type)
                {
                case "Single":
                    uiObjects.Add(new UIObject(data.Key));
                    uiObjects.Add(
                        new UIObject(
                            data.RawValue,
                            null,
                            (single) =>
                    {
                        input.Write(data.Key, (float)single);
                        valueInfo.ValueChanged = true;
                    },
                            true
                            )
                        );
                    break;

                case "Integer":
                    uiObjects.Add(new UIObject(data.Key));
                    uiObjects.Add(
                        new UIObject(
                            (float)(int)data.RawValue,
                            null,
                            (single) =>
                    {
                        input.Write(data.Key, (int)(float)single);
                        valueInfo.ValueChanged = true;
                    },
                            true
                            )
                        );
                    break;

                case "Vector3":
                    void Put(object single, int i)
                    {
                        var v3 = input.ReadVector3(data.Key);

                        v3[i] = (float)single;
                        input.Write(data.Key, v3);
                        valueInfo.ValueChanged = true;
                    }

                    uiObjects.Add(new UIObject(data.Key));
                    uiObjects.Add(
                        new UIObject(
                            ((Vector3)data.RawValue).x,
                            null,
                            f => Put(f, 0)
                            )
                        );
                    uiObjects.Add(
                        new UIObject(
                            ((Vector3)data.RawValue).y,
                            null,
                            f => Put(f, 1)
                            )
                        );
                    uiObjects.Add(
                        new UIObject(
                            ((Vector3)data.RawValue).z,
                            null,
                            f => Put(f, 2),
                            true
                            )
                        );
                    break;

                case "Boolean":
                    uiObjects.Add(new UIObject(data.Key));
                    uiObjects.Add(
                        new UIObject(
                            data.RawValue,
                            null,
                            (boolean) =>
                    {
                        input.Write(data.Key, (bool)boolean);
                        valueInfo.ValueChanged = true;
                    },
                            true
                            )
                        );
                    break;
                }
            }

            if (uiObjects.Count > 0)
            {
                var lastObj = uiObjects[uiObjects.Count - 1];
                lastObj.NewLine = true;
                uiObjects[uiObjects.Count - 1] = lastObj;
            }

            ///Create global UI elements
            ApplyRule applyRule =
                (ApplyRule)((int)plugin.ApplyRule % (int)ApplyRule.NoEnable);


            if (applyRule == ApplyRule.OnApply)
            {
                uiObjects.Add(
                    new UIObject(
                        null,
                        "Apply",
                        (b) =>
                {
                    valueInfo.WasApplied |=
                        b is bool?(bool)b: false;
                }
                        )
                    );
            }

            if ((plugin.ApplyRule & ApplyRule.NoEnable) == ApplyRule.Disabled)
            {
                uiObjects.Add(
                    new UIObject(
                        "Enabled:"
                        )
                    );
                uiObjects.Add(
                    new UIObject(
                        plugin.Enabled,
                        null,
                        (b) =>
                {
                    plugin.Enabled = b is bool
                                     ?(bool)b
                                     : plugin.Enabled;
                    valueInfo.ValueChanged = true;
                    valueInfo.WasApplied   = true;
                },
                        true
                        )
                    );
            }

            return(uiObjects.ToArray());
        }
예제 #33
0
 public override void Apply(XDataHolder input)
 {
     _scale = input.ReadVector3("Scale");
 }
 public override void OnLoad(XDataHolder data)
 {
     LoadMapperValues(data);
     if (blockToSpawn == null && !FunnyMode.IsActive)
     {
         SpawnChild();
     }
     if (blockToSpawn != null && !StatMaster.isSimulating)
     {
         blockToSpawn.gameObject.SetActive(true);
         blockToSpawn.OnLoad(data);
         blockToSpawn.gameObject.SetActive(false);
     }
 }
 public override void OnSave(XDataHolder data)
 {
     SpawnChild();
     SaveMapperValues(data);
     if (blockToSpawn != null)
     {
         blockToSpawn.OnSave(data);
     }
 }