// Enemy Attack private void SkeletonAttack(Vector3 _enemyDesti) { // Set Enemey Walk to FALSE e_spriteManager.SetMoving(false); // Distance between Player and Enemy. distanceApart = (transform.position - _enemyDesti).magnitude; // Change State to CHASE if Player is outside of Attack Range. if (distanceApart > enemyAttackRange) { skeletonState = EnemySkeletonState.CHASE; } // Enemy Attack // Start CountDownTimer, so that Enemy will deal damage to Player for every x secs. canCountDownAttackTimer = true; // If Enemy can Attack if (canAttack) { // Reset enemyAttackTimer = 3f; canCountDownAttackTimer = false; canAttack = false; // Start to attack. player.GetComponent <Player2D_StatsHolder>().Health -= Calculator.Instance.CalculateDamage(attack, player.GetComponent <Player2D_StatsHolder>().Defense); e_spriteManager.SetAttack(true); } }
// Enemy Walk - waypoint to waypoint private void SkeletonPatrol(Vector3 _enemyDesti) { // Set Enemey Walk to TRUE e_spriteManager.SetMoving(true); // Distance between Player and Enemy. distanceApart = (transform.position - _enemyDesti).magnitude; // Change State to CHASE if Player is within its range. if (distanceApart < enemyChaseRange) { skeletonState = EnemySkeletonState.CHASE; } // Patrolling // if reached currwaypointID reached, set nextID to currID float dist2waypoint = (GetComponent <Transform>().position - m_Waypoint[m_currWaypointID]).magnitude; if (dist2waypoint <= movespeed * Time.deltaTime / maxSpeed) //if it is possible to reach the waypoint by this frame { ++m_currWaypointID; m_currWaypointID %= m_Waypoint.Length; } else { // else move towards waypoint Vector3 dir = (m_Waypoint[m_currWaypointID] - GetComponent <Transform>().position).normalized; GetComponent <Transform>().position += dir * movespeed * Time.deltaTime / maxSpeed; } }
// Enemy Idle private void SkeletonIdle(Vector3 _enemyDesti) { // Set Enemey Walk to FALSE e_spriteManager.SetMoving(false); // Distance between Player and Enemy. distanceApart = (transform.position - _enemyDesti).magnitude; // Change State to CHASE if Player is near. if (distanceApart < enemyChaseRange) { skeletonState = EnemySkeletonState.CHASE; } // Change State to PATROL if Player is not near, and x secs has passed. canCountDownPatrolTimer = true; // If Enemy Can Patrol if (canPatrol) { // Reset enemyToPatrolTimer = 5f; canCountDownPatrolTimer = false; canPatrol = false; skeletonState = EnemySkeletonState.PATROL; } }
// Use this for initialization public void Init(int _level) { player = GameObject.FindGameObjectWithTag("Player").GetComponent <Player2D_Manager>().gameObject; playerStats = GameObject.FindGameObjectWithTag("Player").GetComponent <Player2D_StatsHolder>(); e_spriteManager = GetComponent <SpriteManager>(); // set default equipments(will be moved to savefile) e_spriteManager.SetHeadEquip(SpriteManager.S_Wardrobe.HEADP_NULL); e_spriteManager.SetTopEquip(SpriteManager.S_Wardrobe.TOP_NULL); e_spriteManager.SetBottomEquip(SpriteManager.S_Wardrobe.BOTTOM_NULL); e_spriteManager.SetShoesEquip(SpriteManager.S_Wardrobe.SHOES_NULL); e_spriteManager.SetWeaponEquip(SpriteManager.S_Weapon.DAGGER); chasingTimer = 4f; maxSpeed = 5f; // Setting Skeleton Initial State as IDLE. skeletonState = EnemySkeletonState.IDLE; enemyToPatrolTimer = 5f; canCountDownPatrolTimer = false; canPatrol = false; // Setting the range for Enemy State to be CHASE. enemyChaseRange = 5f; // Setting the range for Enemy State to be ATTACk. enemyAttackRange = 1f; enemyAttackTimer = 1f; canCountDownAttackTimer = false; canAttack = false; //Initialize Stats from the leveling system enemyLevel = _level; levelingSystem = GetComponent <LevelingSystem>(); levelingSystem.Init(this, false); }
// Handles Player Attack Enemy private void PlayerHitEnemy() { if (GetComponent <CollisionPlayerMelee>().Attacked) { health -= Calculator.Instance.CalculateDamage(playerStats.Attack, defense); GetComponent <CollisionPlayerMelee>().Attacked = false; } if (health <= 0) { skeletonState = EnemySkeletonState.DIE; } }
// Enemy Chase private void SkeletonChase(Vector3 _enemyDesti) { // Set Enemey Walk to TRUE e_spriteManager.SetMoving(true); // Enemy will walk to Player Position smoothly. transform.position = Vector2.SmoothDamp(transform.position, _enemyDesti, ref currentVelocity, chasingTimer, maxSpeed, Time.deltaTime); // Distance between Player and Enemy. distanceApart = (transform.position - _enemyDesti).magnitude; // Change State to ATTACK if Player is within range. if (distanceApart < enemyAttackRange) { GameObject.FindGameObjectWithTag("GameScript").GetComponent <AchievementsManager>().UpdateProperties("ENEMY_FIGHT", 1); skeletonState = EnemySkeletonState.ATTACK; } // Change State to IDLE if Player is outside of Chase Range. if (distanceApart > enemyChaseRange) { skeletonState = EnemySkeletonState.IDLE; } }