// 배틀 시작 이벤트가 오면 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); }
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); }
public static MonsterDeadEvent Create(MonsterUnit unit, Vector3Int deadPos) { MonsterDeadEvent e = new MonsterDeadEvent(); e.DeadUnit = unit; e.DeadPos = deadPos; return(e); }
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); }
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)); } }