/// <summary> /// Script entry point /// </summary> private void Start() { m_eDB = GameObject.FindObjectOfType <EntityDatabase>(); m_gData = GameObject.FindObjectOfType <GlobalData>(); m_enemyAnimator = GetComponent <Animator>(); m_eDB.RegisterEntity(m_entityType, this.gameObject); m_currentMoveX = 0; m_currentMoveY = 0; if (m_entityType == m_entityTypes.TYPE_ENEMY) { int randChance = Random.Range(0, 2); if (m_xMoveRange != 0 && randChance == 0) { m_currentDirectionX = m_moveDirections.Left; } else if (m_xMoveRange != 0 && randChance == 1) { m_currentDirectionX = m_moveDirections.Right; } else { m_currentDirectionX = m_moveDirections.None; } if (m_yMoveRange != 0 && randChance == 0) { m_currentDirectionY = m_moveDirections.Up; } else if (m_yMoveRange != 0 && randChance == 1) { m_currentDirectionY = m_moveDirections.Down; } else { m_currentDirectionY = m_moveDirections.None; } } else if (m_entityType == m_entityTypes.TYPE_BOSSENEMY) { if (m_yMoveRange != 0) { m_currentDirectionY = m_moveDirections.Down; } else { m_currentDirectionY = m_moveDirections.None; } m_currentDirectionX = m_moveDirections.None; } m_canShootBullet = true; m_isAlive = true; }
/// <summary> /// Sets the direction of the bullet /// </summary> /// <param name="direction">The direction the bullet should follow</param> public void SetDirection(m_moveDirections direction) { if (direction == m_moveDirections.None) { m_bulletDirection = m_moveDirections.Up; } else { m_bulletDirection = direction; } }
/// <summary> /// Sets the looking direction /// </summary> private void SetLookDirection() { if (m_currentDirectionY == m_moveDirections.Up) { if (m_currentDirectionX == m_moveDirections.Left) { m_lookDirection = m_moveDirections.UpLeft; } else if (m_currentDirectionX == m_moveDirections.Right) { m_lookDirection = m_moveDirections.UpRight; } else { m_lookDirection = m_moveDirections.Up; } } else if (m_currentDirectionY == m_moveDirections.Down) { if (m_currentDirectionX == m_moveDirections.Left) { m_lookDirection = m_moveDirections.DownLeft; } else if (m_currentDirectionX == m_moveDirections.Right) { m_lookDirection = m_moveDirections.DownRight; } else { m_lookDirection = m_moveDirections.Down; } } else { if (m_currentDirectionX == m_moveDirections.Left) { m_lookDirection = m_moveDirections.Left; } else if (m_currentDirectionX == m_moveDirections.Right) { m_lookDirection = m_moveDirections.Right; } else if (m_currentDirectionX == m_moveDirections.None) { m_lookDirection = m_moveDirections.None; } } m_enemyAnimator.SetFloat("Direction", (float)m_lookDirection); }
/// <summary> /// Sets the direction variables /// </summary> private void SetDirection() { if (m_keyUp) { if (m_keyLeft) { m_pDirection = m_moveDirections.UpLeft; } else if (m_keyRight) { m_pDirection = m_moveDirections.UpRight; } else { m_pDirection = m_moveDirections.Up; } } else if (m_keyDown) { if (m_keyLeft) { m_pDirection = m_moveDirections.DownLeft; } else if (m_keyRight) { m_pDirection = m_moveDirections.DownRight; } else { m_pDirection = m_moveDirections.Down; } } else { if (m_keyLeft) { m_pDirection = m_moveDirections.Left; } else if (m_keyRight) { m_pDirection = m_moveDirections.Right; } else { m_pDirection = m_moveDirections.None; } } m_playerAnimator.SetFloat("Direction", (float)m_pDirection); }
/// <summary> /// Do the thing the enemy should do. Either walking or shooting /// </summary> private void DoEnemyAction() { if (GetDistanceFromPlayer() > m_attackRange) { m_enemyAnimator.speed = 1; WalkPath(); } else if (GetDistanceFromPlayer() <= m_attackRange && m_canShootBullet == true) { m_lookDirection = GetPlayerDirection(); m_enemyAnimator.speed = 0; ShootBullet(); m_enemyAnimator.SetFloat("Direction", (float)m_lookDirection); } }
/// <summary> /// Makes the enemy walk over it's predefined move range /// </summary> private void WalkPath() { m_movement = Vector2.zero; if (m_xMoveRange != 0) { if (m_currentDirectionX == m_moveDirections.Left) { m_movement.x -= m_moveSpeed; m_currentMoveX -= m_moveSpeed; if (m_currentMoveX <= m_xMoveRange * -1) { if (m_entityType == m_entityTypes.TYPE_BOSSENEMY) { m_currentDirectionX = m_moveDirections.None; } else { m_currentDirectionX = m_moveDirections.Right; } } } else if (m_currentDirectionX == m_moveDirections.Right) { m_movement.x += m_moveSpeed; m_currentMoveX += m_moveSpeed; if (m_currentMoveX >= m_xMoveRange) { if (m_entityType == m_entityTypes.TYPE_BOSSENEMY) { m_currentDirectionX = m_moveDirections.None; } else { m_currentDirectionX = m_moveDirections.Left; } } } } if (m_yMoveRange != 0) { if (m_currentDirectionY == m_moveDirections.Up) { m_movement.y += m_moveSpeed; m_currentMoveY += m_moveSpeed; if (m_currentMoveY >= m_yMoveRange) { if (m_entityType == m_entityTypes.TYPE_BOSSENEMY) { m_currentDirectionY = m_moveDirections.None; } else { m_currentDirectionY = m_moveDirections.Down; } } } else if (m_currentDirectionY == m_moveDirections.Down) { m_movement.y -= m_moveSpeed; m_currentMoveY -= m_moveSpeed; if (m_currentMoveY <= m_yMoveRange * -1) { if (m_entityType == m_entityTypes.TYPE_BOSSENEMY) { m_currentDirectionY = m_moveDirections.None; } else { m_currentDirectionY = m_moveDirections.Up; } } } } transform.Translate(m_movement * Time.deltaTime); SetLookDirection(); }
/// <summary> /// Calculates the movement things /// </summary> private void DoMovement() { m_pMovement = Vector2.zero; Vector2 currentPosition = transform.position; m_keyUp = Input.GetKey(KeyCode.W); m_keyDown = Input.GetKey(KeyCode.S); m_keyLeft = Input.GetKey(KeyCode.A); m_keyRight = Input.GetKey(KeyCode.D); SetDirection(); switch (m_pDirection) { case m_moveDirections.Up: MovePlayer(new Vector2(m_pMovement.x, m_pMovement.y + m_moveSpeed)); break; case m_moveDirections.Down: if (Camera.main.WorldToViewportPoint(transform.position).y > 0.06F) { MovePlayer(new Vector2(m_pMovement.x, m_pMovement.y - m_moveSpeed)); } break; case m_moveDirections.Left: if (Camera.main.WorldToViewportPoint(transform.position).x > 0) { MovePlayer(new Vector2(m_pMovement.x - m_moveSpeed, m_pMovement.y)); } break; case m_moveDirections.Right: if (Camera.main.WorldToViewportPoint(transform.position).x < 1) { MovePlayer(new Vector2(m_pMovement.x + m_moveSpeed, m_pMovement.y)); } break; case m_moveDirections.UpRight: if (Camera.main.WorldToViewportPoint(transform.position).x < 1) { MovePlayer(new Vector2(m_pMovement.x + m_moveSpeed, m_pMovement.y + m_moveSpeed)); } break; case m_moveDirections.UpLeft: if (Camera.main.WorldToViewportPoint(transform.position).x > 0) { MovePlayer(new Vector2(m_pMovement.x - m_moveSpeed, m_pMovement.y + m_moveSpeed)); } break; case m_moveDirections.DownRight: if (Camera.main.WorldToViewportPoint(transform.position).x < 1 && Camera.main.WorldToViewportPoint(transform.position).y > 0.06F) { MovePlayer(new Vector2(m_pMovement.x + m_moveSpeed, m_pMovement.y - m_moveSpeed)); } break; case m_moveDirections.DownLeft: if (Camera.main.WorldToViewportPoint(transform.position).x > 0 && Camera.main.WorldToViewportPoint(transform.position).y > 0.06F) { MovePlayer(new Vector2(m_pMovement.x - m_moveSpeed, m_pMovement.y - m_moveSpeed)); } break; default: m_pDirection = m_moveDirections.None; break; } SetDirection(); }