示例#1
0
    IEnumerator Bullet_Move(EnemyM origin, CharacterM target)
    {
        if (origin.Menemy_info.enemy_name.Equals("Enemy Wizard"))
        {
            Now_Bullet = EnemyWizard;
        }

        Now_Bullet.SetActive(true);

        while (true)
        {
            if ((transform.position - target.transform.position).sqrMagnitude < 0.3f)
            {
                target.GetHit(origin.Menemy_info.enemy_damage);
                origin.On_hit_bullet = true;
                Now_Bullet.SetActive(false);
                transform.localPosition = origin.mBullet_POS;
                origin.Mana            += origin.Menemy_info.enemy_VaryMP;
                break;
            }
            else
            {
                transform.LookAt(target.transform);
                transform.Translate(Vector3.forward * Time.deltaTime * Bullet_Speed);
            }
            yield return(null);
        }
    }
    public void Push_Pooling(GameObject unit, Character info_)
    {
        CharacterM Char_ = unit.GetComponent <CharacterM>();

        unit.transform.parent = Character_poolFolder.transform;
        Char_.mModel.SetActive(false);

        Char_.mModel.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
        Char_.mModel.transform.rotation   = Quaternion.identity;

        Char_.mModel = null;
        unit.SetActive(false);

        Character_Unit_List.Add(unit);
    }
    public void Pop_Pooling(CharacterM character_)
    {
        if (character_.MyTarget != null)
        {
            // 화살을 리스트에서 꺼낸다
            GameObject Return_Arrow = Archor_Arrow_List[0];
            Archor_Arrow_List.RemoveAt(0);

            // 화살의 위치를 잡는다
            Return_Arrow.transform.position = character_.mModel.transform.position;
            Debug.Log("mBullet_POS :" + character_.mBullet_POS);
            // 화살이 날릴 타겟의 방향을 바라본다
            Return_Arrow.transform.LookAt(character_.MyTarget.transform);

            // 화살을 킨다
            Return_Arrow.SetActive(true);

            // 날아가는 것을 바라본다.(우리가)
            Debug.Log("날아간다~");
        }
    }
    private void Init_Pooling()
    {
        for (int i = 0; i < Character_max_poolobject; i++)
        {
            Character_Unit_List.Add(Instantiate(character_unit, Character_poolFolder.transform));   // 새로운 캐릭터 유닛 생성

            for (int j = 0; j < dataMGR.characters.Count; j++)
            {
                CharacterM character_     = Character_Unit_List[i].GetComponent <CharacterM>();
                string     character_name = dataMGR.characters[j].character_name;
                //  Debug.Log(character_name);
                character_.Character_Models.Add(character_name, character_.transform.Find(character_name).gameObject);
                character_.Character_Models[character_name].SetActive(false);
            }

            Character_Unit_List[i].SetActive(false);
        }

        for (int i = 0; i < Enemy_max_poolobject; i++)
        {
            Enemy_Unit_List.Add(Instantiate(enemy_unit, Enemy_poolFolder.transform));   // 새로운 적 유닛 생성

            for (int j = 0; j < dataMGR.enemys.Count; j++)
            {
                EnemyM enemy_     = Enemy_Unit_List[i].GetComponent <EnemyM>();
                string enemy_name = dataMGR.enemys[j].enemy_name;
                enemy_.Enemy_Models.Add(enemy_name, enemy_.transform.Find(enemy_name).gameObject);
                enemy_.Enemy_Models[enemy_name].SetActive(false);
            }

            Enemy_Unit_List[i].SetActive(false);
        }

        // 지정된 수만큼 아처 오브젝트 생성

        for (int i = 0; i < Arrow_max_poolobject; i++)
        {
            Archor_Arrow_List.Add(Instantiate(Archer_Arrow, Arrow_poolFolder.transform));
        }
    }
    public GameObject Pop_Pooling(Character info_)
    {
        // 캐릭터 정보에 따라 모델 활성화
        // 유닛 자식 순서 변경
        // 오브젝트 반환

        GameObject Return_Unit = Character_Unit_List[0];
        CharacterM character   = Return_Unit.GetComponent <CharacterM>();
        GameObject model       = character.Character_Models[info_.character_name];

        Return_Unit.SetActive(true);
        character.Character_Models[info_.character_name].SetActive(true);

        character.mModel = model;
        character.mModel.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
        character.mModel.transform.rotation   = Quaternion.identity;

        character.Character_info_update(info_);
        Character_Unit_List.Remove(Return_Unit);

        return(Return_Unit);
    }
示例#6
0
 //적
 public void Shoot_Bullet(EnemyM origin, CharacterM target)
 {
     StartCoroutine(Bullet_Move(origin, target));
 }
