private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Minion" && playerController.normalAttack == true) { //Debug.Log(this.name + " Hit " + other.gameObject.name); //Find Minion and Minion GO Minion m = DictionaryHelper.KeyByValue <Minion, GameObject>(cgc.minionGameObjectMap, other.gameObject); GameObject m_go = cgc.minionGameObjectMap[m]; // Calculate DMG m.MinionGethit(); if (m.canTakeDMG == true) { FloatingTextController.CreateFloatingDMG(m.CalAndTakeDamage(), other.transform); } // Update Health Bar GameObject m_canvas = m_go.transform.Find("CharCanvas").gameObject; if (m_canvas.activeSelf == false) { m_canvas.SetActive(true); } HealthBar hb = m_canvas.GetComponentInChildren <HealthBar>(); hb.HealthBarChange(m.HP, m.MaxHP); } }
private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Minion" && playerController.normalAttack == true) { //Debug.Log(this.name + " Hit " + other.gameObject.name); FloatingTextController.CreateFloatingDMG("555", other.transform); Minion m = DictionaryHelper.KeyByValue <Minion, GameObject>(cgc.minionGameObjectMap, other.gameObject); Debug.Log(m.name); } }
private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Player" && m.minionState == MinionState.Attack) { //Debug.Log(MinionGO.name + " Hit " + other.gameObject.name); FloatingTextController.CreateFloatingDMG(p.TakeDamage(m), other.transform); // Update Health Bar playerHPBar.HealthBarChange(p.HP, p.MaxHP); } }
private void OnMinionChanged(Minion m) { //Debug.Log("OnMinionChanged"); if (minionGameObjectMap.ContainsKey(m) == false) { Debug.LogError("OnCharacterChanged -- Minion not in minionGameObjectMap."); return; } GameObject m_go = minionGameObjectMap[m]; Animator m_anim = m_go.GetComponent <Animator>(); // Find Canvas in child GameObject m_canvas = m_go.transform.Find("CharCanvas").gameObject; // Rotate canvas to main camera m_canvas.transform.position = m_go.transform.position + new Vector3(0, 0, 0.5f); m_canvas.transform.rotation = Camera.main.transform.rotation; // Set position if (m.minionState == MinionState.ChaseStraight) { Vector3 actualTargetPos = new Vector3(playerGO.transform.position.x, 0, playerGO.transform.position.z); m_go.transform.position = Vector3.MoveTowards(m_go.transform.position, actualTargetPos, m.speed * Time.deltaTime); m.currTile = new Tile(World, Mathf.RoundToInt(m_go.transform.position.x), Mathf.RoundToInt(m_go.transform.position.z)); } else { m_go.transform.position = new Vector3(m.X, 0, m.Z); } // If minion got hit from behind , rotate to player and Attack player if (m.minionState2 == MinionState2.GetHit && m.seePlayer == false) { // Vector3 direction = new Vector3(playerGO.transform.position.x - m_go.transform.position.x,0,playerGO.transform.position.z - m_go.transform.position.z); // m_go.transform.rotation = Quaternion.Slerp(m_go.transform.rotation, Quaternion.LookRotation(direction), 0.02f); m.seePlayer = true; m.playerInATKRange = true; } // If not see Player, Rotate to Patrol direction if (m.seePlayer == false) { if (m.directionVector != Vector3.zero) { m_go.transform.rotation = Quaternion.Slerp(m_go.transform.rotation, Quaternion.LookRotation(m.directionVector), 0.08f); } } // If see Player, Rotate to player (not Y position) else { Vector3 direction = new Vector3(playerGO.transform.position.x - m_go.transform.position.x, 0, playerGO.transform.position.z - m_go.transform.position.z); m_go.transform.rotation = Quaternion.Slerp(m_go.transform.rotation, Quaternion.LookRotation(direction), 0.04f); } // Set Animator variable //if (m.minionState2 == MinionState2.GetHit // && (m.minionState == MinionState.Idle // || m.minionState == MinionState.Patrol // || m.minionState == MinionState.Chase)) { // m_anim.SetBool("isIdle", false); // m_anim.SetBool("isWalk", false); // m_anim.SetBool("isAttack", false); // m_anim.SetBool("isGetHit", true); // m_anim.SetBool("isDie", false); //} switch (m.minionState) { case MinionState.Idle: m_anim.SetBool("isIdle", true); m_anim.SetBool("isWalk", false); m_anim.ResetTrigger("isAttack"); //m_anim.SetBool("isAttack",false); m_anim.SetBool("isGetHit", false); m_anim.SetBool("isDie", false); break; case MinionState.Patrol: m_anim.SetBool("isIdle", false); m_anim.SetBool("isWalk", true); m_anim.ResetTrigger("isAttack"); //m_anim.SetBool("isAttack",false); m_anim.SetBool("isGetHit", false); m_anim.SetBool("isDie", false); break; case MinionState.Chase: m_anim.SetBool("isIdle", false); m_anim.SetBool("isWalk", true); m_anim.ResetTrigger("isAttack"); //m_anim.SetBool("isAttack",false); m_anim.SetBool("isGetHit", false); m_anim.SetBool("isDie", false); break; // Melee Minion Attack by do animation with Hitbox collider // Range Minion Instantiate projectile case MinionState.Attack: m_anim.SetBool("isIdle", false); m_anim.SetBool("isWalk", false); m_anim.SetTrigger("isAttack"); //m_anim.SetBool("isAttack",true); m_anim.SetBool("isGetHit", false); m_anim.SetBool("isDie", false); if (m.combatType == CombatType.Range) { Instantiate(characterGOS[m.objectType + "_Projectile"], m_go.transform.position, m_go.transform.rotation); } else if (m.combatType == CombatType.Melee) { Collider[] overlaps = Physics.OverlapSphere( m_go.gameObject.transform.Find("ATKPoint").transform.position, m.MeleeATKRange, playerLayer); if (overlaps.Length != 0) { //foreach(Collider c in overlaps) { // GameObject p_go = c.GetComponent<Transform>().gameObject; //} if (m.alreadyATK == true) { FloatingTextController.CreateFloatingDMG(World.player.TakeDamage(m), playerGO.transform); } } } break; //case MinionState.GetHit: // m_anim.SetBool("isIdle", false); // m_anim.SetBool("isWalk", false); // m_anim.SetBool("isAttack", false); // m_anim.SetBool("isGetHit", true); // m_anim.SetBool("isDie", false); // break; case MinionState.Die: m_anim.SetBool("isIdle", false); m_anim.SetBool("isWalk", false); m_anim.ResetTrigger("isAttack"); //m_anim.SetBool("isAttack",false); m_anim.SetBool("isDie", true); break; default: break; } // Death after animation end if (m.minionState == MinionState.Die && m_anim.GetCurrentAnimatorStateInfo(0).IsName("Die") && m_anim.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f) { m.Death(); } }