Пример #1
0
    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();
    }