Пример #1
0
 public virtual void start()
 {
     mPauseFrame          = false;
     instance             = this;
     mGameFrameObject     = this.transform.gameObject;
     mApplicationConfig   = new ApplicationConfig();
     mResourceManager     = new ResourceManager();
     mBinaryUtility       = new BinaryUtility();
     mFileUtility         = new FileUtility();
     mMathUtility         = new MathUtility();
     mStringUtility       = new StringUtility();
     mUnityUtility        = new UnityUtility();
     mPluginUtility       = new PluginUtility();
     mCommandSystem       = new CommandSystem();
     mLayoutManager       = new GameLayoutManager();
     mAudioManager        = new AudioManager();
     mGameSceneManager    = new GameSceneManager();
     mCharacterManager    = new CharacterManager();
     mKeyFrameManager     = new KeyFrameManager();
     mGlobalTouchSystem   = new GlobalTouchSystem();
     mDllImportExtern     = new DllImportExtern();
     mShaderManager       = new ShaderManager();
     mDataBase            = new DataBase();
     mCameraManager       = new CameraManager();
     mLayoutPrefabManager = new LayoutPrefabManager();
     mFrameConfig         = new FrameConfig();
 }
Пример #2
0
        internal override void Init(CountersData data, Vector3 position)
        {
            beatmapObjectManager = data.BOM;
            TextHelper.CreateText(out missedText, position - new Vector3(0, 0.4f, 0));
            missedText.text      = "0";
            missedText.fontSize  = 4;
            missedText.color     = Color.white;
            missedText.alignment = TextAlignmentOptions.Center;

            GameObject labelGO = new GameObject("Counters+ | Missed Label");

            labelGO.transform.parent = transform;
            TextHelper.CreateText(out label, position);
            label.text      = "Misses";
            label.fontSize  = 3;
            label.color     = Color.white;
            label.alignment = TextAlignmentOptions.Center;

            if (settings.CustomMissTextIntegration && PluginUtility.IsPluginPresent("CustomMissText"))
            {
                UpdateCustomMissText();
            }
            else if (!PluginUtility.IsPluginPresent("CustomMissText"))
            {
                settings.CustomMissTextIntegration = false;
                settings.Save();
            }

            if (beatmapObjectManager != null)
            {
                beatmapObjectManager.noteWasMissedEvent += OnNoteMiss;
                beatmapObjectManager.noteWasCutEvent    += OnNoteCut;
            }
        }
Пример #3
0
        public override object Build(BuilderContext context)
        {
            //如果定义了类型(或简单的type或完整的constructor)
            if (context.Builtin.BuiltinType != null)
            {
                return(base.Build(context));
            }

            //如果定义了value属性,则采用该属性值作为构建结果
            if (context.Builtin.Properties.TryGet("value", out var property))
            {
                if (Parsers.Parser.CanParse(property.RawValue))
                {
                    var result = Parsers.Parser.Parse(property.RawValue, context.Builtin, "value", this.GetValueType(context.Builtin));

                    if (result != null)
                    {
                        //必须将value自身作为忽略属性项
                        var ignoredProperties = this.IgnoredProperties == null ?
                                                new HashSet <string>(new[] { "value" }, StringComparer.OrdinalIgnoreCase) :
                                                new HashSet <string>(this.IgnoredProperties.Concat(new[] { "value" }), StringComparer.OrdinalIgnoreCase);

                        //更新构件属性到目标对象的属性中
                        PluginUtility.UpdateProperties(result, context.Builtin, ignoredProperties);
                    }

                    return(result);
                }

                return(property.RawValue);
            }

            //调用基类同名方法
            return(base.Build(context));
        }
