コード例 #1
0
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        dstManager.AddComponentData(entity, GameActionBank.GetActionId(Value));

        // Update list of GameActionSettingAuth by adding any missing instances and removing any extra
        UpdateGameActionSettingsList();

        // Convert all GameActionSettingAuths
        foreach (GameActionSettingAuthBase setting in GameActionSettings)
        {
            setting.Context = gameObject;
            setting.Convert(entity, dstManager, conversionSystem);
        }
    }
コード例 #2
0
        public static GameAction GetGameAction(ISimWorldReadAccessor simWorld, Entity item)
        {
            if (simWorld == null)
            {
                return(null);
            }

            if (!simWorld.Exists(item))
            {
                return(null);
            }

            if (!simWorld.TryGetComponent(item, out GameActionId gameActionId))
            {
                return(null);
            }

            return(GameActionBank.GetAction(gameActionId));
        }
コード例 #3
0
    private void UpdateGameActionSettingsList()
    {
        if (_hasUpdatedListOfGameActionSettings)
        {
            return;
        }

        var gameAction           = GameActionBank.GetAction(Value);
        var requiredSettingAuths = GameActionSettingAuthBase.GetRequiredSettingAuthTypes(gameAction.GetType());

        GameActionSettings.RemoveAll(authInstance => authInstance == null || !requiredSettingAuths.Contains(authInstance.GetType()));
        foreach (var authType in requiredSettingAuths)
        {
            if (!GameActionSettings.Any(x => x.GetType() == authType))
            {
                GameActionSettings.Add(Activator.CreateInstance(authType) as GameActionSettingAuthBase);
            }
        }
        _hasUpdatedListOfGameActionSettings = true;
    }
コード例 #4
0
    public override void OnEnter()
    {
        _surveyStateMachine.Blackboard = _surveySMBlackboard;
        _surveySMBlackboard.Cache      = Cache;
        _surveySMBlackboard.ResultParameters.Clear();
        _surveySMBlackboard.IsDebug = false;

        CursorOverlayService.Instance.ResetCursorToDefault();

        if (InputParameter != null && InputParameter.ActionInstigator != Entity.Null && InputParameter.ActionPrefab != Entity.Null)
        {
            if (SimWorld.TryGetComponent(InputParameter.ActionPrefab, out SimAssetId objectSimAssetID))
            {
                _surveySMBlackboard.ActionAuth = PresentationHelpers.FindActionAuth(objectSimAssetID);
            }

            if (_surveySMBlackboard.ActionAuth == null)
            {
                StateMachine.TransitionTo(UIStateType.Gameplay);
                return;
            }

            // Init process of parameter selection
            GameActionId actionId         = SimWorld.GetComponent <GameActionId>(InputParameter.ActionPrefab);
            GameAction   objectGameAction = GameActionBank.GetAction(actionId);

            _surveySMBlackboard.UseContext             = CommonReads.GetActionContext(SimWorld, InputParameter.ActionInstigator, InputParameter.ActionPrefab);
            _surveySMBlackboard.ParametersDescriptions = objectGameAction.GetExecutionContract(SimWorld, InputParameter.ActionPrefab).ParameterTypes;
        }
        else
        {
            _surveySMBlackboard.IsDebug = true;
        }

        _surveyStateMachine.TransitionTo(new SurveyState());
    }
コード例 #5
0
 public static Entity FindFirstItemWithGameAction <T>(ISimWorldReadAccessor accessor, Entity pawn, out int itemIndex)
     where T : GameAction
 {
     return(FindFirstItemWithGameAction(accessor, pawn, GameActionBank.GetActionId <T>(), out itemIndex));
 }
コード例 #6
0
    private bool ExecuteGameAction(Entity actionInstigator, Entity actionEntity, NativeArray<Entity> targets, GameAction.UseParameters parameters = null)
    {
        if (!TryGetComponent(actionEntity, out GameActionId actionId) || !actionId.IsValid)
        {
            Log.Error($"Could not find valid game action id on action {EntityManager.GetNameSafe(actionEntity)}. Action instigator: {EntityManager.GetNameSafe(actionInstigator)}");
            return false;
        }

        GameAction gameAction = GameActionBank.GetAction(actionId);

        if (gameAction == null)
            return false; // error is already logged in 'GetAction' method

        GameAction.ExecInputs input = new GameAction.ExecInputs(Accessor, CommonReads.GetActionContext(Accessor, actionInstigator, actionEntity, targets), parameters);
        GameAction.ExecOutput output = new GameAction.ExecOutput()
        {
            ResultData = new List<GameAction.ResultDataElement>()
        };

        if (!gameAction.Execute(in input, ref output))
        {
            Log.Info($"Couldn't use {gameAction}.");
            return false;
        }

        // Feedbacks
        GameAction.ResultData resultData = new GameAction.ResultData() { Count = output.ResultData.Count };

        for (int i = 0; i < output.ResultData.Count; i++)
        {
            switch (i)
            {
                case 0:
                    resultData.DataElement_0 = output.ResultData[0];
                    break;
                case 1:
                    resultData.DataElement_1 = output.ResultData[1];
                    break;
                case 2:
                    resultData.DataElement_2 = output.ResultData[2];
                    break;
                case 3:
                    resultData.DataElement_3 = output.ResultData[3];
                    break;
                default:
                    break;
            }
        }


        // copy native array to make sure its persisten
        var persistentContext = input.Context;

        if (input.Context.Targets.IsCreated)
        {
            persistentContext.Targets = new NativeArray<Entity>(input.Context.Targets.Length, Allocator.Persistent);
            input.Context.Targets.CopyTo(persistentContext.Targets);
        }

        PresentationEvents.GameActionEvents.Push(new GameActionUsedEventData()
        {
            GameActionContext = persistentContext,
            GameActionResult = resultData
        });

        return true;
    }