Ejemplo n.º 1
0
    IEnumerator IdleImpl()
    {
        targetedMonster = null;
        var time = 0.5f;

        //Debug.Log("IdleImpl");
        while (true)
        {
            this.animator.Play($"{data.prefab_name}_Idle");
            //Debug.Log("아이들링");
            //var runtimeAC = this.animator.runtimeAnimatorController;
            //for (int i = 0; i < runtimeAC.animationClips.Length; i++)
            //{
            //    //Debug.Log($"{data.prefab_name}----------{runtimeAC.animationClips[i].name}");
            //    //Debug.Log(runtimeAC.animationClips[0].name);
            //    if (runtimeAC.animationClips[i].name == $"{data.prefab_name}_Idle")
            //    {
            //        time = runtimeAC.animationClips[i].length;
            //        break;
            //    }
            //}
            //Debug.Log($"Commander_IdleTime:{time}");
            yield return(new WaitForSeconds(calculatedAspd));

            OnIdleComplete();
            break;
        }
    }
Ejemplo n.º 2
0
    IEnumerator SearchImpl()
    {
        if (listMonsters.Count == 0)
        {
            ChangeBehavior(eHeroState.IDLE);
        }

        var layerMask = 1 << LayerMask.NameToLayer("Monster") | 1 << LayerMask.NameToLayer("Obstacle");

        while (true)
        {
            this.animator.Play("Search", -1, 0);
            //Debug.Log("Search While문");
            //Debug.Log($"{listMonsters.Count}");
            if (listMonsters.Count > 0)
            {
                var shortDis = Vector3.Distance(gameObject.transform.position, listMonsters[0].transform.position); // 첫번째를 기준으로 잡아주기

                var foundMonster = listMonsters[0];                                                                 // 첫번째를 먼저

                foreach (var monster in listMonsters)
                {
                    float dis = Vector3.Distance(gameObject.transform.position, monster.transform.position);

                    if (dis < shortDis) // 위에서 잡은 기준으로 거리 재기
                    {
                        foundMonster = monster;
                        shortDis     = dis;
                    }
                }

                //Debug.LogFormat("찾은 몬스터 {0}", foundMonster.data.prefab_name);

                //OnTargetFound();

                var        dir  = foundMonster.transform.position - this.transform.position;
                var        dis2 = dir.magnitude;
                RaycastHit hit;
                Debug.DrawRay(this.transform.position, dir * data.atkRange, Color.red, 1f);

                if (Physics.Raycast(this.transform.position, dir, out hit, data.atkRange, layerMask))
                {
                    //Debug.Log($"{hit.transform.gameObject.name} 부딪힌녀석");

                    //Debug.Log($"dis:{dis2}/atkRange:{data.atkRange}");
                    if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Monster"))
                    {
                        //Debug.Log($"{hit.transform.gameObject.name} 부딪힌녀석2222222222222");
                        this.targetedMonster = hit.transform.gameObject.GetComponentInChildren <TestMonster>();
                        OnTargetFound();
                        break;
                    }
                }
                //Debug.Log(hit.transform.gameObject.name);
            }
            yield return(null);
        }
    }
Ejemplo n.º 3
0
 public void LoadMonster(TestMonster data)
 {
     if (m_ActiveMonster != null)
     {
         Destroy(m_ActiveMonster);
         Resources.UnloadUnusedAssets();
     }
     m_ActiveMonsterData = data;
     StartCoroutine(LoadMonster(data.Prefab));
     m_LastSpell = null;
 }
Ejemplo n.º 4
0
    IEnumerator IdleImpl()
    {
        targetedMonster = null;

        //Debug.Log("IdleImpl");
        while (true)
        {
            this.animator.Play($"{data.anim_name}_Idle");
            //Debug.Log("아이들링");
            var idleTime = FormulaCalculator.GetInstance().CalculateIdleTime(this.calculatedAspd, this.bySelfDecreaedDelay, this.byOtherDecreasedDelay);
            Debug.Log($"idleTime: {idleTime}");

            yield return(new WaitForSeconds(idleTime));

            OnIdleComplete();
            break;
        }
    }