Пример #4
0
            public void Apply()
            {
                if (string.IsNullOrWhiteSpace(this.Name))
                {
                    throw new PluginException();
                }

                var type = this.Target == null?PluginUtility.GetType(this.Type) : this.Target.GetType();

                var member = type.GetMember(this.Name, BindingFlags.Static | BindingFlags.Public | BindingFlags.SetField | BindingFlags.SetProperty).FirstOrDefault();

                if (member == null)
                {
                    throw new PluginException();
                }

                if (member.IsField())
                {
                    ((FieldInfo)member).SetValue(this.Target, this.Value);
                }
                else if (member.IsProperty())
                {
                    ((PropertyInfo)member).SetValue(this.Target, this.Value);
                }
            }
Пример #5
0
        private void Bind_Plugins()
        {
            PluginUtility.LoadAllDlls();
            List <IPlugin> Plugins = PluginUtility.ListISpiderUrlPlugin;

            foreach (IPlugin item in Plugins)
            {
                this.cmbSpiderUrlPlugins.Items.Add(item.PluginName);
            }
            var publishFiles = Directory.GetFiles(PluginUtility.SpiderUrlPluginPath, "*.py");

            foreach (string str2 in publishFiles)
            {
                var fileInfo = new FileInfo(str2);
                this.cmbSpiderUrlPlugins.Items.Add(fileInfo.Name);
            }

            this.cmbSpiderUrlPlugins.Items.Insert(0, "不使用插件");
            this.cmbSpiderUrlPlugins.SelectedIndex = 0;

            Plugins = PluginUtility.ListISaveContentPlugin;
            foreach (IPlugin item in Plugins)
            {
                this.cmbSaveConentPlugins.Items.Add(item.PluginName);
            }
            this.cmbSaveConentPlugins.Items.Insert(0, "不使用插件");
            this.cmbSaveConentPlugins.SelectedIndex = 0;
            Plugins = PluginUtility.ListIPublishContentPlugin;
            foreach (IPlugin item in Plugins)
            {
                this.cmbPublishContentPlugins.Items.Add(item.PluginName);
            }
            this.cmbPublishContentPlugins.Items.Insert(0, "不使用插件");
            this.cmbPublishContentPlugins.SelectedIndex = 0;
        }
Пример #6
0
        private void PluginListForm_Load(object sender, EventArgs e)
        {
            var i = 0;

            foreach (var item in PluginUtility.PluginList())
            {
                i++;
                PluginUtility._StandardIOPlugins.Add(item.Name, item);
                richTextBox1.Text += i + "." + item.Name + " - " + PluginUtility.getPlugin_Property(item, "Version") + " " + PluginUtility.getPlugin_Property(item, "Description") + "\n";
            }
        }
Пример #7
0
 private void UpdateCustomMissText()
 {
     try
     {
         if (PluginUtility.IsPluginPresent("CustomMissText"))
         {
             label.text = String.Join(" ", CustomMissText.Plugin.allEntries[UnityEngine.Random.Range(0, CustomMissText.Plugin.allEntries.Count)]);
         }
     }
     catch { }
 }
Пример #8
0
        /// <summary>
        /// Adds an outside MonoBehaviour into the Counters+ system.
        /// <param name="model"/>The CustomCounter object.</param>
        /// <param name="defaults">Default configuration options for your custom counter.</param>
        /// <param name="restrictedPositions">Restrict your Custom Counter to any of these positions. Inputting no parameters would allow the Counter to use all that are available.</param>
        /// </summary>
        public static void Create <T>(T model, CustomConfigModel defaults = null, params ICounterPositions[] restrictedPositions) where T : CustomCounter
        {
            string modCreator = "";

            if (model.Mod != null)
            {
                modCreator = model.Mod.Name;
            }

            if (model.BSIPAMod != null)
            {
                PluginLoader.PluginMetadata pluginMetadata = PluginUtility.GetPluginMetadata(model.BSIPAMod);
                if (pluginMetadata != null)
                {
                    modCreator = pluginMetadata.Name;
                }
            }

            Plugin.Log($"Custom Counter ({model.Name}) added!", Plugin.LogInfo.Notice);

            foreach (CustomConfigModel potential in ConfigLoader.LoadCustomCounters())
            {
                if (potential.DisplayName == model.Name)
                {
                    if (potential.IsNew)
                    {
                        potential.IsNew = false;
                        potential.Save();
                    }
                    return;
                }
            }

            CustomConfigModel counter = new CustomConfigModel(model.Name)
            {
                DisplayName         = model.Name,
                SectionName         = model.SectionName,
                Enabled             = (defaults == null ? true : defaults.Enabled),
                Position            = (defaults == null ? ICounterPositions.BelowCombo : defaults.Position),
                Distance            = (defaults == null ? 2 : defaults.Distance),
                Counter             = model.Counter,
                ModCreator          = modCreator,
                IsNew               = true,
                RestrictedPositions = (restrictedPositions?.Count() == 0 || restrictedPositions == null) ? new ICounterPositions[] { } : restrictedPositions, //Thanks Viscoci for this
            };

            if (string.IsNullOrEmpty(counter.SectionName) || string.IsNullOrEmpty(counter.DisplayName))
            {
                throw new CustomCounterException("Custom Counter properties invalid. Please make sure SectionName and DisplayName are properly assigned.");
            }

            counter.Save();
        }
