void Save_Global_Time_Point() { Time_Point temp_point = new Time_Point(); temp_point.timestamp = current_time; temp_point.timestamp_index = timeline_memory.Count; temp_point.normalized_timestamp = current_time - (iteration_delay * (iteration_num - 1)); temp_point.dupe_timestamp_indexes.Clear(); temp_point.dupe_timestamp_indexes.Add(temp_point.timestamp_index); foreach (var dupe_player in duplicate_player_list) { temp_point.dupe_timestamp_indexes.Add(dupe_player.timestamp); //jump_time_point.dupe_held_objects.Add() } // Objects temp_point.object_locations.Clear(); foreach (var obj_type in object_type_list) { GameObject[] object_array = GameObject.FindGameObjectsWithTag(obj_type.tag); foreach (var obj in object_array) { if (obj.GetComponent <Pickup_Loop>().is_picked_up == false) { temp_point.object_location_transforms.Add(obj.transform); Object_Spawns new_spawn = new Object_Spawns(); new_spawn.position = obj.transform.position; new_spawn.obj = obj_type.obj; temp_point.object_locations.Add(new_spawn); } } } // Doors temp_point.door_data_states.Clear(); foreach (var door_activation in door_list) { Door_Data input_door = new Door_Data(); input_door.door_activation = door_activation; input_door.door_obj = door_activation.gameObject; input_door.last_state = door_activation.is_open; temp_point.door_data_states.Add(input_door); } time_point_global_list.Add(temp_point); }
void Log_Door_States(int i_index) { time_point_list[i_index].door_data_states.Clear(); foreach (var door_activation in door_list) { Door_Data input_door = new Door_Data(); input_door.door_activation = door_activation; input_door.door_obj = door_activation.gameObject; input_door.last_state = door_activation.is_open; time_point_list[i_index].door_data_states.Add(input_door); } }
void Record_Player_Actions() { if (Input.GetKeyDown(KeyCode.E)) { is_grabbing = true; } Select_Time_Point_Slot_Input(); if (Input.GetKeyDown(KeyCode.T)) { Save_Time_Point(selected_time_slot - 1); } Check_If_Present(); if (Input.GetKeyDown(KeyCode.G)) { tm_jump_effect.is_activated = true; } if (Input.GetKeyDown(KeyCode.H)) // Present/Future { tm_jump_effect.is_activated = true; is_jumping_to_present = true; } if (Input.GetKeyDown(KeyCode.R)) // Past/Start { //Reset_Time_Event.Invoke(); } if (tm_jump_effect.has_jump_occured) { tm_jump_effect.has_jump_occured = false; is_jumping = true; is_jumping_to_custom_time_point = true; } // Record Movement if ((current_time >= last_update_time + update_frequency) || is_grabbing) { last_update_time = current_time; //Save_Global_Time_Point(); bool is_seen_by_player_original = false; List <Object_Type> obj_pos_array = new List <Object_Type>(); foreach (var dupe in dupe_objs) { if (dupe.obj != null) { if (dupe.vis.is_seen) { foreach (var cam in dupe.vis.seen_cams) { if (cam.gameObject == player_look_pivot.GetComponentInChildren <Camera>().gameObject) { is_seen_by_player_original = true; Object_Type input_obj = new Object_Type(); input_obj.position = dupe.obj.transform.position; input_obj.tag = dupe.obj.tag; obj_pos_array.Add(input_obj); } } } } } bool is_door_seen_by_player_original = false; List <Door_Data> door_data_list = new List <Door_Data>(); foreach (var door in door_list) { Visible_Check vis_check = door.gameObject.GetComponent <Visible_Check>(); if (door.GetComponentInChildren <Visible_Check>().is_seen) { foreach (var cam in vis_check.seen_cams) { if (cam.gameObject == player_look_pivot.GetComponentInChildren <Camera>().gameObject) { is_door_seen_by_player_original = true; Door_Data record_data = new Door_Data(); record_data.door_activation = door; record_data.door_obj = door.gameObject; record_data.last_state = door.is_open; door_data_list.Add(record_data); } } } } if ((timeline_memory[timeline_memory.Count - 1].position != player_target.position) || (timeline_memory[timeline_memory.Count - 1].view_rotation != player_look_pivot.localRotation) || (is_seen_by_player_original) || (is_grabbing) || (is_door_seen_by_player_original) || (is_jumping)) { if (is_jumping) { Log_Current_Timestamp(); } Add_To_Buffer(player_target.position, player_look_pivot.localRotation, door_data_list.ToArray(), obj_pos_array.ToArray(), current_time, is_jumping, is_grabbing); if (is_jumping) { float time_until_next_loop = (iteration_delay * iteration_num) - current_time; current_time += time_until_next_loop; Debug.Log("Jumped: " + time_until_next_loop); time_point_list[selected_time_slot - 1].timestamp += iteration_delay; int jump_index = selected_time_slot - 1; if (is_jumping_to_custom_time_point) { if (is_jumping_to_present) { jump_index = 10; } else if (is_jumping_to_start) { jump_index = 9; } is_jumping_to_present = false; is_jumping_to_start = false; current_time += time_point_list[jump_index].normalized_timestamp; Debug.Log("Jumped even more: " + time_point_list[jump_index].normalized_timestamp); Skip_Dupes_To_Custom(jump_index); Reset_Objects(time_point_list[jump_index].object_locations); Debug.Log(current_time); } else { Skip_Dupes_To_Custom(jump_index); } Add_To_Buffer(player_target.position, player_look_pivot.localRotation, door_data_list.ToArray(), obj_pos_array.ToArray(), current_time, false, false); is_jumping = false; } if (is_seen_by_player_original) { timeline_memory[last_obj_seen_timestamp].next_obj_seen_timestamp = timeline_memory.Count - 1; last_obj_seen_timestamp = timeline_memory.Count - 1; } if (is_grabbing) { is_grabbing = false; player_obj_holder.trigger_grab = true; } } int num_of_seen_objs = 0; foreach (var obj in dupe_objs) { foreach (var cam in obj.vis.seen_cams) { if (cam.gameObject == player_look_pivot.GetComponentInChildren <Camera>().gameObject) { num_of_seen_objs++; } } } } Check_If_Start(); }