Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Devices/rechargerStation.cs
Robii Aragon 779f2c8b20 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

179 lines
4.4 KiB
C#

using UnityEngine;
using System.Collections;
using GameKitController.Audio;
public class rechargerStation : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public float healSpeed;
public string animationName;
public AudioClip sound;
[Space]
[Header ("Debug")]
[Space]
public bool healing;
public bool fullyHealed;
public bool inside;
[Space]
[Header ("Components")]
[Space]
public AudioElement soundAudioElement;
public GameObject button;
public AudioSource mainAudioSource;
public Collider buttonCollider;
public Animation mainAnimation;
GameObject player;
bool playingAnimationForward;
float healthAmount;
float maxHealthAmount;
float powerAmount;
float maxPowerAmount;
otherPowers powerManager;
health currentHealth;
//this station reloads the player's health and energy, just in case that any of their values are lower that their max values
void Start ()
{
//disable the button trigger
if (mainAudioSource == null) {
mainAudioSource = GetComponent<AudioSource> ();
}
mainAudioSource.clip = sound;
if (sound != null) {
soundAudioElement.clip = sound;
}
if (mainAudioSource != null) {
soundAudioElement.audioSource = mainAudioSource;
}
if (buttonCollider == null) {
buttonCollider = button.GetComponent<Collider> ();
}
buttonCollider.enabled = false;
if (mainAnimation == null) {
mainAnimation = GetComponent<Animation> ();
}
}
void Update ()
{
//if the station is healing the player
if (healing && !fullyHealed) {
//refill health and energy
healthAmount = applyDamage.getCurrentHealthAmount (player);
maxHealthAmount = applyDamage.getMaxHealthAmount (player);
powerAmount = powerManager.getCurrentEnergyAmount ();
maxPowerAmount = powerManager.getMaxEnergyAmount ();
if (healthAmount < maxHealthAmount) {
currentHealth.getHealth (Time.deltaTime * healSpeed);
}
if (powerAmount < maxPowerAmount) {
powerManager.getEnergy (Time.deltaTime * healSpeed);
}
//if the healht and energy are both refilled, stop the station
if (healthAmount >= maxHealthAmount && powerAmount >= maxPowerAmount) {
stopHealing ();
}
}
//if the player enters in the station and the button is not enabled
if (inside && !healing && !buttonCollider.enabled) {
//check the health and energy values
healthAmount = applyDamage.getCurrentHealthAmount (player);
maxHealthAmount = applyDamage.getMaxHealthAmount (player);
powerAmount = powerManager.getCurrentEnergyAmount ();
maxPowerAmount = powerManager.getMaxEnergyAmount ();
if (healthAmount < maxHealthAmount || powerAmount < maxPowerAmount) {
//if they are not fulled, enable the button trigger
fullyHealed = false;
buttonCollider.enabled = true;
}
}
if (mainAnimation != null) {
//if the player is full of energy and health, and the animation in the station is not being playing, then disable the station and play the disable animation
if (playingAnimationForward && !mainAnimation.IsPlaying (animationName) && fullyHealed) {
playingAnimationForward = false;
mainAnimation [animationName].speed = -1;
mainAnimation [animationName].time = mainAnimation [animationName].length;
mainAnimation.Play (animationName);
}
}
}
//this function is called when the button is pressed
public void healPlayer ()
{
//check if the player is inside the station and his health or energy is not fulled
if (inside && !fullyHealed) {
//start to heal him
healing = true;
playingAnimationForward = true;
//play the station animation and the heal sound
mainAnimation [animationName].speed = 1;
mainAnimation.Play (animationName);
AudioPlayer.Play (soundAudioElement, gameObject);
mainAudioSource.loop = true;
buttonCollider.enabled = false;
}
}
//stop the station
public void stopHealing ()
{
healing = false;
fullyHealed = true;
mainAudioSource.loop = false;
}
void OnTriggerEnter (Collider col)
{
//check if the player is inside the station
if (col.gameObject.CompareTag ("Player")) {
player = col.gameObject;
powerManager = player.GetComponent<otherPowers> ();
currentHealth = player.GetComponent<health> ();
inside = true;
}
}
void OnTriggerExit (Collider col)
{
//if the player exits from the station and he was being healing, stop the station
if (col.gameObject.CompareTag ("Player")) {
inside = false;
if (healing) {
stopHealing ();
}
}
}
}