Пример #9
0
        public override object Build(BuilderContext context)
        {
            object result = null;

            if (context.Builtin.Properties.TryGetValue("value", out result))
            {
                PluginUtility.UpdateProperties(result, context.Builtin, this.IgnoredProperties);
            }
            else
            {
                result = base.Build(context);
            }

            return(result);
        }
Пример #10
0
        public override Type GetValueType(Builtin builtin)
        {
            var type = base.GetValueType(builtin) ??
                       PluginUtility.GetOwnerElementType(builtin.Node);

            if (type == null)
            {
                //尝试获取value属性值的类型
                if (builtin.Properties.TryGet("value", out var property) && Parsers.Parser.CanParse(property.RawValue))
                {
                    type = Parsers.Parser.GetValueType(property.RawValue, builtin);
                }
            }

            return(type);
        }
Пример #11
0
        /// <summary>
        /// Grabs a list of all Custom Counter references in CountersPlus.ini, if their mod is loaded by BSIPA.
        /// </summary>
        public static List <CustomConfigModel> LoadCustomCounters()
        {
            List <CustomConfigModel> counters = new List <CustomConfigModel>();
            FileIniDataParser        parser   = new FileIniDataParser();
            IniData data = parser.ReadFile(Path.Combine(BeatSaber.UserDataPath, "CountersPlus.ini"));

            foreach (SectionData section in data.Sections)
            {
                if (section.Keys.Any((KeyData x) => x.KeyName == "SectionName") &&
                    PluginUtility.IsPluginPresent(section.Keys["ModCreator"]))
                {
                    CustomConfigModel unloadedModel = new CustomConfigModel(section.SectionName);
                    CustomConfigModel loadedModel   = DeserializeFromConfig(unloadedModel, section.SectionName) as CustomConfigModel;
                    counters.Add(loadedModel);
                }
            }
            return(counters);
        }
Пример #12
0
        public override Type GetValueType(Builtin builtin)
        {
            //调用基类同名方法
            var type = base.GetValueType(builtin);

            if (type == null)
            {
                //尝试获取value属性值的类型
                if (builtin.Properties.TryGet("value", out var property) && Parsers.Parser.CanParse(property.RawValue))
                {
                    return(Parsers.Parser.GetValueType(property.RawValue, builtin));
                }

                //返回所有者元素类型(如果所有者如果是一个泛型集合的话,否则返回空)
                return(PluginUtility.GetOwnerElementType(builtin.Node));
            }

            return(type);
        }