示例#7
0
    public void LevelUp_Character_(Character info_)
    {
        Transform  Character_pos = null;
        CharacterM tmp_character;
        GameObject tmp = null;

        // 상점 구매시 호출, 구매한 캐릭터의 정보로 개수를 추가한다.
        mCharacter_Count[info_.character_name]++;
        // Debug.Log(info_.character_name + " / " + mCharacter_Count[info_.character_name]);

        // 추가하고 개수가 3개인 경우 레벨업 진행
        if (mCharacter_Count[info_.character_name] == 3)
        {
            //배치된 캐릭터 분석
            for (int i = 0; i != Positioned_Character.Count;)
            {
                tmp_character = Positioned_Character[i].GetComponent <CharacterM>();

                // 같은 정보의 캐릭터를 제거
                if (tmp_character.Mcharacter_info.character_index.Equals(info_.character_index))
                {
                    Character_pos = tmp_character.transform;    // 배치된 캐릭터 위치 저장

                    //제거 작업
                    PoolMGR.Push_Pooling(tmp_character.gameObject, tmp_character.Mcharacter_info);
                    Character_origin_position.Remove(tmp_character.now_node.transform);
                    Positioned_Character.Remove(tmp_character.gameObject);
                    All_Character.Remove(tmp_character.gameObject);

                    is_Board = true; // 보드위 설정

                    i = 0;           // 리스트
                }
                else
                {
                    i++;
                }
            }

            // 상점의 캐릭터 분석
            for (int i = 0; i != Storage_Character.Count;)
            {
                tmp_character = Storage_Character[i].GetComponent <CharacterM>();

                // if (tmp_character.Mcharacter_info.character_name == info_.character_name)
                if (tmp_character.Mcharacter_info.character_index.Equals(info_.character_index))
                {
                    PoolMGR.Push_Pooling(tmp_character.gameObject, tmp_character.Mcharacter_info);
                    Storage_Character.Remove(tmp_character.gameObject);
                    All_Character.Remove(tmp_character.gameObject);

                    // 배치된 캐릭터가 없는 경우
                    if (Character_pos == null)
                    {
                        Character_pos = tmp_character.transform;    // 창고의 캐릭터의
                        is_Board      = false;
                    }

                    i = 0;
                }
                else
                {
                    i++;
                }
            }

            BoardMGR.SpawnCharacter(info_, Character_pos, ref tmp);

            if (is_Board)
            {
                Positioned_Character.Add(tmp);
                Character_origin_position.Add(tmp.GetComponent <CharacterM>().Out_Node().transform);
            }
            else
            {
                Storage_Character.Add(tmp);
            }

            CharacterM tmp_character_ = tmp.GetComponent <CharacterM>();
            tmp_character_.Init();
            tmp_character_.On_board = is_Board;
            tmp_character_.mLevel++;
            UiMGR.StorageCheck();
            mCharacter_Count[info_.character_name] = 0;
        }
    }
示例#8
0
    IEnumerator Dispose_unit_mouse()
    {
        Transform  origin_Transform  = Dispose_unit.transform;
        Vector3    origin_position   = Dispose_unit.transform.position;
        CharacterM unit_             = Dispose_unit.GetComponent <CharacterM>();
        int        Origin_mouse_type = Mouse_on_Type;

        //Line_.SetActive(true);
        GridMGR.Line_Set(true);
        Debug.Log("Dispose_unit_mouse : start");

        while (true)
        {
            yield return(null);

            if (gameMGR.Mouse_Type == Mouse_Mode.ON_EXIT)
            {
                //Line_.SetActive(false);
                GridMGR.Line_Set(false);
                Check_.dispos_mode = false;
                unit_.mCollider.gameObject.SetActive(true);
                unit_.Set_Ani(Ani_Define.IDLE);

                // 왓큼로직
                if (WOTCM_MGR.Click_Switch == true && WOTCM_MGR.Click_Coru == null)
                {
                    WOTCM_MGR.Click_Coru = StartCoroutine(WOTCM_MGR.WOTCM_CLICK_END());
                }

                if (Origin_mouse_type != Mouse_on_Type)
                {
                    if (Mouse_on_Type == Board_Define.ONBOARD)
                    {
                        gameMGR.Positioned_Character.Add(Dispose_unit);
                        gameMGR.Storage_Character.Remove(Dispose_unit);
                        gameMGR.Character_origin_position.Add(unit_.Out_Node().transform);
                        unit_.On_board = true;
                    }

                    else if (Mouse_on_Type == Board_Define.ONSTORAGE)
                    {
                        gameMGR.Storage_Character.Add(Dispose_unit);
                        gameMGR.Positioned_Character.Remove(Dispose_unit);
                        gameMGR.Character_origin_position.Remove(unit_.now_node.transform);
                        unit_.On_board = false;
                    }

                    else if (Mouse_on_Type == Board_Define.ONSELLZONE)
                    {
                        if (Origin_mouse_type == Board_Define.ONBOARD)
                        {
                            gameMGR.Positioned_Character.Remove(Dispose_unit);
                            gameMGR.Character_origin_position.Remove(unit_.now_node.transform);
                        }
                        else if (Origin_mouse_type == Board_Define.ONSTORAGE)
                        {
                            gameMGR.Storage_Character.Remove(Dispose_unit);
                        }

                        gameMGR.mCharacter_Count[Dispose_unit.GetComponent <CharacterM>().Mcharacter_info.character_name]--;
                        gameMGR.All_Character.Remove(Dispose_unit);
                        PoolMGR.Push_Pooling(Dispose_unit, Dispose_unit.GetComponent <CharacterM>().Mcharacter_info);

                        gameMGR.Player_HP += 5;  //0930 _ 판매시 체력 증가

                        // 왓큼 로직
                        WOTCM_MGR.Click_Coru = StartCoroutine(WOTCM_MGR.WOTCM_SELL());
                    }
                }
                else
                {
                    if (Mouse_on_Type == Board_Define.ONBOARD)
                    {
                        gameMGR.Character_origin_position.Remove(unit_.now_node.transform);
                        gameMGR.Character_origin_position.Add(unit_.Out_Node().transform);
                    }
                }

                if (Mouse_on_Type == Board_Define.NONE || Check_.spawn_order == false)
                {
                    Debug.Log(Dispose_unit.transform.position + " / " + origin_position);
                    Dispose_unit.transform.position = origin_position;
                }

                Dispose_unit = null;
                //gameMGR.On_Touch = false;
                Check_.gameObject.SetActive(false);

                Dispose_coroutine = null;
                Mouse_on_Type     = Board_Define.NONE;
                Check_.gameObject.transform.position = Vector3.zero;
                yield break;
            }
            //왓큼 로직
            else
            {
                WOTCM_MGR.Click_Coru = null;
            }

            Check_.dispos_mode = true;
            unit_.mCollider.SetActive(false);

            if (Check_.gameObject.activeSelf)
            {
                Dispose_unit.transform.position = Check_.transform.position;
            }
            else if (Mouse_on_Type == Board_Define.NONE || Mouse_on_Type == Board_Define.ONSELLZONE && gameMGR.Mouse_Type != Mouse_Mode.ON_EXIT)
            {
                Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 21);
                Dispose_unit.transform.position = Main_camera.ScreenToWorldPoint(mousePosition);

                // 왓튼에게 Dispose_unit.transform 을 던져주면서 바라보게 만들면됨.
                WOTCM_MGR.WOTCM_CLICK_STAY(Dispose_unit.transform);
            }

            if (Mouse_on_Type == Board_Define.ONSELLZONE)
            {
                Debug.Log(Dispose_unit);
                unit_.Set_Ani(Ani_Define.VICTORY);
            }
            else
            {
                unit_.Set_Ani(Ani_Define.ATTACK);
            }
        }
    }
