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); } }
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)); }
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; }
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()); }
public static Entity FindFirstItemWithGameAction <T>(ISimWorldReadAccessor accessor, Entity pawn, out int itemIndex) where T : GameAction { return(FindFirstItemWithGameAction(accessor, pawn, GameActionBank.GetActionId <T>(), out itemIndex)); }
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; }