Пример #13
0
        protected override void DidActivate(bool firstActivation, ActivationType type)
        {
            try
            {
                if (firstActivation)
                {
                    Instance     = this;
                    cellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First((LevelListTableCell x) => x.name == "LevelListTableCell");
                    base.DidActivate(firstActivation, type);

                    foreach (var kvp in AdvancedCounterSettings.counterUIItems)
                    {
                        counterInfos.Add(CreateFromModel(kvp.Key));
                    }
                    FileIniDataParser parser = new FileIniDataParser();
                    IniData           data   = parser.ReadFile(Path.Combine(BeatSaber.UserDataPath, "CountersPlus.ini"));
                    foreach (SectionData section in data.Sections)
                    {
                        if (section.Keys.Any((KeyData x) => x.KeyName == "SectionName") &&
                            PluginUtility.IsPluginPresent(section.Keys["ModCreator"]))
                        {
                            CustomConfigModel potential = new CustomConfigModel(section.SectionName);
                            potential = ConfigLoader.DeserializeFromConfig(potential, section.SectionName) as CustomConfigModel;

                            counterInfos.Add(new SettingsInfo()
                            {
                                Name        = potential.DisplayName,
                                Description = $"A custom counter added by {potential.ModCreator}!",
                                Model       = potential,
                                IsCustom    = true,
                            });
                        }
                    }
                    _customListTableView.didSelectCellWithIdxEvent += OnCellSelect;
                    _customListTableView.ReloadData();
                    _customListTableView.SelectCellWithIdx(0, false);
                }
            }
            catch (Exception e) {
                Plugin.Log(e.Message + e.StackTrace, Plugin.LogInfo.Fatal, "Check dependencies. If issue persists, re-install Counters+. If issue still persists, create an issue on the Counters+ GitHub.");
            }
        }
Пример #14
0
        /// <summary>
        /// Set language specific syntax
        /// </summary>
        public void SetKeywordWithExt()
        {
            if (PluginUtility._StandardIOPlugins.ContainsKey(pluginName))
            {
                StandardIO item = PluginUtility._StandardIOPlugins[pluginName];
                if (PluginUtility.getPlugin_Property(item, "SetExt") != null)
                {
                    var extProperty = PluginUtility.getPlugin_Property(item, "SetExt");

                    //spliting string with separator
                    char[]   separatorExtSet = { '|' };
                    string[] allExt          = extProperty.Split(separatorExtSet, StringSplitOptions.RemoveEmptyEntries);

                    foreach (var ext in allExt)
                    {
                        char[]   separatorExt = { '@' };
                        string[] ExtSet       = ext.Split(separatorExt, StringSplitOptions.RemoveEmptyEntries);
                        KeywordWithExt.Add(ExtSet[0], ExtSet[1]);
                    }
                }
            }
        }
Пример #15
0
 public virtual void destroy()
 {
     mLayoutPrefabManager.destroy();
     mCharacterManager.destroy();
     mGameSceneManager.destroy();
     mAudioManager.destroy();
     mLayoutManager.destroy();
     mCommandSystem.destroy();
     mKeyFrameManager.destroy();
     mGlobalTouchSystem.destroy();
     mDllImportExtern.destroy();
     mShaderManager.destroy();
     mDataBase.destroy();
     mCameraManager.destroy();
     mPluginUtility.destroy();
     mModelManager.destroy();
     mResourceManager.destroy();                 // 资源管理器必须最后销毁,作为最后的资源清理
     mLayoutPrefabManager = null;
     mResourceManager     = null;
     mBinaryUtility       = null;
     mFileUtility         = null;
     mMathUtility         = null;
     mStringUtility       = null;
     mUnityUtility        = null;
     mPluginUtility       = null;
     mCommandSystem       = null;
     mLayoutManager       = null;
     mAudioManager        = null;
     mGameSceneManager    = null;
     mCharacterManager    = null;
     mKeyFrameManager     = null;
     mGlobalTouchSystem   = null;
     mDllImportExtern     = null;
     mShaderManager       = null;
     mDataBase            = null;
     mCameraManager       = null;
     mModelManager        = null;
 }
