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(); }
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; } }
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)); }
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); } }
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; }
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"; } }
private void UpdateCustomMissText() { try { if (PluginUtility.IsPluginPresent("CustomMissText")) { label.text = String.Join(" ", CustomMissText.Plugin.allEntries[UnityEngine.Random.Range(0, CustomMissText.Plugin.allEntries.Count)]); } } catch { } }
/// <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(); }
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); }
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); }
/// <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); }
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); }
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."); } }
/// <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]); } } } }
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; }
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); }
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); }
private void Bind_Plugin() { PluginUtility.LoadAllDlls(); }
/// <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; } // } } } }
public override object Parse(ParserContext context) { return(PluginUtility.BuildType(context.Text, context.Builtin)); }
/// <summary> /// 创建指定构件对应的目标对象。 /// </summary> /// <param name="context">调用本方法进行构建的上下文对象,可通过该参数获取构建过程的相关设置或状态。</param> /// <returns>创建成功后的目标对象。</returns> public virtual object Build(BuilderContext context) { return(PluginUtility.BuildBuiltin(context.Builtin, context.Settings, this.IgnoredProperties)); }
public override object Parse(ParserContext context) { return(PluginUtility.GetType(context.Text)); }