public static IEnumerator CreateTownControllUnitAsync(int PosX, int PosY, System.Action <MyTownUnit> callback)
    {
        GameObject _townUnit = new GameObject();

        _townUnit.name = "MyTownUnit";

        MyTownUnit mtu = _townUnit.AddComponent <MyTownUnit>();

        mtu.gameObject.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f);

        Vector3 pos = NaviTileInfo.instance.GetTilePos(PosX, PosY);

        NavMeshHit navHit;

        if (NavMesh.SamplePosition(pos, out navHit, 10, -1))          //<--- 네비게이션 메쉬 높이 때문에 이것도 계산해 주었어야 한다.(몬스터의 값은 비슷하게 온다.)
        {
            pos = navHit.position;
        }

        mtu.transform.position = pos;

        mtu.Height = 2.47f;
        yield return(SceneManager.instance.StartCoroutine(mtu.InitAsync()));

        mtu.BeforePosX = PosX;
        mtu.BeforePosY = PosY;

        callback(mtu);
    }
    public static MyTownUnit CreateTownControllUnit(int PosX, int PosY)
    {
        GameObject _townUnit = new GameObject();

        _townUnit.name = "MyTownUnit";

        MyTownUnit mtu = _townUnit.AddComponent <MyTownUnit>();

        mtu.gameObject.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f);

        Vector3 pos = NaviTileInfo.instance.GetTilePos(PosX, PosY);

        NavMeshHit navHit;

        if (NavMesh.SamplePosition(pos, out navHit, 10, -1))  //<--- 네비게이션 메쉬 높이 때문에 이것도 계산해 주었어야 한다.(몬스터의 값은 비슷하게 온다.)
        {
            pos = navHit.position;
        }

        mtu.transform.position = pos;

        mtu.Height = 2.47f;
        mtu.Init();

        mtu.BeforePosX = PosX;
        mtu.BeforePosY = PosY;

        return(mtu);
    }
Exemple #3
0
    /// <summary>
    /// 맵로드가 끝나면 캐릭터 생성.
    /// </summary>
    void CreateMyTownUnit()
    {
        int regenX;
        int regenY;

        NetworkClient.instance.GetRegenPos(out regenX, out regenY);

        NaviTileInfo.instance.LoadTile("maintown");                 // take 0.8sec

        MyHero = MyTownUnit.CreateTownControllUnit(regenX, regenY); // take 0.9 sec

        MyHero.m_rUUID = NetData.instance._userInfo._charUUID;
    }
Exemple #4
0
    public void Init()
    {
        TownState townstate = SceneManager.instance.CurrentStateBase() as TownState;

        if (townstate != null)
        {
            TownUnit = townstate.MyHero;
        }

        StartCoroutine(CreateTownNpcs());
        CreatePotals();
        StartCoroutine(CreateCreatures());
        SetNewMyTownHero(TownUnit);
    }
Exemple #5
0
    /*헷갈릴거 같으니 주석.
     * //움직임 정지 콜라이더와 충돌이 실행시킨다
     * public void ChangeStateIdle()
     * {
     *  TownUnit.moveTargetPotal = false;
     *  TownUnit.ChangeState(UnitState.Idle);
     * }
     */

    /// <summary>
    /// 플레이어 캐릭터가 삭제되고 생성될때 호출됨.
    /// </summary>
    /// <param name="newUnit"></param>
    public void SetNewMyTownHero(MyTownUnit newUnit)
    {
        TownUnit = newUnit;
        for (int i = 0; i < Potals.Length; i++)
        {
            Collider           bc  = Potals[i].GetComponentInChildren <Collider>();
            CollisionTownModel ctm = bc.GetComponent <CollisionTownModel>();
            ctm.SetNewTargetCollider(TownUnit.GetComponent <Collider>());
        }

        for (int i = 0; i < NpcModels.Count; i++)
        {
            //BoxCollider bc = NpcModels[i].GetComponentInChildren<BoxCollider>();
            NpcModels[i].SetNewTargetCollider(TownUnit.GetComponent <Collider>());
        }
    }
Exemple #6
0
    IEnumerator CreateMyTownUnitAsync()
    {
        int regenX;
        int regenY;

        NetworkClient.instance.GetRegenPos(out regenX, out regenY);

        //NaviTileInfo.instance.LoadTile("maintown"); // take 0.8sec

        yield return(StartCoroutine(NaviTileInfo.instance.LoadTitleAsync("maintown")));

        yield return(StartCoroutine(MyTownUnit.CreateTownControllUnitAsync(regenX, regenY, (retVal) => { MyHero = retVal; })));

        MyHero.m_rUUID = NetData.instance._userInfo._charUUID;

        yield return(null);
    }
Exemple #7
0
    public void NpcClickEvent()
    {
        TownPanel panel = UIMgr.GetTownBasePanel() as TownPanel;

        if (panel == null || panel.IsHideTown)//무시
        {
            return;
        }

        MyTownUnit myHero = SceneManager.instance.GetState <TownState>().MyHero;

        if (myHero == null || myHero.IsMiniMapMove)//미니맵으로 온것의 경우 그냥 무시한다.
        {
            return;
        }

        //퀘스트 NPC
        if ((NPCTYPE)NPCType == NPCTYPE.QUEST_NPC)
        {
            Quest.QuestInfo info = QuestManager.instance.CheckSubQuest(QuestSubType.NPCTALK, (uint)NpcId);
            if (info != null && 0 < info.QuestTalkSceneID)
            {
                UIMgr.OpenMissionPanel(info.ID);
            }
        }
        //else if ((NPCTYPE)NPCType == NPCTYPE.ARENA_NPC)
        //{
        //    GameObject townpanel = UIMgr.GetUI("UIPanel/TownPanel");
        //    townpanel.GetComponent<TownPanel>().Hide();
        //    UIMgr.OpenArenaPanel();
        //}
        //else if ((NPCTYPE)NPCType == NPCTYPE.SPECIAL_NPC)
        //{
        //    panel.Hide();
        //    UIMgr.OpenSpecial();
        //}
        //else if ((NPCTYPE)NPCType == NPCTYPE.FREEFIGHT_NPC)
        //{
        //    panel.Hide();
        //    UIMgr.OpenDogFight();
        //}
        //else if ((NPCTYPE)NPCType == NPCTYPE.TOWER_NPC)
        //{
        //    panel.Hide();
        //    UIMgr.OpenTowerPanel();
        //}
        //else if ((NPCTYPE)NPCType == NPCTYPE.COSTUME_NPC)
        //{
        //    panel.Hide();
        //    UIMgr.OpenCostume();
        //}
        else if ((NPCTYPE)NPCType == NPCTYPE.SINGLE_NPC)
        {
            //모험모드 NPC
            //UIMgr.instance.UiOpenType = UI_OPEN_TYPE.NONE;
            SceneManager.instance.UiOpenType = UI_OPEN_TYPE.NONE;
            GameObject townpanel = UIMgr.GetUI("UIPanel/TownPanel");
            townpanel.GetComponent <TownPanel>().OpenChapter();
        }

        //진행중인 퀘스트가 있는지 체크해야됨
        myHero.ResetMoveTarget();
    }