Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
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();
    }