Skip to content

Commit

Permalink
Comentando código
Browse files Browse the repository at this point in the history
  • Loading branch information
Ikerjum committed May 24, 2024
1 parent 59272d1 commit 65113e2
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 59 deletions.
36 changes: 36 additions & 0 deletions NYKTOS/Assets/Cinematics/CinematicsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@
using Cinemachine;
using UnityEngine.Playables;
using UnityEngine.Events;
using UnityEditor;
using System.Security.Cryptography;
using System;
using UnityEngine.WSA;
using Unity.VisualScripting;

//Codigo de Iker
public class ControlCinemachine : MonoBehaviour
{
[SerializeField]
Expand All @@ -27,28 +33,40 @@ public static bool OneTimeCinematic
[SerializeField] private UnityEvent onCinematicStart = new UnityEvent();
[SerializeField] private UnityEvent onCinematicFinish = new UnityEvent();

/// <summary>
///Mantenemos activo la interfaz
///Mantenemos la camara de la cinematica desactivada
///Paramos la linea de tiempo
///Estos tres parametros asi hasta que la cinematica se active
///
///Añadimos un Listener para que se active el metodo de la cinematica cuando el estado del juego sea el de día
/// </summary>
void Start()
{
_uiGameplay.SetActive(true);
_cinematicCamera.enabled = false;
_timeline.Stop();
_firstCinematicEmitter.Perform.AddListener(FirstCinematicOn);
}


void Update()
{
if(_oneTimeCinematic)
{
///Si el tiempo de espera para reproducir la cinematica ha empezado empieza un contador regresivo para que al llegar al limite se reproduzca la cinematica
if (_startTimer)
{
_waitToStart -= Time.deltaTime;
}

///Se empieza la cinematica cuando el tiempo de espera sea 0
if (_waitToStart <= 0)
{
StartCinematic();
}

///Si se ha pasado el tiempo de la cinematica siendo mayor que el tiempo de la animación se desactiva la perspectiva de la cinematica y se deja de contar el tiempo (esto deberia ir en la anterior condición)
if (_timeline.time >= _animationDuration)
{
FirstCinematicOff();
Expand All @@ -61,6 +79,11 @@ void OnDestroy()
{
_firstCinematicEmitter.Perform.RemoveListener(FirstCinematicOn);
}
/// <summary>
/// Cuando empieza la cinematica, comprobamos que solo podemos reproducirla una vez
/// El tiempo de espera para reproducir la cinematica debe ser 0
/// Si estas dos condiciones son ciertas: Se desactiva la UI para ver la cinematica, comienza la timeline de la cinematica y se cambia a la camara de la cinematica.
/// </summary>

private void StartCinematic()
{
Expand All @@ -71,6 +94,11 @@ private void StartCinematic()
_cinematicCamera.enabled = true;
}
}
/// <summary>
/// Comprobamos que solo se va a producir la cinematica una vez
/// Esto se activa en el con un listener en el start cuando empieza el estado de juego, por eso es necesario un booleano que se ponga a false cuando ya se reprodució la cinematica
/// Avisamos por un evento que la cinematica ha empezado
/// </summary>

public void FirstCinematicOn()
{
Expand All @@ -82,6 +110,14 @@ public void FirstCinematicOn()
}
}

/// <summary>
///Volvemos a activar la interfaz
///Ponemos a false el booleano de la cinematica para que ya no vuelva a reproducirse nunca mas
///Desactivamos la camara de la cinematica
///Se para la linea de tiempo para que no este siempre reproduciendose
///Se desactiva el objeto de la cinematica para volver a la perspectiva del jugador
///Avisamos por evento que la cinematica ha terminado
/// </summary>
private void FirstCinematicOff()
{
_uiGameplay.SetActive(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,32 @@
using UnityEngine;

[CreateAssetMenu(fileName = "New Crystal", menuName = "Crystal")]

//Scriptable object hecho por Iker
public class ResourceCrystal : ScriptableObject
{
/// <summary>
/// Sprite del cristal creado
/// </summary>
public Sprite CristalSprite;
/// <summary>
/// Nombre del cristal creado
/// </summary>
public string CristalName;
/// <summary>
/// Probabilidad de ser generado el cristal
/// </summary>
public int dropChance;
/// <summary>
/// Tiempo de desaparición del cristal
/// </summary>
public int dissapearTime;

/// <summary>
/// Obtención de características del cristal, asi como su nombre o su probabilidad de drop
/// </summary>
/// <param name="CristalName"></param>
/// <param name="dropChance"></param>
public ResourceCrystal(string CristalName, int dropChance)
{
this.CristalName = CristalName;
Expand Down
92 changes: 43 additions & 49 deletions NYKTOS/Assets/Scripts/CristalResources/CrystalBag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,116 +9,115 @@
using UnityEngine;


//Codigo de Iker :D
//Codigo de Iker
public class CrystalBag : MonoBehaviour
{
private float dropForce = 20f;
private bool ObtainedCrystal = false;
[SerializeField]
private PlayerInventory inventory;
//public Collider2D _playerCollider;
//Necesitamos el CrystalPrefab aqu�
public GameObject droppedItemPrefab;
private ResourceCrystal _droppedCrystal;
public ResourceCrystal droppedCrystal
{
get { return _droppedCrystal; }
}
private GameObject crystalGameObject;
//En la lista de Cristales ponemos todos los cristales creados con el ScriptableObject CrystalResources

/// <summary>
/// En la lista de Cristales ponemos todos los cristales creados con el ScriptableObject CrystalResources (Hay solo 3)
/// En la lista de CristalesClonados ponemos los cristales que se van a instanciar en escena
/// </summary>
public List<ResourceCrystal> CrystalList = new List<ResourceCrystal>();
private List<GameObject> clonedCrystals = new List<GameObject>();

/// <summary>
/// Componente para manejar las probabilidades de drop
/// </summary>
[SerializeField]
private CrystalDrops _crystalDropsTracker;

private bool RecursosObligatorios = true;

//Esto usa la logica del porcentaje, toma un numero aleatorio entre 1 y 100.
//Se recopila la lista de cristales con su probabilidad que puede soltar el enemigo.
//Dependiendo del tipo de enemigo podemos poner los cristales que nosotros queramos que dropee //FALTA HACER CAMBIO DE PROBABILIDAD
//Entonces para cada Crystal de la lootList toma una condici�n en la que si el numero random es menor que la probabilidad puesta, se a�ade ese cristal.
/// <summary>
/// Esto usa la logica del porcentaje, toma un numero aleatorio entre 1 y 100.
/// Se recopila la lista de cristales con su probabilidad que puede soltar el enemigo.
/// Dependiendo del tipo de enemigo podemos poner los cristales que nosotros queramos que dropee
/// Entonces para cada Crystal de la lootList toma una condici�n en la que si el numero random es menor que la probabilidad puesta, se a�ade ese cristal.
/// </summary>
ResourceCrystal GetDroppedCrystals()
{
//int RandomNumber = Random.Range(0,3);
int RandomNumber = Random.Range(1, 101);

List<ResourceCrystal> possibleCrystal = new List<ResourceCrystal>();
// EN CRYSTALLIST
// 0 AMARILLO
// 1 MAGENTA
// 2 CIAN
// 0 : CRISTAL AMARILLO
// 1 : CRISTAL MAGENTA
// 2 : CRISTAL CIAN

//Hasta que no se acaben los cristales obligatorios a soltar, se mantendrá la condición de que suelte primero los obligatorios para luego dar paso a los aleatorios.
if (_crystalDropsTracker.RequiredYellow == 0 && _crystalDropsTracker.RequiredCyan == 0 && _crystalDropsTracker.RequiredMagenta == 0) RecursosObligatorios = false;

//En los recursos obligatorios se decide si la probabilidad del RandomNumber es menor que la probabilidad del cristal seleccionado, aparte de que todavía queden cristales por soltar.
if (RecursosObligatorios)
{
//print("Cristal obligatorio");
if (_crystalDropsTracker.RequiredYellow > 0 && /*RandomNumber == 0*/ RandomNumber <= _crystalDropsTracker.ProbabilityYellow /*CrystalList[0].dropChance*/)
if (_crystalDropsTracker.RequiredYellow > 0 && RandomNumber <= _crystalDropsTracker.ProbabilityYellow)
{
possibleCrystal.Add(CrystalList[0]);
_crystalDropsTracker.RequiredYellow--;
//print("Amarillo obligatorio");
}
else if (_crystalDropsTracker.RequiredCyan > 0 && /*RandomNumber == 2*/ RandomNumber <= _crystalDropsTracker.ProbabilityCyan /*CrystalList[2].dropChance*/)
else if (_crystalDropsTracker.RequiredCyan > 0 && RandomNumber <= _crystalDropsTracker.ProbabilityCyan)
{
possibleCrystal.Add(CrystalList[2]);
_crystalDropsTracker.RequiredCyan--;
//print("Cian obligatorio");
}
else if (_crystalDropsTracker.RequiredMagenta > 0 && /*RandomNumber == 1*/ RandomNumber <= _crystalDropsTracker.ProbabilityMagenta /*CrystalList[1].dropChance*/)
else if (_crystalDropsTracker.RequiredMagenta > 0 && RandomNumber <= _crystalDropsTracker.ProbabilityMagenta)
{
possibleCrystal.Add(CrystalList[1]);
_crystalDropsTracker.RequiredMagenta--;
//print("Magenta obligatorio");
}
else
{
//print("No contemple probabilidad");
//En caso de que la probabilidad siempre sea mas baja que los cristales a droppear se seleccionara un posible cristal de los que quedan obligatorios
if (_crystalDropsTracker.RequiredMagenta > 0)
{
possibleCrystal.Add(CrystalList[1]);
_crystalDropsTracker.RequiredMagenta--;
//print("Magenta obligatorio");
}
else if (_crystalDropsTracker.RequiredCyan > 0)
{
possibleCrystal.Add(CrystalList[2]);
_crystalDropsTracker.RequiredCyan--;
//print("Cian obligatorio");
}
else
{
possibleCrystal.Add(CrystalList[0]);
_crystalDropsTracker.RequiredYellow--;
//print("Amarillo obligatorio");
}

}

}

//Cuando se terminen los recursos obligatorios se pasara a una probabilidad que dependera del DropsTrackerProbability
//Si la probabilidad no cumple ninguna condición no se soltará ningún cristal
if (!RecursosObligatorios)
{
//print("Cristal aleatorio");

//RANDOM DEPENDIENDO DEL DROPCHANCE DEL SPAWNAMANAGER
int RandomNumberCrystalRandom = Random.Range(0, 3);
int RandomProbabilityCrystalRandom = Random.Range(1, 101);
if (RandomNumberCrystalRandom == 0 && RandomProbabilityCrystalRandom <= _crystalDropsTracker.ProbabilityYellow) possibleCrystal.Add(CrystalList[0]);
else if (RandomNumberCrystalRandom == 1 && RandomProbabilityCrystalRandom <= _crystalDropsTracker.ProbabilityMagenta) possibleCrystal.Add(CrystalList[1]);
else if (RandomNumberCrystalRandom == 2 && RandomProbabilityCrystalRandom <= _crystalDropsTracker.ProbabilityCyan) possibleCrystal.Add(CrystalList[2]);

//EN CASO DE QUE QUERAMOS QUE SIEMPRE SUELTE UN CRISTAL SIN CONTEMPLAR LA PROBABILIDAD DE QUE NO SUELTE UN CRISTAL
/*
else
{
if (RandomNumberCrystalRandom == 0) possibleCrystal.Add(CrystalList[1]);
else if (RandomNumberCrystalRandom == 1) possibleCrystal.Add(CrystalList[2]);
else possibleCrystal.Add(CrystalList[0]);
if (RandomNumberCrystalRandom == 0) possibleCrystal.Add(CrystalList[0]);
else if (RandomNumberCrystalRandom == 1) possibleCrystal.Add(CrystalList[1]);
else possibleCrystal.Add(CrystalList[2]);
}
*/

/*
//RANDOM DEPENDIENDO DEL DROPCHANCE DEL SCRIPTABLE OBJECT
/*
foreach (ResourceCrystal item in CrystalList)
{
if (RandomNumber <= item.dropChance)
Expand All @@ -128,9 +127,8 @@ ResourceCrystal GetDroppedCrystals()
}
*/


/*
//COMPLETAMENTE RANDOM
/*
int RandomNumberCrystalRandom = Random.Range(0, 3);
if (RandomNumberCrystalRandom == 0) possibleCrystal.Add(CrystalList[0]);
else if (RandomNumberCrystalRandom == 1) possibleCrystal.Add(CrystalList[1]);
Expand All @@ -139,21 +137,26 @@ ResourceCrystal GetDroppedCrystals()

}

//Esto es para que elija solo un drop para tirar entre todos
//Si hay varios cristales, se elige uno entre ellos para ser soltado
if (possibleCrystal.Count > 0)
{
//print("muchos cristales, quitamos hasta que quede uno");
ResourceCrystal droppedCrystal = possibleCrystal[Random.Range(0,possibleCrystal.Count)];
return droppedCrystal;
}
//No hay cristal para soltar en caso de no haber cristal seleccionado
else
{

//Debug.Log("No Crystal Dropped");
return null;
}
}

/// <summary>
/// Llama al cristal seleccionado
/// Instancia el cristal
/// Obtiene su spriterenderer para diferenciar que cristal es
/// Lo añade a la lista de cristales clonados
/// Se activa después de eso un contador para que desaparezca después de un tiempo dado
/// </summary>
public void InstantiateCrystal(Vector3 spawnPosition)
{
_droppedCrystal = GetDroppedCrystals();
Expand All @@ -167,21 +170,12 @@ public void InstantiateCrystal(Vector3 spawnPosition)
}
}

//Para poder interactuar con los cristales necesitamos obtener su componente que es este mismo script, se lo aplicamos a cada cristal que se genere
public void InteractWithCrystalClones()
{
foreach (GameObject clone in clonedCrystals)
{
GetComponent<CrystalBag>();
}
}

//private void Awake()
//{
//amarillosObligatorios = _spawnManager.CurrentRequiredYellow;
//cianesObligatorios = _spawnManager.CurrentRequiredYellow;
//magentasObligatorios = _spawnManager.CurrentRequiredYellow;
//probAmarillo = _spawnManager.ProbabilityYellow;
//probCian = _spawnManager.ProbabilityCyan;
//probMagenta = _spawnManager.ProbabilityMagenta;
//}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using UnityEngine;

//Codigo de Iker
public class TurretBulletComponent : MonoBehaviour
{
private TurretTargetingComponent targetingComponent;
Expand All @@ -13,13 +14,16 @@ public class TurretBulletComponent : MonoBehaviour
[SerializeField]
private int BulletDamage = 2;

//Obtenemos los componentes de apuntado y de disparo de la torreta
void Start()
{
targetingComponent = GetComponentInParent<TurretTargetingComponent>();
shootingComponent = GetComponentInParent<TurretShootingComponent>();
_myTransform = transform;
}

//En caso de que los componentes de apuntado y disparo de la torreta existan se disparará una bala en función de la dirección del enemigo.
//Se toma la dirección del enemigo y mientras el enemigo este en rango, la bala se moverá en dirección del enemigo.
void Update()
{
if (targetingComponent != null && shootingComponent != null)
Expand All @@ -32,6 +36,8 @@ void Update()
}
}

//En caso de que la bala alcance a un enemigo (se detecta que es un enemigo por el componente que lleva):
//Se destruirá la bala, y se hará el daño correspondiente al enemigo que dependerá de la cantidad de daño que le hemos puesto a la bala
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.TryGetComponent(out EnemyPriorityComponent enemy))
Expand Down
Loading

0 comments on commit 65113e2

Please sign in to comment.