示例#9
0
    //전투
    IEnumerator MinusHealth_e()
    {
        Debug.Log(mPath);

        if (mPath != null)
        {
            float now_distance  = (transform.position - now_node.transform.position).sqrMagnitude;
            float next_distance = (transform.position - mPath[path_index].transform.position).sqrMagnitude;
            transform.position = now_distance > next_distance ? mPath[path_index].transform.position : now_node.transform.position;
            mPath = null;
        }
        if (Next_Move != null)
        {
            StopCoroutine(Next_Move);
            Next_Move = null;
        }

        now_node.bIsWall = false;
        mTarget          = MyTarget.GetComponent <CharacterM>();

        while (true)
        {
            if (GameMGR._state == Board_Define.GAME_BATTLE)
            {
                // 타겟이 살아있는 경우
                if (mTarget.Is_Dead == false)
                {
                    now_node.bisEnemy = true;
                    // MoveMGR.LookAt_Target(MyTarget, ref MyTrans);
                    transform.LookAt(MyTarget.transform);

                    if (MyTarget != null)
                    {
                        if (Current_MP >= 100)
                        {
                            Current_MP   = 0;
                            Skill_Switch = true;

                            if (Menemy_info.enemy_index == 3)
                            {
                                gameObject.transform.eulerAngles = new Vector3(0, 180, 0);
                            }

                            // 스킬 애니메이션 실행
                            while (true)
                            {
                                Set_Ani(Ani_Define.SKILL);

                                if (Skill_Switch == false)
                                {
                                    break;
                                }
                                yield return(null);
                            }
                        }
                        else
                        {
                            Set_Ani(Ani_Define.ATTACK);
                            Mana += Menemy_info.enemy_VaryMP;
                            yield return(new WaitForSeconds(mAnimator.GetCurrentAnimatorStateInfo(0).length));

                            if (Long_attack)
                            {
                                while (true)
                                {
                                    Set_Ani(Ani_Define.IDLE);

                                    if (On_hit_bullet)
                                    {
                                        On_hit_bullet = false;
                                        break;
                                    }
                                    yield return(null);
                                }
                            }
                        }
                    }
                }

                // 타겟이 죽은 경우
                else
                {
                    now_node.bisEnemy = false;
                    MyTarget          = null;
                    While_Fight       = null;
                    Enemy_state       = Unit_Battle_State.FINDING;
                    yield break;
                }
            }
            else if (GameMGR._state == Board_Define.GAME_BATTEL_END)
            {
                mSkillObj.SetActive(false);
                mSKillBox        = null;
                now_node.bIsWall = true;
                Enemy_state      = Unit_Battle_State.READY;
                MyTarget         = null;
                While_Fight      = null;
                is_Unit_init     = false;
                yield break;
            }
        }
    }