2022-10-02 18:45:58 +02:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
public class BossThug : MonoBehaviour
|
|
|
|
{
|
|
|
|
|
|
|
|
public GameObject npc1;
|
|
|
|
public GameObject npc2;
|
|
|
|
private GameObject player;
|
|
|
|
private GameObject doorway;
|
2022-10-24 12:31:09 +02:00
|
|
|
public Animator animator;
|
|
|
|
private Rigidbody2D rb;
|
|
|
|
public RuntimeAnimatorController newController;
|
2022-10-02 18:45:58 +02:00
|
|
|
|
2022-10-20 23:30:19 +02:00
|
|
|
public bool isAfterConversation = false; // drop it if you can...
|
|
|
|
|
2022-10-02 18:45:58 +02:00
|
|
|
public BossThugEnum state = BossThugEnum.Pending;
|
|
|
|
|
|
|
|
// Start is called before the first frame update
|
|
|
|
void Start()
|
|
|
|
{
|
2022-10-24 12:31:09 +02:00
|
|
|
rb = GetComponent<Rigidbody2D>();
|
|
|
|
animator = GetComponent<Animator>();
|
2022-10-02 18:45:58 +02:00
|
|
|
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<FollowingEnemy>().health <= 0 && npc1.GetComponent<FollowingEnemy>().isKilled == 1) &&
|
|
|
|
(npc2.GetComponent<FollowingEnemy>().health <= 0 && npc2.GetComponent<FollowingEnemy>().isKilled == 1) &&
|
|
|
|
state == BossThugEnum.Pending)
|
|
|
|
{
|
|
|
|
state = BossThugEnum.Talking; // UZUPELNIC DIALOG
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (state == BossThugEnum.Attacking && player.GetComponent<Player>().currentHealth <= 0)
|
|
|
|
{
|
|
|
|
doorway.GetComponent<DoorBehaviour>().ScenetToMoveTo();
|
|
|
|
}
|
|
|
|
switch (state)
|
|
|
|
{
|
|
|
|
case BossThugEnum.Attacking:
|
|
|
|
{
|
|
|
|
ActivateKillingMode();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case BossThugEnum.Talking:
|
|
|
|
{
|
|
|
|
ActivateDialogueMode(); //later add trigger events etc
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void ActivateKillingMode()
|
|
|
|
{
|
|
|
|
gameObject.GetComponent<FollowingEnemy>().enabled=true;
|
2022-10-24 12:31:09 +02:00
|
|
|
animator.runtimeAnimatorController = Resources.Load("SampleScene/Enemies/BossThugAnimator.controller") as RuntimeAnimatorController;
|
2022-10-20 23:30:19 +02:00
|
|
|
gameObject.GetComponent<FollowingEnemy>().baseAttack=1000f;
|
2022-10-02 18:45:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private void ActivateDialogueMode()
|
|
|
|
{
|
2022-10-20 23:30:19 +02:00
|
|
|
gameObject.GetComponent<CircleCollider2D>().radius = 5f;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void ChanegStatusToAttack()
|
|
|
|
{
|
|
|
|
state = BossThugEnum.Attacking;
|
2022-10-02 18:45:58 +02:00
|
|
|
}
|
|
|
|
|
2022-10-20 23:30:19 +02:00
|
|
|
public void OnTriggerStay2D(Collider2D other)
|
|
|
|
{
|
|
|
|
//Debug.Log("kill");
|
|
|
|
if(other.tag == "Player" && state == BossThugEnum.Talking && !isAfterConversation)
|
|
|
|
{
|
|
|
|
isAfterConversation = true;
|
|
|
|
|
|
|
|
gameObject.GetComponent<CircleCollider2D>().enabled = false;
|
|
|
|
gameObject.GetComponent<CircleCollider2D>().radius = 2f;
|
|
|
|
|
|
|
|
gameObject.GetComponent<NpcDialogueManager>().ShowStep();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
2022-10-02 18:45:58 +02:00
|
|
|
}
|