using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using System; public enum BossThugEnum { Pending=0, //waiting for npcs to die Talking=1, Attacking=2 } [RequireComponent(typeof(NpcDialogueManager))] public class BossThug : MonoBehaviour { public GameObject npc1; public GameObject npc2; private GameObject player; private GameObject doorway; public Animator animator; private Rigidbody2D rb; public RuntimeAnimatorController newController; public bool isAfterConversation = false; // drop it if you can... public bool isDuringConversation = false; public BossThugEnum state = BossThugEnum.Pending; // Start is called before the first frame update public void Awake() { gameObject.GetComponent<NpcDialogueManager>().OpenInDefaultWay = false; } void Start() { rb = GetComponent<Rigidbody2D>(); animator = GetComponent<Animator>(); npc1 = GameObject.FindObjectsOfType<GameObject>(true).Where(sr => sr.gameObject.name == "ThugBob" && sr.gameObject.tag == "Enemy").ToArray()[0]; npc2 = GameObject.FindObjectsOfType<GameObject>(true).Where(sr => sr.gameObject.name == "ThugBen" && sr.gameObject.tag == "Enemy").ToArray()[0]; player = GameObject.FindGameObjectWithTag("Player"); doorway = GameObject.FindObjectsOfType<GameObject>(true).Where(sr => sr.gameObject.name == "DoorToHell" && sr.gameObject.tag == "SceneTransition").ToArray()[0]; if (npc1 == null || npc2 == null || player == null || doorway == null) { throw new Exception("Object has not been found in the scene"); } } // Update is called once per frame void Update() { if ( (npc1.GetComponent<Enemy>().health <= 0 && npc1.GetComponent<Enemy>().isKilled == 1) && (npc2.GetComponent<Enemy>().health <= 0 && npc2.GetComponent<Enemy>().isKilled == 1) && state == BossThugEnum.Pending) { state = BossThugEnum.Talking; // UZUPELNIC DIALOG } else if (state == BossThugEnum.Attacking && player.GetComponent<Player>().currentHealth <= 0) { // 3. Save additional controls SkillsUIManager.Instance.keyToOpen = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Skills")); DisplayExpStatus.keyToExp = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("EXP HEALTH")); DisplayHealthStatus.keyToHealth = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("EXP HEALTH")); DisplayExpStatus.keyToExp = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("ExpHlth")); DisplayHealthStatus.keyToHealth = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("ExpHlth")); PlayerPrefs.Save(); doorway.GetComponent<DoorBehaviour>().ScenetToMoveTo(); PlayerPrefs.SetFloat("health-S", 10.0f); PlayerPrefs.SetFloat("health-S", 10.0f); } switch (state) { case BossThugEnum.Attacking: { ActivateKillingMode(); break; } case BossThugEnum.Talking: { ActivateDialogueMode(); //later add trigger events etc break; } } } private void ActivateKillingMode() { // set lower radious in order to less attack distance gameObject.GetComponent<CircleCollider2D>().radius = 1f; Debug.Log(gameObject.GetComponent<CircleCollider2D>().radius); gameObject.GetComponent<FollowingEnemy>().enabled=true; animator.runtimeAnimatorController = Resources.Load("SampleScene/Enemies/BossThugAnimator.controller") as RuntimeAnimatorController; gameObject.GetComponent<FollowingEnemy>().baseAttack=1000f; } private void ActivateDialogueMode() { gameObject.GetComponent<CircleCollider2D>().radius = 4f; } public void ChanegStatusToAttack() { BreakConversation(); SetEndConversation(); state = BossThugEnum.Attacking; } public void OnTriggerEnter2D(Collider2D other) { if (other.tag == "Player" && state == BossThugEnum.Talking && !isAfterConversation && !isDuringConversation) { //gameObject.GetComponent<CircleCollider2D>().enabled = false; //gameObject.GetComponent<CircleCollider2D>().radius = 2f; isDuringConversation = true; gameObject.GetComponent<NpcDialogueManager>().Dialogue.StartDialogue(); } } /*public void OnTriggerStay2D(Collider2D other) { if (other.tag == "Player" && state == BossThugEnum.Talking && !isAfterConversation && !isDuringConversation) { isDuringConversation = true; gameObject.GetComponent<NpcDialogueManager>().Dialogue.StartDialogue(); } }*/ public void OnTriggerExit2D(Collider2D other) { if (other.tag == "Player" && state == BossThugEnum.Talking && !isAfterConversation && isDuringConversation) { //gameObject.GetComponent<CircleCollider2D>().enabled = true; //gameObject.GetComponent<CircleCollider2D>().radius = 2f; isDuringConversation = false; gameObject.GetComponent<NpcDialogueManager>().Dialogue.BreakDialogueStep(); //TODO break dialogue after leaving collider range!!! } } /// <summary> /// Set as action invoked in event after 'NpcDialogueManager::SetNextDialogue()' function to adjust Trigger2D event listening /// </summary> public void BreakConversation() { isDuringConversation = false; } /// <summary> /// Mark conversation as finished /// </summary> public void SetEndConversation() { isAfterConversation = true; } }