Ejemplo n.º 1
0
        // 배틀 시작 이벤트가 오면 init하고 자기 자신 업데이트에 넣기
        // 몬스터가 죽는 이벤트가 오면 카운트 증가시키고 죽은 몬스터가 현재 스테이지의 몬스터 수가 되면 배틀 종료 이벤트 발행
        public bool OnEvent(IEvent e)
        {
            Type eventType = e.GetType();

            if (eventType == typeof(BattleStageStartEvent))
            {
                BattleStageStartEvent battleStateStartEvent = e as BattleStageStartEvent;
                Init(battleStateStartEvent.Stage);
                GameManager.Instance.AddUpdate(this);
                return(true);
            }
            else if (eventType == typeof(MonsterDeadEvent))
            {
                MonsterDeadEvent monsterDeadEvent = e as MonsterDeadEvent;
                stageMonsterList.Remove(monsterDeadEvent.DeadUnit);
                deadMonsterCount++;
                if (deadMonsterCount >= currentStageMonsterCount)
                {
                    if (GameManager.Instance.Stage + 1 >= stageGroupData.StageDataGroup.Count)
                    {
                        CoroutineHandler.Start_Coroutine(Ending());
                    }
                    else
                    {
                        CoroutineHandler.Start_Coroutine(EndBattleStage());
                    }
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
        public bool OnEvent(IEvent e)
        {
            Type eventType = e.GetType();

            // 자기 타일에 몬스터가 들어오거나 나갈 때 리스트에서 제거
            if (eventType == typeof(TileEnterEvent))
            {
                TileEnterEvent enterEvent = e as TileEnterEvent;
                if (enterEvent.EnterTilePos.x == tileTransform.position.x && enterEvent.EnterTilePos.z == tileTransform.position.z)
                {
                    containMonsterUnitList.Add((MonsterUnit)enterEvent.EnterUnit);

                    //Debug.Log(tileTransform.position + " 몬스터 IN " + containMonsterUnitList.Count);
                }
                return(true);
            }
            else if (eventType == typeof(TileLeaveEvent))
            {
                TileLeaveEvent leaveEvent = e as TileLeaveEvent;
                if (leaveEvent.LeaveTilePos.x == tileTransform.position.x && leaveEvent.LeaveTilePos.z == tileTransform.position.z)
                {
                    containMonsterUnitList.Remove((MonsterUnit)leaveEvent.LeaveUnit);

                    //Debug.Log(tileTransform.position + " 몬스터 OUT " + containMonsterUnitList.Count);
                }
                return(true);
            }
            else if (eventType == typeof(MonsterDeadEvent))
            {
                MonsterDeadEvent deadEvent = e as MonsterDeadEvent;
                if (deadEvent.DeadPos.x == tileTransform.position.x && deadEvent.DeadPos.z == tileTransform.position.z)
                {
                    containMonsterUnitList.Remove(deadEvent.DeadUnit);
                    //Debug.Log(tileTransform.position + " 몬스터 Dead " + containMonsterUnitList.Count);
                }
                return(true);
            }
            else if (eventType == typeof(PlayerUnitSummonEvent))
            {
                PlayerUnitSummonEvent summonEvent = e as PlayerUnitSummonEvent;
                if (summonEvent.SummonTilePos.x == tileTransform.position.x && summonEvent.SummonTilePos.z == tileTransform.position.z)
                {
                    containPlayerUnit = summonEvent.SummonUnit;
                    //Debug.Log(tileTransform.position + " 유닛 Summon " + containPlayerUnit);
                }
                return(true);
            }
            else if (eventType == typeof(PlayerUnitDeadEvent))
            {
                PlayerUnitDeadEvent deadEvent = e as PlayerUnitDeadEvent;
                if (deadEvent.DeadPos.x == tileTransform.position.x && deadEvent.DeadPos.z == tileTransform.position.z)
                {
                    containPlayerUnit = null;
                    //Debug.Log(tileTransform.position + " 유닛 Dead " + containPlayerUnit);
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 3
0
        public static MonsterDeadEvent Create(MonsterUnit unit, Vector3Int deadPos)
        {
            MonsterDeadEvent e = new MonsterDeadEvent();

            e.DeadUnit = unit;
            e.DeadPos  = deadPos;

            return(e);
        }
Ejemplo n.º 4
0
        public sealed override IEnumerator Dead()
        {
            Dispose(false);

            GameManager.Instance.MessageSystem.Publish(MonsterDeadEvent.Create(this, UnitPosition));
            UnitAnimator.SetBool("dead", true);
            yield return(new WaitForSeconds(0.2f));

            GameManager.Instance.EffectSystem.CreateEffect("DeathStandard", this.gameObject.transform.position + new Vector3(0, 0.1f, -0.1f), new Vector3(0.25f, 0.25f, 0.25f), Quaternion.Euler(new Vector3(-90, 0, 0)), 2);
            SoundManager.Instance.PlaySfx("Weird0" + Random.Range(1, 5), 0.1f);
            yield return(new WaitForSeconds(0.1f));

            float alpha = spriteRenderer.material.color.a;

            for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / 1)
            {
                Color newColor = new Color(1, 1, 1, Mathf.Lerp(alpha, 0, t));
                spriteRenderer.material.color = newColor;
                yield return(null);
            }
            UnitAnimator.SetBool("dead", false);
            FieldObjectManager.Instance.ReleaseUnit(unitName, this);
        }
Ejemplo n.º 5
0
 protected void SetPath()
 {
     // 다음 노드로 이동
     if (pathList.Count > 1)
     {
         pathList.RemoveAt(0);
         direction = ((Vector3)pathList[0] - UnitPosition).normalized;
         if (UnitPosition.x <= pathList[0].x)
         {
             spriteRenderer.flipX = true;
         }
         else
         {
             spriteRenderer.flipX = false;
         }
         currentState = MonsterUnitState.Walk;
     }
     else
     {
         Dispose(true);
         GameManager.Instance.MessageSystem.Publish(MonsterDeadEvent.Create(this, UnitPosition));
     }
 }