public DialogueManager dialogueManager; // Getting the dialogue manager // Use this for initialization void Start() { // Check between levels if player exists if (!playerExists) { playerExists = true; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } animator = GetComponent <Animator>(); // Getting Animator myRigidbody = GetComponent <Rigidbody2D>(); // Getting Rigidbody theCursor = FindObjectOfType <MouseController>(); // Getting the mouse // Getting the player level stats playerStats = gameObject.GetComponent <PlayerLevelStats>(); // Getting solid layers collider solidCollider = GameObject.FindGameObjectWithTag("Solid").GetComponent <PolygonCollider2D>(); }
private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); } else { Destroy(this.gameObject); } m_AllLevels = new List <string>(); m_AvailableLevels = new List <string>(); m_AlreadyPlayedLevels = new List <string>(); LoadAllLevels(); CurrentDifficulty = 0; InitializePlayerInventory(); m_PlayerLevelStats = new PlayerLevelStats(); SceneManager.sceneLoaded += OnSceneLoaded; }
// Auto-attack the player // TODO: SET THIS TO AUTO ATTACK FUNCTION public void AttackPlayer() { PlayerLevelStats playerStats = thePlayer.GetComponent <PlayerLevelStats>(); EnemyStatsManager enemyStats = gameObject.GetComponent <EnemyStatsManager>(); if (distanceFromPlayer <= attackRange) { // Don't move if in attack range enemyRigidbody.velocity = Vector2.zero; // Check if one of the 2 halves is over if (attackTimerCounter <= 0) { // Set the counter back to the max attackTimerCounter = attackTimer; // If attack is not on cooldown after one half if (!attackCooldown) { int i = enemyStats.enemyLevel; float enemyDamageAfterMultipliers = attackDamage; // Check if player is higher level than enemy if (enemyStats.enemyLevel > playerStats.currentLevel) { while (i > playerStats.currentLevel) { // Multiply damage by 150% enemyDamageAfterMultipliers *= 1.5f; i--; } } else if (enemyStats.enemyLevel < playerStats.currentLevel) { while (i < playerStats.currentLevel) { // Reduce damage by 50% enemyDamageAfterMultipliers *= 0.5f; i++; } } // Equation for the damage reduction per defense float damageReductionPercentage = 100f - Mathf.Pow(10f, 2 - 0.0030103f * playerStats.defense); enemyDamageAfterMultipliers -= enemyDamageAfterMultipliers * (damageReductionPercentage / 100); // Crit chance enemyDamageAfterMultipliers = CheckChance(enemyDamageAfterMultipliers, critChance, critMultiplier); // Reduce damage chance enemyDamageAfterMultipliers = CheckChance(enemyDamageAfterMultipliers, playerStats.reduceDamageChance, -playerStats.reduceDamageMultiplier); // Miss chance enemyDamageAfterMultipliers = CheckChance(enemyDamageAfterMultipliers, playerStats.missChance, -100); // Deal damage thePlayer.GetComponent <PlayerHealthManager>().SetCurrentHeatlh(-Mathf.RoundToInt(enemyDamageAfterMultipliers), true); // Set the cooldown to true attackCooldown = true; } else { // Set the cooldown to false attackCooldown = false; } } // Countdown time attackTimerCounter -= Time.deltaTime; } else { // Enemy is moving //transform.position = Vector3.MoveTowards(transform.position, thePlayer.transform.position, moveSpeed * Time.deltaTime); enemyRigidbody.velocity = new Vector2((thePlayer.transform.position.x - transform.position.x) / distanceFromPlayer * moveSpeed, (thePlayer.transform.position.y - transform.position.y) / distanceFromPlayer * moveSpeed); } }
public bool maxHealthBasedRegen; // Check if regen based on max or missing health // Use this for initialization void Start() { currentHealthPoints = maxHealthPoints; // Set current health to maximum playerLevelStats = FindObjectOfType <PlayerLevelStats>(); healthRegenPercentage /= 100; // Change percentage to decimal }