add all mechanics

This commit is contained in:
Sylvia 2026-07-13 17:46:02 -07:00
parent 87383d5b8c
commit 0e2a7cc7c3
434 changed files with 238349 additions and 2092 deletions

View file

@ -18,12 +18,14 @@ public class Enemy : Entity
[SerializeField] private float variance;
public Coroutine currentMovementRoutine;
[Header("boss stuff")]
[SerializeField] private bool isBossEnemy;
public bool isBossEnemy;
[SerializeField] private bool hasStartedDialogue;
[Header("Attack")]
[SerializeField] private float attackCooldown;
private float currentAttackCooldown;
[SerializeField] private DialogueScript thisBossDialogue;
[SerializeField] private DialogueScript thisBossDialogue;
[Header("Animation")]
public Animator animator;
public event Action onTakeDamage;
private void Start()
@ -100,7 +102,10 @@ public class Enemy : Entity
WaveManager.instance.UpdateKills();
if (isBossEnemy)
{
WaveManager.instance.bossUI.SetActive(false);
DialogueManager.instance.battleUIAnimator.SetTrigger(DialogueManager.instance.nobossTrigger);
WaveManager.instance.musicSource.clip = WaveManager.instance.musicLoop;
WaveManager.instance.musicSource.volume = WaveManager.instance.musicVolume;
WaveManager.instance.musicSource.Play();
}
}
@ -129,7 +134,10 @@ public class Enemy : Entity
if (isBossEnemy && !hasStartedDialogue)
{
hasStartedDialogue = true;
DialogueManager.instance.StartDialogue(thisBossDialogue); //the worst code ever
if (thisBossDialogue)
{
DialogueManager.instance.StartDialogue(thisBossDialogue); //the worst code ever
}
isStalled = true;
}
}

View file

@ -1,18 +1,27 @@
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class Player : Entity
{
[Header("Invulnerability")]
[SerializeField] private float invulnerabilityLength;
private float currentInvulnerabilityTime;
[SerializeField] private float invincibilityBlinkLength;
private float currentInvincibilityBlink;
[SerializeField] private SpriteRenderer[] playerSprites;
[SerializeField] private Color invincibilityColor;
[Header("UI")]
[SerializeField] private TextMeshProUGUI livesText;
[SerializeField] private Image[] healthBar;
[SerializeField] private Sprite heart;
[SerializeField] private Sprite depletedHeart;
[Header("SFX")]
[SerializeField] private AudioClip hurtSound;
[SerializeField] private float hurtVolume = 1f;
[SerializeField] private AudioClip gameOverSound;
[SerializeField] private float gameOverVolume = 1f;
private void Update()
{
if (!isStalled)
@ -30,8 +39,24 @@ public class Player : Entity
if (currentInvulnerabilityTime > 0)
{
currentInvulnerabilityTime -= Time.deltaTime;
if (currentInvincibilityBlink > 0)
{
currentInvincibilityBlink -= Time.deltaTime;
foreach (SpriteRenderer sprite in playerSprites)
{
sprite.color = Color.Lerp(invincibilityColor, Color.white, 1f - currentInvincibilityBlink);
}
}
else if (currentInvincibilityBlink <= 0)
{
currentInvincibilityBlink = invincibilityBlinkLength;
}
if (currentInvulnerabilityTime <= 0)
{
foreach (SpriteRenderer sprite in playerSprites)
{
sprite.color = Color.white;
}
invulnerable = false;
}
}
@ -53,9 +78,20 @@ public class Player : Entity
protected override void OnDeath()
{
GameManager.instance.LoseGame();
WaveManager.instance.audioSource.PlayOneShot(gameOverSound, gameOverVolume);
}
private void UpdateLivesUI()
{
livesText.text = $"Lives: {health}/{maxHealth}";
for (int i = 0; i < healthBar.Length; i++)
{
if (i < health)
{
healthBar[i].sprite = heart;
}
else
{
healthBar[i].sprite = depletedHeart;
}
}
}
}

View file

@ -0,0 +1,17 @@
using UnityEngine;
public class Prismriver : Enemy
{
public override void TakeDamage(int damage)
{
if (!invulnerable)
{
WaveManager.instance.prismHP -= damage;
WaveManager.instance.UpdateBossUI();
}
if (WaveManager.instance.prismHP <= 0)
{
OnDeath();
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 806a8fd558ae195dea2036e9d77338b4