// Placed in environment where they can explore for 2-3 mins, no objects. public IEnumerator RunExploreScene(Scene s, Logger logger) { print("ExploreScene(): Starting"); // Doesn't have GrayScreen GameObject curenv = GetEnvGO(Environments, s.envIndex); curenv.BroadcastMessage("SpawnPlayerAtIndex", s.playerSpawnIndex); // Get player reference GameObject player = GameObject.FindWithTag("Player"); // Setup logger, using environment info component EnvInfo envinfo = (EnvInfo)curenv.GetComponent <EnvInfo>(); logger.StartTrial(Vector3.zero, player, envinfo.GetOrigin()); // No destination in explore mode yield return(new WaitForSeconds(s.envTime)); logger.EndTrial(); curenv.BroadcastMessage("RemovePlayer"); print("ExploreScene(): Done"); }
// // Scene logics // public IEnumerator RunNormalScene(Scene s, Logger logger) { print("RunNormalScene(): Starting"); // Show GrayScreen yield return(StartCoroutine(ShowGrayScreen(s.objShowIndex, s.showTime, s.greyScreenTime))); // Env we'll be sending message to GameObject curenv = GetEnvGO(Environments, s.envIndex); // Setup player if (s.playerSpawnIndex >= 0) { // Player index of -1 or less implies we dont respawn player. Used for searchfind. Environments.BroadcastMessage("RemovePlayer"); curenv.BroadcastMessage("SpawnPlayerAtIndex", s.playerSpawnIndex); } GameObject player = GameObject.FindWithTag("Player"); player.SendMessage("EnableInput"); // Setup trigger object curenv.BroadcastMessage("ActivateObjTriggerAtIndex", new ObjSpawner.TriggerInfo(s.objSpawnIndex, TriggerCallback, s.objShowIndex, globalConfig.objTriggerRadius)); if (s.showObjAlways) { curenv.BroadcastMessage("ShowSelf"); } Vector3 objpos = GameObject.FindWithTag("GoalTrigger").transform.position; // Setup Landmark curenv.BroadcastMessage("ShowLandmark", s.landmarkSpawnIndex); // Setup logger, using environment info component EnvInfo envinfo = (EnvInfo)curenv.GetComponent <EnvInfo>(); logger.StartTrial(envinfo.GetActiveTriggerObj().transform.position, player, envinfo.GetOrigin()); // Wait for player to find target float curtime = Time.time; yield return(new WaitUntil(() => (s.showObjAlways ? fplayerfoundtarget : (Input.GetKeyDown(globalConfig.actionKey) || Time.time - curtime >= s.envTime)))); bool ftimedout = Time.time - curtime >= s.envTime; // Log player doing action/timing out logger.WriteAction(ftimedout ? "timeout" : "action"); // Freeze player controls player.SendMessage("DisableInput"); // Check if player found target after the press bool ffoundtarget = !(Time.time - curtime >= s.envTime) && (s.showObjAlways ? fplayerfoundtarget : (globalConfig.objTriggerRadius + player.GetComponent <CharacterController>().radius) >= Vector2.Distance(Helper.ToVector2(objpos), Helper.ToVector2(player.transform.position))); print(String.Format("RunScene(): ffoundtarget: '{0}'", ffoundtarget)); PlayerAction playerAction = (PlayerAction)player.GetComponent <PlayerAction>(); if (ffoundtarget) { print("You found the target without having to be shown it!"); curenv.BroadcastMessage("ShowSelf"); // Turn player towards object if (!s.showObjAlways) { yield return(StartCoroutine(playerAction.PlayerLookTowards())); } } else { print("You didn't find the target in time. Let me show it to you..."); // Turn the target on! Show the billboarded sprite! curenv.BroadcastMessage("ShowSelf"); // Turn player towards object yield return(StartCoroutine(playerAction.PlayerLookTowards())); // Reset target ResetCallbacks(); // Unfreeze controls player.SendMessage("EnableInput"); print("...now go find the target!"); float curtimetwo = Time.time; yield return(new WaitUntil(() => fplayerfoundtarget || Time.time - curtimetwo >= s.envTimeTwo)); // Freeze player controls player.SendMessage("DisableInput"); } if (!s.showObjAlways) { yield return(StartCoroutine(OnFindTarget(player))); } curenv.BroadcastMessage("HideSelf"); logger.EndTrial(); curenv.BroadcastMessage("DeactiveateTriggers"); curenv.BroadcastMessage("HideLandmark"); ResetCallbacks(); yield return(StartCoroutine(ShowGrayScreen(-1, 0.0f, s.greyScreenTimeTwo))); print("Scene(): Done"); }