protected virtual void OnCollisionEnter2D(Collision2D collision) { overlapCollisions++; if (IsBelowThanMe(collision.gameObject)) { IHaveTrampleEffect trampleObj = collision.gameObject.GetComponent <IHaveTrampleEffect>(); if (trampleObj != null) { trampleObj.OnBeenTrampled(this); } } }
protected override IEnumerator MovingImpl() { Collider2D target = null; while (canMove) { if (lastMoveTime <= moveTime) { lastMoveTime += Time.deltaTime; } else { lastMoveTime = 0f; switch (moveState.currState) { case MoveState.Idle: { target = FindAnythingOnDirection(Vector2.down, 0.3f); if (target == null) { ChangeState(MoveState.Fall); } else { target = FindAnythingOnDirection(moveDir, moveDistance); if (target == null || target.isTrigger == true) { ChangeState(MoveState.Move); } } } break; case MoveState.Move: case MoveState.Run: { target = FindAnythingOnDirection(Vector2.down, 0.3f); if (target == null) { ChangeState(MoveState.Fall); } else { target = FindAnythingOnDirection(moveDir, moveDistance); if (target == null || target.isTrigger == true) { Move(); } else { target = FindAnythingOnDirection(moveDir, sightDistance); if (target != null) { IHandlePlayerSought playerSought = target.gameObject.GetComponent <IHandlePlayerSought>(); if (playerSought != null) { playerSought.OnPlayerSought(this); } } } } } break; case MoveState.Jump: { target = FindAnythingOnDirection(Vector2.down, 0.3f); if (target == null) { ChangeState(MoveState.Fall); } } break; case MoveState.Fall: { target = FindAnythingOnDirection(Vector2.down, rigidBody2D.gravityScale * moveTime); if (target != null) { IHaveTrampleEffect ihte = target.gameObject.GetComponent <IHaveTrampleEffect>(); if (ihte != null) { ihte.OnBeenTrampled(this); } else { if (IsGround(target)) { ChangeState(MoveState.Idle); } } } else { fallDistance += rigidBody2D.gravityScale * moveTime; } //wait for hit collider } break; case MoveState.Crawl: { } break; case MoveState.FindThing: { Move(); target = FindAnythingOnDirection(moveDir, sightDistance); IHandlePlayerSought playerSought = target.gameObject.GetComponent <IHandlePlayerSought>(); if (playerSought == null) { ChangeState(MoveState.Idle); } } break; case MoveState.Attack: { ChangeState(MoveState.Idle); } break; default: break; } } yield return(null); } yield return(null); }