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);
        }
Пример #2
0
 public SourceTargetConditionsChanged(SmartSource source, IList <ICondition>?old, IList <ICondition>?newConds)
 {
     this.source   = source;
     this.old      = old;
     this.newConds = newConds;
     this.readable = source.Readable.RemoveTags();
 }
Пример #3
0
        public void UpdateSource(SmartSource smartSource, int id)
        {
            if (smartSource.Id == id)
            {
                return;
            }

            SmartGenericJsonData raw = smartDataManager.GetRawData(SmartType.SmartSource, id);

            SetParameterObjects(smartSource, raw, true);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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."
            });
        }
Пример #15
0
 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");
Пример #17
0
        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);
        }
Пример #18
0
 public InspectionResult?Inspect(SmartSource e) => throw new Exception("Repeat validator is not suported for actions, because it doesn't make any sense");