using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterAnimationDelegate : MonoBehaviour
{
public GameObject leftArmAttackPoint;
public GameObject rightArmAttackPoint;
public GameObject leftLegAttackPoint;
public GameObject rightLegAttackPoint;
public float standUpTimer = 2f;
private CharacterAnimation animationScript;
private AudioSource audioSource;
[SerializeField]
private AudioClip missSound, fallSound, groundHitSound, deathSound;
private EnemyMovement enemyMovement;
private ShakeCamera camera;
void Awake()
{
animationScript = GetComponent<CharacterAnimation>();
audioSource = GetComponent<AudioSource>();
if(gameObject.CompareTag(Tags.ENEMY_TAG))
{
enemyMovement = GetComponentInParent<EnemyMovement>();
}
camera = GameObject.FindWithTag(Tags.MAIN_CAMERA_TAG).GetComponent<ShakeCamera>();
}
//Functions to turn ON collision points on Player limbs
void turnOnLeftArm()
{
leftArmAttackPoint.SetActive(true);
}
void turnOnRightArm()
{
rightArmAttackPoint.SetActive(true);
}
void turnOnLeftLeg()
{
leftLegAttackPoint.SetActive(true);
}
void turnOnRightleg()
{
rightLegAttackPoint.SetActive(true);
}
//Functions to turn OFF collision points on Player limbs
void turnOffLeftArm()
{
if(leftArmAttackPoint.activeInHierarchy)
{
leftArmAttackPoint.SetActive(false);
}
}
void turnOffRightArm()
{
if (rightArmAttackPoint.activeInHierarchy)
{
rightArmAttackPoint.SetActive(false);
}
}
void turnOffLeftLeg()
{
if (leftLegAttackPoint.activeInHierarchy)
{
leftLegAttackPoint.SetActive(false);
}
}
void turnOffRightleg()
{
if (rightLegAttackPoint.activeInHierarchy)
{
rightLegAttackPoint.SetActive(false);
}
}
/*Tag to left arm on player character;
Add event to call function at certain
animation point during the 'Punch 3' animation in Animation tab*/
void TagLeftArm()
{
leftArmAttackPoint.tag = Tags.LEFT_ARM_TAG;
}
/*Untag to left arm on player character;
Add event to call function at certain
animation point during the 'Punch 3' animation in Animation tab*/
void UnTagLeftArm()
{
leftArmAttackPoint.tag = Tags.UNTAGGED_TAG;
}
/*Tag to left leg on player character;
Add event to call function at certain animation point
during the 'Kick 2' animation in Animation tab*/
void TagLeftLeg()
{
leftArmAttackPoint.tag = Tags.LEFT_LEG_TAG;
}
/*Untag to left leg on player character;
Add event to call function at certain animation point
during the 'Kick 2' in Animation tab*/
void UnTagLeftLeg()
{
leftArmAttackPoint.tag = Tags.UNTAGGED_TAG;
}
/*Add function at end of 'EnemyKnockDown-End' animation
in Animation Tab*/
void EnemyStandpUp()
{
StartCoroutine(StandUpAfterTime());
}
IEnumerator StandUpAfterTime()
{
yield return new WaitForSeconds(standUpTimer);
animationScript.StandUp();
}
/*Add event to call function at certain animation point
during the 'Punch1', 'Punch2', 'Punch3', 'Kick1', and 'Kick2'
in Animation tabs*/
public void AttackSoundFx()
{
audioSource.volume = 0.2f;
audioSource.clip = missSound;
audioSource.Play();
}
void characterDeathSoundFx()
{
audioSource.volume = 1f;
audioSource.clip = deathSound;
audioSource.Play();
}
void EnemyKnockDown()
{
audioSource.clip = fallSound;
audioSource.Play();
}
void EnemyHitGround()
{
audioSource.clip = groundHitSound;
audioSource.Play();
}
void DisableMovement()
{
enemyMovement.enabled = false;
/*Set enemy parent game object to Default Layer;
Rendering enemy invalid while on the ground;
0 = Default Layer in Layers Tab*/
transform.parent.gameObject.layer = 0;
}
void EnableMovement()
{
enemyMovement.enabled = true;
/*Set enemy parent game object to Enemy Layer;
Rendering enemy active again when it gets back up;
9 = Enemy Layer in Layers Tab*/
transform.parent.gameObject.layer = 9;
}
//Call Accessor in ShakeCamera script to change boolean variable
void ShakeCameraOnFall()
{
camera.shouldShakeAccessor = true;
}
void CharacterDied()
{
Invoke("DeactivateEnemy", 2f);
}
void DeactivateEnemy()
{
EnemyManager.instance.SpawnEnemy();
gameObject.SetActive(false);
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}