Exemple #1
0
        // 구독한 이벤트 처리
        public sealed override bool OnEvent(IEvent e)
        {
            if (e.GetType() == typeof(DamageEvent))
            {
                DamageEvent DamageEvent = e as DamageEvent;
                if (DamageEvent.Target == (Unit)this)
                {
                    GameManager.Instance.EffectSystem.CreateEffect("SwordImpactRed", this.gameObject.transform.position + new Vector3(-0.1f, 0.4f, 0), new Vector3(0.4f, 0.4f, 0.4f), Quaternion.Euler(new Vector3(-90, 0, 0)), 2);
                    DamageEvent newDamageEvent = DamageEvent.Create(DamageEvent.Publisher, DamageEvent.Target, DamageEvent.Damage);

                    HP -= newDamageEvent.Damage;
                    if (HP <= 0)
                    {
                        currentState = MonsterUnitState.Dead;
                    }
                }
            }
            else if (e.GetType() == typeof(PlayerUnitSummonEvent))
            {
                PlayerUnitSummonEvent summonEvent = e as PlayerUnitSummonEvent;
                if (currentState == MonsterUnitState.Walk)
                {
                    for (int i = 0; i < rangeTile.Count; i++)
                    {
                        if (summonEvent.SummonTilePos == UnitPosition + rangeTile[i])
                        {
                            Target       = summonEvent.SummonUnit;
                            currentState = MonsterUnitState.Attack;
                        }
                    }
                }
            }
            return(false);
        }
Exemple #2
0
 protected void Walk(float dt)
 {
     monsterTransform.position = Vector3.MoveTowards(monsterTransform.position, pathList[0], dt * speed);
     // 거리가 특정 거리 이하 일때 발생
     if (Vector3.Distance(monsterTransform.position, pathList[0]) <= 0.1)
     {
         currentState = MonsterUnitState.SetPath;
     }
     else if (Vector3.Distance(monsterTransform.position, pathList[0]) <= 0.5 && pathList[0] != UnitPosition)
     {
         // 절반정도 진입했으면 TileEnter, TileLeave발행하고 포함된 타일 변경 + 적이 있는지 체크
         GameManager.Instance.MessageSystem.Publish(TileLeaveEvent.Create(UnitPosition, this));
         UnitPosition = pathList[0];
         GameManager.Instance.MessageSystem.Publish(TileEnterEvent.Create(UnitPosition, this));
         if (CheckPlayerUnit())
         {
             currentState = MonsterUnitState.Attack;
         }
     }
 }
Exemple #3
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));
     }
 }