public SurveyBaseController FindCustomSurveyPrefabForParameters(params GameAction.ParameterDescription[] parameters) { if (parameters.Length == 0) { return(null); } // example: 3 parameters // try find survey for all 3 params // then try find survey for 2 params // then try find survey for 1 params // return null SurveyBaseController result = null; for (int i = parameters.Length; i > 0; i--) { result = TryFindCustomSurveyPrefabForParametersSubset(parameters, i); if (result != null) { break; } } return(result); }
private void StartNewSurvey(SurveyBaseController surveyPrefab) { if (SurveyManager.Instance.IsSurveyRunning) { SurveyManager.Instance.StopCurrentSurvey(); } if (surveyPrefab != null) { var useContext = new GameAction.ExecutionContext(); UIStateMachine.Instance.TransitionTo(UIStateType.ParameterSelection); SurveyManager.Instance.BeginSurvey(_focusLocation, useContext, new List <GameAction.ParameterData>(), surveyPrefab.CreateDebugQuery(), surveyPrefab, this.OnSurveyComplete, this.OnSurveyCancel); } }
public void BeginSurvey(Vector3 surveyLocation, GameAction.ExecutionContext useContext, List <GameAction.ParameterData> currentResultData, GameAction.ParameterDescription[] parameters, SurveyBaseController surveyPrefab, System.Action <List <GameAction.ParameterData> > onCompleteCallback, System.Action onCancelCallback) { GameObject surveyInstance = Instantiate(surveyPrefab.gameObject, surveyLocation, Quaternion.identity, _surveyContainer); SurveyBaseController surveyController = surveyInstance.GetComponent <SurveyBaseController>(); if (surveyController != null) { _currentSurvey = surveyController; surveyController.StartSurvey(delegate(List <GameAction.ParameterData> resultData) { onCompleteCallback.Invoke(resultData); if (surveyController.DelayBeforeDestruction > 0) { GameObject surveyObject = surveyController.gameObject; this.DelayedCall(surveyController.DelayBeforeDestruction, () => { if (surveyObject != null) { Destroy(surveyObject); } }); } else { Destroy(surveyController.gameObject); } }, onCancelCallback, useContext, currentResultData, parameters); } else { Debug.LogError("Skipping request because it couldn't start"); // can't start mini-game, complete it immediatly List <GameAction.ParameterData> DefaultResults = new List <GameAction.ParameterData>(); onCompleteCallback.Invoke(DefaultResults); } }
private void Update() { if (!Game.Started) { return; } if (Input.GetKeyDown(KeyCode.R)) { RequestSurvey(); } if (_requestedSurveyPrefab != null) { StartNewSurvey(_requestedSurveyPrefab); _requestedSurveyPrefab = null; } }
public void BeginDefaultSurvey(Vector3 requestLocation, GameAction.ExecutionContext useContext, List <GameAction.ParameterData> currentResultData, GameAction.ParameterDescription parameterDescription, System.Action <List <GameAction.ParameterData> > onCompleteCallback, System.Action onCancelCallback) { SurveyBaseController surveyPrefab = null; // find default survey for param foreach (DefaultSurveyReference request in _defaultSurveys) { if (request.ParameterType == parameterDescription.GetParameterDescriptionType()) { surveyPrefab = request.Survey.GetComponent <SurveyBaseController>(); break; } } if (surveyPrefab != null) { BeginSurvey(requestLocation, useContext, currentResultData, new GameAction.ParameterDescription[] { parameterDescription }, surveyPrefab, onCompleteCallback, onCancelCallback); } }
public override void OnEnter() { Done = false; _doneNextFrame = false; HUDDisplay.Instance.ToggleVisibility(false); if (Blackboard.IsDebug) { return; } // the parameter int remainingParamCount = Blackboard.ParametersDescriptions.Length - Blackboard.ResultParameters.Count; GameAction.ParameterDescription[] remainingParams = ArrayX.SubArray(Blackboard.ParametersDescriptions, Blackboard.ResultParameters.Count, remainingParamCount); if (remainingParams.Length < 1) { OnSurveyCancel(); return; } SurveyBaseController surveyPrefab = Blackboard.ActionAuth.FindCustomSurveyPrefabForParameters(remainingParams); if (surveyPrefab != null) { SurveyManager.Instance.BeginSurvey(Blackboard.Cache.LocalPawnPositionFloat, Blackboard.UseContext, Blackboard.ResultParameters, remainingParams, surveyPrefab, OnSurveyComplete, OnSurveyCancel); } else { // default case Blackboard.ResultParameters.Add(null); _doneNextFrame = true; //GameAction.ParameterDescription parameterToHandle = remainingParams[0]; //SurveyManager.Instance.BeginDefaultSurvey(Blackboard.Cache.LocalPawnPositionFloat, Blackboard.UseContext, Blackboard.ResultParameters, parameterToHandle, OnSurveyComplete, OnSurveyCancel); } }
private void RequestSurvey() { // we queue this in the update instead of doing it right away to make sure we alway begin it AFTER clicking the Ui _requestedSurveyPrefab = _availableSuveys[_surveyDropdown.value]; }