35ed59b247
Use pathfinding algorithm
165 lines
5.3 KiB
C#
165 lines
5.3 KiB
C#
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)
|
|
{
|
|
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 = 2f;
|
|
|
|
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;
|
|
}
|
|
}
|