private void AddActionCommand(SmartEvent obj) { int?sourceId = _container.Resolve <ISmartTypeListProvider>().Get(SmartType.SmartSource, data => { if (data.IsOnlyTarget) { return(false); } return(data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)); } ); if (!sourceId.HasValue) { return; } int?actionId = _container.Resolve <ISmartTypeListProvider>().Get(SmartType.SmartAction, data => { return(data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)); }); if (!actionId.HasValue) { return; } var actionData = SmartDataManager.GetInstance().GetRawData(SmartType.SmartAction, actionId.Value); SmartTarget target = null; if (actionData.UsesTarget) { int?targetId = _container.Resolve <ISmartTypeListProvider>().Get(SmartType.SmartTarget, data => { return((data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)) && actionData.Targets.Intersect(data.Types).Any()); }); if (!targetId.HasValue) { return; } target = _container.Resolve <ISmartFactory>().TargetFactory(targetId.Value); } else { target = _container.Resolve <ISmartFactory>().TargetFactory(0); } SmartSource source = _container.Resolve <ISmartFactory>().SourceFactory(sourceId.Value); SmartAction ev = _container.Resolve <ISmartFactory>().ActionFactory(actionId.Value, source, target); EditActionCommand(ev); obj.Actions.Add(ev); }
public SourceTargetConditionsChanged(SmartSource source, IList <ICondition>?old, IList <ICondition>?newConds) { this.source = source; this.old = old; this.newConds = newConds; this.readable = source.Readable.RemoveTags(); }
public void UpdateSource(SmartSource smartSource, int id) { if (smartSource.Id == id) { return; } SmartGenericJsonData raw = smartDataManager.GetRawData(SmartType.SmartSource, id); SetParameterObjects(smartSource, raw, true); }
public SmartAction ActionFactory(int id, SmartSource source, SmartTarget target) { if (!smartDataManager.Contains(SmartType.SmartAction, id)) { throw new NullReferenceException("No data for action id " + id); } SmartAction action = new SmartAction(id, source, target); SetParameterObjects(action, smartDataManager.GetRawData(SmartType.SmartAction, id)); return(action); }
private SmartSource SourceFactory(ISmartScriptLine line) { SmartSource source = SourceFactory(line.SourceType); source.Condition.SetValue(line.SourceConditionId); for (int i = 0; i < SmartSource.SmartSourceParametersCount; ++i) { source.SetParameter(i, GetSourceParameter(line, i)); } return(source); }
public SmartSource SourceFactory(int id) { if (!smartDataManager.Contains(SmartType.SmartSource, id)) { throw new NullReferenceException("No data for source id " + id); } SmartSource source = new SmartSource(id); SetParameterObjects(source, smartDataManager.GetRawData(SmartType.SmartSource, id)); return(source); }
private SmartSource SourceFactory(ISmartScriptLine line) { SmartSource source = SourceFactory(line.SourceType); source.Condition.Value = line.SourceConditionId; for (var i = 0; i < SmartSource.SmartSourceParametersCount; ++i) { source.GetParameter(i).Value = line.GetSourceParam(i); } return(source); }
public SmartAction ActionFactory(ISmartScriptLine line) { SmartSource source = SourceFactory(line); SmartTarget target = TargetFactory(line); SmartAction action = ActionFactory(line.ActionType, source, target); for (int i = 0; i < SmartAction.SmartActionParametersCount; ++i) { action.SetParameter(i, GetActionParameter(line, i)); } return(action); }
public SmartAction ActionFactory(int id, SmartSource source, SmartTarget target) { if (!smartDataManager.Contains(SmartType.SmartAction, id)) { throw new InvalidSmartActionException(id); } SmartAction action = new(id, source, target); var raw = smartDataManager.GetRawData(SmartType.SmartAction, id); action.CommentParameter.IsUsed = raw.CommentField != null; action.CommentParameter.Name = raw.CommentField ?? "Comment"; SetParameterObjects(action, raw); UpdateTargetPositionVisibility(action.Target); return(action); }
public void UpdateSource(SmartSource smartSource, int id) { if (smartSource.Id == id) { return; } SmartGenericJsonData raw = smartDataManager.GetRawData(SmartType.SmartSource, id); if (raw.ReplaceWithId.HasValue) { UpdateSource(smartSource, raw.ReplaceWithId.Value); return; } SetParameterObjects(smartSource, raw, true); }
public SmartAction ActionFactory(int id, SmartSource source, SmartTarget target) { if (!smartDataManager.Contains(SmartType.SmartAction, id)) { throw new NullReferenceException("No data for action id " + id); } SmartAction action = new(id, source, target); var raw = smartDataManager.GetRawData(SmartType.SmartAction, id); action.CommentParameter.IsUsed = id == SmartConstants.ActionComment; foreach (var t in action.Target.Position) { t.IsUsed = raw.UsesTargetPosition; } SetParameterObjects(action, raw); return(action); }
public SmartAction ActionFactory(ISmartScriptLine line) { SmartSource source = SourceFactory(line); SmartTarget target = TargetFactory(line); var raw = smartDataManager.GetRawData(SmartType.SmartAction, line.ActionType); if (raw.ImplicitSource != null) { UpdateSource(source, smartDataManager.GetDataByName(SmartType.SmartSource, raw.ImplicitSource).Id); } SmartAction action = ActionFactory(line.ActionType, source, target); for (var i = 0; i < SmartAction.SmartActionParametersCount; ++i) { action.GetParameter(i).Value = line.GetActionParam(i); } return(action); }
public SmartAction ActionFactory(ISmartScriptLine line) { SmartSource source = SourceFactory(line); SmartTarget target = TargetFactory(line); var raw = smartDataManager.GetRawData(SmartType.SmartAction, line.ActionType); if (raw.ImplicitSource != null) { UpdateSource(source, smartDataManager.GetDataByName(SmartType.SmartSource, raw.ImplicitSource).Id); } SmartAction action = ActionFactory(line.ActionType, source, target); for (var i = 0; i < SmartAction.SmartActionParametersCount; ++i) { action.GetParameter(i).Value = line.GetActionParam(i); } if (raw.SourceStoreInAction) { try { UpdateSource(source, smartDataManager.GetRawData(SmartType.SmartSource, (int)action.GetParameter(2).Value).Id); source.GetParameter(0).Value = action.GetParameter(3).Value; source.GetParameter(1).Value = action.GetParameter(4).Value; source.GetParameter(2).Value = action.GetParameter(5).Value; action.GetParameter(2).Value = 0; action.GetParameter(3).Value = 0; action.GetParameter(4).Value = 0; action.GetParameter(5).Value = 0; } catch (Exception) { } } return(action); }
public InspectionResult?Inspect(SmartSource a) { SmartEvent? parent = a.Parent?.Parent; SmartScriptBase?script = parent?.Parent; if (parent == null || script == null) { return(null); } if (script.SourceType == SmartScriptType.TimedActionList) { return(null); } if (parent.Id == SmartConstants.EventLink) { return(null); } var parentEventData = script.GetEventData(parent); if (parentEventData.Invoker != null) { return(null); } var isSource = a.Parent != null && a.Parent.Source == a; return(new InspectionResult() { Line = a.Parent?.LineId ?? -1, Severity = DiagnosticSeverity.Error, Message = "Used " + (isSource ? "source" : "target") + " requires action invoker, but event `" + parentEventData.NameReadable + "` doesn't provide one." }); }
private void SmartSourceOnConditionsChanged(SmartSource source, IList <ICondition>?old, IList <ICondition>?nnew) { PushAction(new SourceTargetConditionsChanged(source, old, nnew)); }
public InspectionResult?Inspect(SmartSource e) => throw new Exception("Not supported yet");
private void AddActionCommand(SmartEvent obj) { int?sourceId = smartTypeListProvider.Get(SmartType.SmartSource, data => { if (data.IsOnlyTarget) { return(false); } return(data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)); } ); if (!sourceId.HasValue) { return; } int?actionId = smartTypeListProvider.Get(SmartType.SmartAction, data => { return((data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)) && (!data.ImplicitSource || sourceId.Value <= 1 /* @todo: remove this const: this is none or self */)); }); if (!actionId.HasValue) { return; } var actionData = SmartDataManager.GetInstance().GetRawData(SmartType.SmartAction, actionId.Value); SmartTarget target = null; if (actionData.UsesTarget && !actionData.TargetIsSource) { int?targetId = smartTypeListProvider.Get(SmartType.SmartTarget, data => { return((data.UsableWithEventTypes == null || data.UsableWithEventTypes.Contains(script.SourceType)) && (actionData.Targets == null || actionData.Targets.Intersect(data.Types).Any())); }); if (!targetId.HasValue) { return; } target = smartFactory.TargetFactory(targetId.Value); } else if (actionData.TargetIsSource) { target = smartFactory.TargetFactory(sourceId.Value); sourceId = 0; } else { target = smartFactory.TargetFactory(0); } if (actionData.ImplicitSource) { sourceId = 0; } SmartSource source = smartFactory.SourceFactory(sourceId.Value); SmartAction ev = smartFactory.ActionFactory(actionId.Value, source, target); EditActionCommand(ev); obj.Actions.Add(ev); }
public InspectionResult?Inspect(SmartSource e) => throw new Exception("Repeat validator is not suported for actions, because it doesn't make any sense");