public void C2AcesToCondition(C3Addon addon, C2Ace ace) { try { var condition = new Condition { Category = ace.Category.ToLower(), Id = ace.ScriptName.SplitCamelCase("-"), DisplayText = ace.DisplayString, ListName = ace.ListName, Description = ace.Description, Highlight = "false", C2Id = ace.Id, Deprecated = ace.Flags.Contains("cf_deprecated").ToString().ToLower(), Trigger = ace.Flags.Contains("cf_trigger").ToString().ToLower(), FakeTrigger = ace.Flags.Contains("cf_fake_trigger").ToString().ToLower(), Static = ace.Flags.Contains("cf_static").ToString().ToLower(), Looping = ace.Flags.Contains("cf_looping").ToString().ToLower(), Invertible = (!ace.Flags.Contains("cf_not_invertible")).ToString().ToLower(), TriggerCompatible = (!ace.Flags.Contains("cf_incompatible_with_triggers")).ToString().ToLower(), }; if (ace.Params.Any()) { condition.Ace = C2TemplateHelper.ConditionAceImport(condition); condition.Language = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionLanguage, condition); condition.Code = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionCode, condition); var paramId = 0; //action params foreach (var param in ace.Params) { var paramType = ResolveParamType(param); condition = paramType == "combo" ? AceParameterHelper.Insatnce.GenerateParam(condition, $"param{paramId}", paramType, param.DefaultValue, $"param{paramId}", param.Description, param.ComboItems) : AceParameterHelper.Insatnce.GenerateParam(condition, $"param{paramId}", paramType, param.DefaultValue, $"param{paramId}", param.Description); paramId++; } } else { condition.Ace = C2TemplateHelper.ConditionAceImport(condition); condition.Language = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionLanguage, condition); condition.Code = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionCode, condition); } addon.Conditions.Add(condition.Id, condition); } catch (Exception ex) { LogManager.AddImportLogMessage($"ERROR => \n{ex.Message}"); LogManager.AddImportLogMessage($"STACK TRACE => \n{ex.StackTrace}"); return; } }
public void C2AceToExpression(C3Addon addon, C2Ace ace) { try { var exp = new Expression { Category = ace.Category.ToLower(), Id = ace.ScriptName.SplitCamelCase("-"), TranslatedName = ace.ScriptName, ReturnType = ResolveRetrunType(ace.Flags), Description = ace.Description, C2Id = ace.Id, Deprecated = ace.Flags.Contains("ef_deprecated").ToString().ToLower(), IsVariadicParameters = ace.Flags.Contains("ef_variadic_parameters").ToString().ToLower() }; if (ace.Params.Any()) { exp.Ace = C2TemplateHelper.ExpressionAceImport(exp); exp.Language = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionLanguage, exp); exp.Code = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionCode, exp); var paramId = 0; foreach (var param in ace.Params) { var paramType = ResolveParamType(param); AceParameterHelper.Insatnce.GenerateParam(exp, $"param{paramId}", paramType, param.DefaultValue, $"param{paramId}", param.Description); paramId++; } } else { exp.Ace = C2TemplateHelper.ExpressionAceImport(exp); exp.Language = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionLanguage, exp); exp.Code = TemplateCompiler.Insatnce.CompileTemplates(addon.Template.ActionCode, exp); } addon.Expressions.Add(exp.Id, exp); } catch (Exception ex) { LogManager.AddImportLogMessage($"ERROR => \n{ex.Message}"); LogManager.AddImportLogMessage($"STACK TRACE => \n{ex.StackTrace}"); return; } }
public C3Addon ConvertToC3(C2Addon c2addon) { if (c2addon == null) { throw new NullReferenceException("C2ADDON file is null"); } if (c2addon.Type == "Effect") { throw new Exception("C2 Effect Currently not supported for import"); //todo: need to develop this } //add fall back for not being able to parse type if (c2addon.Type == null) { c2addon.Properties.TryGetValue("type", out var type); switch (type) { case "plugin": c2addon.Type = "Plugin"; break; case "behavior": c2addon.Type = "Behavior"; break; case "effect": throw new Exception("C2 Effect Currently not supported for import"); default: c2addon.Type = "Plugin"; break; } } var c3addon = new C3Addon { Name = c2addon.Properties["name"], Class = c2addon.Properties["name"], Author = c2addon.Properties["author"], AddonId = c2addon.Properties["id"], Description = c2addon.Properties["description"], AddonCategory = c2addon.Properties["category"], Effect = new Effect(), IconXml = ResourceReader.Insatnce.GetResourceText("c3IDE.Templates.Files.icon.svg"), CreateDate = DateTime.Now, LastModified = DateTime.Now, MajorVersion = 1, MinorVersion = 0, RevisionVersion = 0, BuildVersion = 0 }; //add version PluginType pluginType = PluginType.SingleGlobalPlugin; switch (c2addon.Type) { case "Plugin": { if (c2addon.Properties["type"] == "object") { pluginType = PluginType.SingleGlobalPlugin; break; } pluginType = PluginType.DrawingPlugin; break; } case "Behavior": pluginType = PluginType.Behavior; break; case "Effect": pluginType = PluginType.Effect; break; } c3addon.Type = pluginType; //get templates based on type c3addon.Template = TemplateFactory.Insatnce.CreateTemplate(c3addon.Type); //compile other files AddonManager.CompileTemplates(c3addon); //add actions c3addon.Actions = new Dictionary <string, Models.Action>(); foreach (var c2Action in c2addon.Actions) { C2AcesToAction(c3addon, c2Action); } //conditions c3addon.Conditions = new Dictionary <string, Models.Condition>(); foreach (var c2Condition in c2addon.Conditions) { C2AcesToCondition(c3addon, c2Condition); } //expression c3addon.Expressions = new Dictionary <string, Models.Expression>(); foreach (var c2Expression in c2addon.Expressions) { C2AceToExpression(c3addon, c2Expression); } //third party files if (c2addon.Properties.ContainsKey("dependency")) { //todo: handle third party files } //handle plugin properties //update edit time plugin switch (c3addon.Type) { case PluginType.SingleGlobalPlugin: case PluginType.DrawingPlugin: c3addon.PluginEditTime = C2TemplateHelper.GeneratePluginJs(c2addon); break; case PluginType.Behavior: c3addon.PluginEditTime = C2TemplateHelper.GenerateBehaviorJs(c2addon); break; case PluginType.Effect: throw new NotImplementedException("effects are not implement yet"); default: throw new ArgumentOutOfRangeException(); } //use c2addon to generate text for properties return(c3addon); }