Пример #16
0
        public override Type GetValueType(ParserContext context)
        {
            if (string.IsNullOrWhiteSpace(context.Text))
            {
                return(null);
            }

            //处理特殊路径表达式,即获取插件文件路径或目录
            if (context.Text.StartsWith("~"))
            {
                return(typeof(string));
            }

            var expression = Collections.HierarchicalExpression.Parse(PluginPath.PreparePathText(context.Text));
            var node       = context.Node.Find(expression.Path);

            if (node != null && node.ValueType != null)
            {
                return(PluginUtility.GetMemberType(expression.Accessor, node.ValueType));
            }

            return(null);
        }
Пример #17
0
        public override object Parse(ParserContext context)
        {
            if (string.IsNullOrWhiteSpace(context.Text) || string.Equals(context.Text, "null", StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }

            var member = PluginUtility.GetStaticMember(context.Text);

            if (member != null)
            {
                switch (member.MemberType)
                {
                case (MemberTypes.Field):
                    return(((FieldInfo)member).GetValue(null));

                case (MemberTypes.Property):
                    return(((PropertyInfo)member).GetValue(null, null));
                }
            }

            return(null);
        }
Пример #18
0
 private void Bind_Plugin()
 {
     PluginUtility.LoadAllDlls();
 }
Пример #19
0
        /// <summary>
        /// Load all plugins
        /// </summary>
        public void LoadPlugin()
        {
            //.....................Plugin..........System..........Code...........
            //_StandardIOPlugins = new Dictionary<string, StandardIO>();
            //ICollection<StandardIO> StandardIOPlugins = PluginLoader.LoadDevPlugins("Plugins");


            int btnPosition = 400;

            foreach (var item in PluginUtility.PluginList())
            {
                btnPosition = btnPosition + 10;

                PluginUtility._StandardIOPlugins.Add(item.Name, item);


                for (int i = 0; i < item.position.Length; i++)
                {
                    //For Toolbar
                    ToolStripButton toolstripbtn = new ToolStripButton();
                    toolstripbtn.Text   = item.Name;
                    toolstripbtn.Name   = item.Name + btnPosition;
                    toolstripbtn.Click += toolstrip_Click;

                    toolstripbtn.ForeColor             = Color.White;
                    toolstripbtn.DisplayStyle          = ToolStripItemDisplayStyle.Text;
                    toolstripbtn.Image                 = ((Image)(resources.GetObject("toolStripButton1.Image")));
                    toolstripbtn.ImageTransparentColor = System.Drawing.Color.Magenta;
                    toolstripbtn.Size = new System.Drawing.Size(23, 22);
                    //End Toolbar


                    //For Menu Item
                    ToolStripMenuItem menuItem = new ToolStripMenuItem();
                    menuItem.ForeColor = Color.Black;
                    menuItem.Text      = item.Name;
                    menuItem.Name      = item.Name + btnPosition;
                    menuItem.Click    += menuItem_Click;
                    //End Menu Item

                    //for (int i = 0; i < item.position.Length; i++)
                    //  {


                    switch (item.position[i])
                    {
                    case "File":
                        fileToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Edit":
                        editToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Format":
                        formatToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Tools":
                        toolsToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Settings":
                        settingsToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Help":
                        helpToolStripMenuItem.DropDownItems.Add(menuItem);
                        break;

                    case "Toolbar":
                        toolStrip1.Items.AddRange(new ToolStripItem[] { toolstripbtn });
                        break;
                    }

                    // }
                }
            }
        }
Пример #20
0
 public override object Parse(ParserContext context)
 {
     return(PluginUtility.BuildType(context.Text, context.Builtin));
 }
Пример #21
0
 /// <summary>
 /// 创建指定构件对应的目标对象。
 /// </summary>
 /// <param name="context">调用本方法进行构建的上下文对象,可通过该参数获取构建过程的相关设置或状态。</param>
 /// <returns>创建成功后的目标对象。</returns>
 public virtual object Build(BuilderContext context)
 {
     return(PluginUtility.BuildBuiltin(context.Builtin, context.Settings, this.IgnoredProperties));
 }
Пример #22
0
 public override object Parse(ParserContext context)
 {
     return(PluginUtility.GetType(context.Text));
 }