omTargetTestObject = new List(); public Lis"> omTargetTestObject = new List(); public Lis"> omTargetTestObject = new List(); public Lis">
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using omFrame;
using omFrame.Static;
using omFrame.Table;

using Autohand;
using FTS;
using FTS.Device;
using FTS.Component;
using omFrame.Utility;

using omFrame.Network;
using omFrame.Network.TCP.Packet;
using Newtonsoft.Json;

public class TailHook : MonoBehaviour
{
    public TailHookManager curTailHookBase;                 // 현재
    TailHookManager nextTailHookBase;                       // 다음
    TailHook_NetManager netManager;

    // 리스트 형식으로 시나리오 나열
    public List<TailHookManager> m_actors = new List<TailHookManager>();
    [Tooltip("미션 설명을 보여주기 위한 텍스트")]
    public Text m_missionText;

    [Header("확인용 리스트")]
    public omTarget omtarget;
    public bool omTargetBool = false;
    public List<GameObject> omTargetTestObject = new List<GameObject>();
    public List<omTarget> omTargetTestPlayer = new List<omTarget>();

    [HideInInspector]
    public int myID;

    public TraineeType mytype = TraineeType.None;

    omPlayerOwner m_omPlayerOwner;

    void Awake()
    {
        m_actors.AddRange(GetComponentsInChildren<TailHookManager>(true));
        //ActorList에 Actor가 있으면 처음 시나리오 넣기
        if (m_actors.Count > 0)
        {
            foreach (var actor in m_actors)
            {
                actor.Init(NextActor);
                actor.SetPilotRescue(this);
            }
            curTailHookBase = m_actors[0];
            curTailHookBase.OpenScenario();
        }

        netManager = GetComponent<TailHook_NetManager>();
    }
    private void Start()
    {
        omtarget = FindObjectOfType<omTarget>();

        myID = omFrameWork.Inst.Cache.CacheNet.GetMyID();

    }
    void Update()
    {
        //다음 시나리오로 넘기기 C
        if (Input.GetKeyDown(KeyCode.C))
        {
            Debug.Log("다음 시나리오");
            NextActor();
        }
        equipTeleport();
    }

    void OnExit()
    {
        Debug.Log("Program OnExit !");
    }

    //다음 시나리오로 넘어감
    public void NextActor()
    {
        //다음 시나리오가 있을경우
        if (m_actors.Count >= 2)
        {
            nextTailHookBase = m_actors[1];
            CloseCurrActor();
            OpenNextActor();
        }
        else if (m_actors.Count == 1)
        {
            OpenNextActor();
        }
    }

    //다음 시나리오를 열어줌
    public void OpenNextActor()
    {
        if (nextTailHookBase != null)
        {
            curTailHookBase = nextTailHookBase;

            nextTailHookBase = null;
            curTailHookBase.OpenScenario();
        }
        else
        {
            //다음 퀘스트가 없을경우 현재 Actor를 닫고 시스템을 종료
            CloseCurrActor();
            OnExit();
        }
    }

    //현재 열려있는 Actor 닫기
    public void CloseCurrActor()
    {
        if (curTailHookBase != null)
        {
            m_actors.Remove(curTailHookBase);
            curTailHookBase.CloseScenario();
        }
    }

    // 확인 값 받는 함수
    void findTarget()
    {
        if (omtarget.stare == true)
        {
            // 나중에 태그 수정
            foreach (GameObject player in GameObject.FindGameObjectsWithTag("Player"))
            {
                Debug.Log("확인 완료");
                omTargetBool = true;
                omTargetTestObject.Add(player);
            }
        }
        else
        {
            // 나중에 태그 수정
            foreach (GameObject player in GameObject.FindGameObjectsWithTag("Player"))
            {
                Debug.Log("제거");
                omTargetBool = false;
                omTargetTestObject.Remove(player);
            }
        }
    }
    IEnumerator findTargetDelay(float delay)
    {
        while (true)
        {
            yield return new WaitForSeconds(delay);
            findTarget();
        }
    }

    public void SetNetManager()
    {
        TailHookQuest[] qusets = curTailHookBase.m_questList.ToArray();
        List<TailHook_NetQuest> netList = new List<TailHook_NetQuest>();
        foreach (var quset in qusets)
        {
            netList.Add(quset.GetComponent<TailHook_NetQuest>());
        }
        netManager.SetNetQuest(netList.ToArray(), mytype);
    }

    // 텔레포트 장치 착용
    void equipTeleport()
    {
        // GameObject.FindObjectOfType<omPlayerOwner>().m_CurrentPawn.TeleportEquipment(eEquipType.ET_RightHand, 1113, true);
        m_omPlayerOwner = GameObject.FindObjectOfType<omPlayerOwner>();
        m_omPlayerOwner.AddNetTeleportTraker();

        // 텔레포트 장치가 돌아가는 값 보정
        GameObject teleport = GameObject.Find("TeleportDevice_Hand(Clone)");
        if (teleport != null)
        {
            teleport.transform.localPosition = new Vector3(0.011f, -0.028f, 0.004f);
            teleport.transform.localRotation = Quaternion.Euler(0.044f, 108.69f, -9.446f);
        }
    }

    #region 서버 받는 패킷 관련 Func
    //--------------------------------------------------------------------------------
    // 받는 패킷처리
    //--------------------------------------------------------------------------------
    public void SendAllText()
    {
        JsTailEventUpdate jsRes = omFrameWork.Inst.Cache.CacheNet.GetCache<JsTailEventUpdate>(ePACKET_ID.PID_TAILHOOK_EVENT_UPDATE);
        if (jsRes == null)
            return;

        if ((TextScript)jsRes.qid == TextScript.Text9)
        {
            curTailHookBase.SetStop(false);
            Debug.Log("*********" + jsRes.qid);
        }
    }

    public void StopQuestRes()
    {
        JsTailStopUpdate jsRes = omFrameWork.Inst.Cache.CacheNet.GetCache<JsTailStopUpdate>(ePACKET_ID.PID_TAILHOOK_STOP_UPDATE);
        if (jsRes == null)
            return;

        ////넷이벤트한테 던짐
        //if (curTailHookBase.m_curEvent == null)
        //    return;

    }
    #endregion

    #region 서버 보내는 패킷 관련 Func
    //--------------------------------------------------------------------------------
    // 보내는 패킷처리
    //--------------------------------------------------------------------------------
    public void WatchPlayer(int qid)
    {
        omLayerUnit unit = omFrameWork.Inst.Layer.GetLastLayer();
        unit?.SendTCPPacket(ePACKET_ID.PID_TAILHOOK_EVENT_UPDATE, new JsTailEventUpdate(myID, (int)mytype, qid));
    }
    public void StopQuestReq(int qid)
    {
        omLayerUnit unit = omFrameWork.Inst.Layer.GetLastLayer();
        unit?.SendTCPPacket(ePACKET_ID.PID_TAILHOOK_STOP_UPDATE, new JsTailStopUpdate(myID, (int)mytype, qid));
    }

    public void FinishQuestReq(int qid)
    {
        omTCP.Query(ePACKET_ID.PID_TAILHOOK_FINISH_UPDATE, new JsTailFinishUpdate(myID, (int)mytype, qid));
    }

    #endregion
}