Ejemplo n.º 5
0
    private void TabMonsterSpell()
    {
        TestMonster activeMonsterData = m_Main.ActiveMonsterData;

        if (activeMonsterData == null || activeMonsterData.AvailableSpells == null || activeMonsterData.AvailableSpells.Length == 0)
        {
            return;
        }
        GUILayout.Label("Target", new GUILayoutOption[0]);
        m_TargetIndex      = (ETarget)GUILayout.SelectionGrid((Int32)m_TargetIndex, m_PartySelection, m_PartySelection.Length, (GUILayoutOption[])null);
        m_MonsterSpellView = GUILayout.BeginScrollView(m_MonsterSpellView, new GUILayoutOption[]
        {
            GUILayout.MaxHeight(200f)
        });
        foreach (TestSpell testSpell in activeMonsterData.AvailableSpells)
        {
            if (GUILayout.Button(testSpell.Name, new GUILayoutOption[0]))
            {
                m_Main.MonsterCastSpell(m_TargetIndex, testSpell);
            }
        }
        GUILayout.EndScrollView();
    }
Ejemplo n.º 6
0
    IEnumerator SpawnMonsterImpl(int index, WaveData waveData)
    {
        var        data   = DataManager.GetInstance().dicMonsterData[waveData.monster_id];
        GameObject prefab = (GameObject)(from obj in App.instance.resource
                                         where obj.name == data.prefab_name
                                         select obj).FirstOrDefault();

        EasyObjectPool.instance.MakePoolInfo(data.name, prefab);

        var monsterPosition = new Vector3(waveData.x, waveData.y, waveData.z);

        for (int i = 0; i < waveData.count; i++)
        {
            GameObject go = EasyObjectPool.instance.GetObjectFromPool(data.name, monsterPosition, Quaternion.identity);

            TestMonster monster = go.GetComponent <TestMonster>();
            if (monster == null)
            {
                monster = go.AddComponent <TestMonster>();
            }

            var destination_x = UnityEngine.Random.Range(waveData.destination_x - 1, waveData.destination_x + 1);
            var destination   = new Vector3(destination_x, waveData.destination_y, waveData.destination_z);

            monster.Init(destination, DataManager.GetInstance().dicMonsterData[waveData.monster_id], fence, whiteMaterial);

            monster.monsterAttackEvent.monsterAttackAction = () =>
            {
                fence.Hit(monster.data.damage);
            };

            monster.ChangeBehavior(TestMonster.eMonsterState.MOVE);

            listMonsters.Add(monster);

            monster.OnCompleteMove = () =>
            {
                monster.previousState = monster.currentState;
                monster.ChangeBehavior(TestMonster.eMonsterState.FOLLOW);
            };
            monster.OnCompleteKnockBack = () =>
            {
                if (monster.previousState == TestMonster.eMonsterState.MOVE)
                {
                    monster.previousState = TestMonster.eMonsterState.FOLLOW;
                }
                monster.ChangeBehavior(monster.previousState);
                monster.previousState = monster.currentState;
            };
            monster.OnCompleteStun = () =>
            {
                monster.ChangeBehavior(monster.previousState);
                monster.previousState = monster.currentState;
            };
            monster.OnMonsterDie = () =>
            {
                //Debug.Log($"OnMonsterDie{monster.name}");
                monster.previousState = monster.currentState;
                monster.ChangeBehavior(TestMonster.eMonsterState.DIE);
                bool isSuccess = listMonsters.Remove(monster);
                //Debug.Log($"isSuccess: {isSuccess}");
                OnMonsterRemovedFromList();
            };
            monster.OnMonsterDead = () =>
            {
                monster.previousState = monster.currentState;
                monster.ChangeBehavior(TestMonster.eMonsterState.IDLE);
                EasyObjectPool.instance.ReturnObjectToPool(monster.gameObject);
            };
            monster.OnDisplayHudText = (damage) =>
            {
                DisplayHudText(uiRoot, monster.transform.position, damage);
            };
            yield return(new WaitForSeconds(waveData.term));
        }

        OnStopSpawnMonster(index);
    }