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);
        }
Exemple #2
0
        private void UpdateTargetPositionVisibility(SmartTarget target)
        {
            var actionData = smartDataManager.GetRawData(SmartType.SmartAction, target.Parent?.Id ?? SmartConstants.ActionNone);
            var targetData = smartDataManager.GetRawData(SmartType.SmartTarget, target.Id);

            foreach (var t in target.Position)
            {
                t.IsUsed = actionData.UsesTargetPosition | targetData.UsesTargetPosition;
            }
        }
Exemple #3
0
        public void UpdateTarget(SmartTarget smartTarget, int id)
        {
            if (smartTarget.Id == id)
            {
                return;
            }

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

            SetParameterObjects(smartTarget, raw, true);
        }
Exemple #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);
        }
Exemple #5
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);
        }
Exemple #6
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);
        }
Exemple #7
0
    /* Define how this object interacts with its surroundings
     */
    protected IEnumerator Interact()
    {
        Ray        ray;
        RaycastHit hit;

        while (true)
        {
            switch (currState)
            {
            case (int)States.REST:
                // Check if the object can be picked up
                // Allow interaction if possible
                ray = new Ray(targets[PLAYER].transform.position, targets[PLAYER].transform.forward);

                if (Physics.Raycast(ray, out hit, pickUpRange, layerMask: 1 << pickUpLayer))
                {
                    AnimatePickUp();
                }

                break;

            case (int)States.PICKUP:
                // Check if the object can be thrown at something (in range and has a SmartTarget script)
                // Allow interaction if possible
                ray = new Ray(targets[PLAYER].transform.position, targets[PLAYER].transform.forward);

                if (Physics.Raycast(ray, out hit, throwRange, layerMask: 1 << throwLayer))
                {
                    SmartTarget st = hit.transform.gameObject.GetComponent <SmartTarget>();

                    if (st != null && st.CanHit(self))
                    {
                        // Indicate that the object can be hit

                        // Throw the object
                        AnimateThrow(hit);
                    }
                }

                break;
            }

            yield return(null);
        }
    }
Exemple #8
0
        public SmartTarget TargetFactory(ISmartScriptLine line)
        {
            SmartTarget target = TargetFactory(line.TargetType);

            target.X = line.TargetX;
            target.Y = line.TargetY;
            target.Z = line.TargetZ;
            target.O = line.TargetO;

            target.Condition.Value = (line.TargetConditionId);

            for (var i = 0; i < SmartSource.SmartSourceParametersCount; ++i)
            {
                target.GetParameter(i).Value = line.GetTargetParam(i);
            }

            return(target);
        }
Exemple #9
0
        public void UpdateTarget(SmartTarget smartTarget, int id)
        {
            if (smartTarget.Id == id)
            {
                return;
            }

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

            if (raw.ReplaceWithId.HasValue)
            {
                UpdateTarget(smartTarget, raw.ReplaceWithId.Value);
                return;
            }

            SetParameterObjects(smartTarget, raw, true);
            UpdateTargetPositionVisibility(smartTarget);
        }
Exemple #10
0
        public SmartTarget TargetFactory(ISmartScriptLine line)
        {
            SmartTarget target = TargetFactory(line.TargetType);

            target.X = line.TargetX;
            target.Y = line.TargetY;
            target.Z = line.TargetZ;
            target.O = line.TargetO;

            target.Condition.SetValue(line.TargetConditionId);

            for (int i = 0; i < SmartTarget.SmartSourceParametersCount; ++i)
            {
                target.SetParameter(i, GetTargetParameter(line, i));
            }

            return(target);
        }
        public SmartTarget TargetFactory(int id)
        {
            if (!SmartDataManager.GetInstance().Contains(SmartType.SmartTarget, id))
            {
                throw new NullReferenceException("No data for target id " + id);
            }

            SmartTarget target = new SmartTarget(id);

            SetParameterObjects(target, SmartDataManager.GetInstance().GetRawData(SmartType.SmartTarget, id));

            if (SmartDataManager.GetInstance().GetRawData(SmartType.SmartTarget, id).Types.Contains("Position"))
            {
                target.IsPosition = true;
            }

            return(target);
        }
Exemple #12
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);
        }
Exemple #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);
            }

            return(action);
        }
Exemple #14
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);
        }
Exemple #15
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);
        }