add scripts from post-scale attempt

This commit is contained in:
Sylvia 2026-07-10 01:08:12 -07:00
parent 96dcfa9064
commit 87383d5b8c
18 changed files with 362 additions and 148 deletions

View file

@ -70,7 +70,7 @@ public class CirnoFreezeDeflect : EnemyAbility
}
}
}
private void DeflectProjectiles()
protected void DeflectProjectiles()
{
GameManager.instance.deflections += projectilesInRange.Count;
foreach (Projectile projectile in projectilesAffected.ToArray())

View file

@ -0,0 +1,64 @@
using Core.Extensions;
using UnityEngine;
public class CirnoIceBall : EnemyAbility
{
[Header("Ice Ball")]
[SerializeField] private IceBall iceBall;
private IceBall iceballInstance;
[SerializeField] private float timeUntilShatter;
private float currentTimeOnSpawn;
[Header("Effects")]
[SerializeField] private float sweepDissipationTime;
private float currentDissipationTime;
[SerializeField] private GameObject swordSweepEffect;
protected override void AbilityEffects()
{
iceballInstance = ShootProjectile(iceBall, WaveManager.instance.GetRandomPlayerPoint(), iceBall.speed, false);
currentTimeOnSpawn = timeUntilShatter;
}
protected override void Update()
{
base.Update();
if (currentTimeOnSpawn > 0)
{
currentTimeOnSpawn -= Time.deltaTime;
if (currentTimeOnSpawn <= 0)
{
transform.Lookat2D(WaveManager.instance.GetRandomPlayerPoint());
swordSweepEffect.SetActive(true);
currentDissipationTime = sweepDissipationTime;
iceballInstance.Shatter();
}
}
if (currentDissipationTime > 0)
{
currentDissipationTime -= Time.deltaTime;
if (currentDissipationTime <= 0)
{
swordSweepEffect.SetActive(false);
}
}
}
private IceBall ShootProjectile(IceBall projectile, Vector3 location, float speed, bool aimed)
{
IceBall newProjectile = Instantiate(projectile, origin.position, Quaternion.identity);
Vector3 projectileDirection = location;
if (aimed)
{
projectileDirection = WaveManager.instance.GetRandomPlayerPoint();
}
newProjectile.transform.Lookat2D(projectileDirection);
newProjectile.damage = power;
newProjectile.tag = tag;
if (speed > 0f)
{
newProjectile.speed = speed;
}
return newProjectile;
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: fff9dc9791c039bc6b167721faff21d5

View file

@ -1,21 +1,39 @@
using Core.Extensions;
using UnityEngine;
public class EnemyAbility : Ability
{
[SerializeField] private float cooldownDelta;
[SerializeField] private bool willLookAtPlayer;
protected virtual void Start()
{
cooldown += Random.Range(-cooldownDelta, cooldownDelta);
currentCooldown = Random.Range(0, cooldown);
}
[SerializeField] private float cooldownDelta;
[SerializeField] private bool willLookAtPlayer;
protected virtual void Start()
{
cooldown += Random.Range(-cooldownDelta, cooldownDelta);
currentCooldown = Random.Range(0, cooldown);
}
public override bool TryAbility()
{
if (willLookAtPlayer)
{
direction = WaveManager.instance.GetRandomPlayerPoint();
}
return base.TryAbility();
}
}
public override bool TryAbility()
{
if (willLookAtPlayer)
{
direction = WaveManager.instance.GetRandomPlayerPoint();
transform.Lookat2D(direction);
}
return base.TryAbility();
}
public void ShootProjectile(Projectile projectile, Vector3 location, float speed, bool aimed)
{
Projectile newProjectile = Instantiate(projectile, origin.position, Quaternion.identity);
Vector3 projectileDirection = location;
if (aimed)
{
projectileDirection = WaveManager.instance.GetRandomPlayerPoint();
}
newProjectile.transform.Lookat2D(projectileDirection);
newProjectile.damage = power;
newProjectile.tag = tag;
if (speed > 0f)
{
newProjectile.speed = speed;
}
}
}

View file

@ -46,23 +46,6 @@ public class EnemyBulletPattern : EnemyAbility
}
}
}
public void ShootProjectile(Projectile projectile, Vector3 location, float speed, bool aimed)
{
Projectile newProjectile = Instantiate(projectile, origin.position, Quaternion.identity);
Vector3 projectileDirection = location;
if (aimed)
{
projectileDirection = WaveManager.instance.GetRandomPlayerPoint();
}
newProjectile.transform.Lookat2D(projectileDirection);
newProjectile.damage = power;
newProjectile.tag = tag;
if (speed > 0f)
{
newProjectile.speed = speed;
}
}
private IEnumerator BurstFire(ProjectileDirection projectile, int burstCount, float burstDelay)
{
int currentCount = 0;

View file

@ -0,0 +1,52 @@
using System.Collections;
using UnityEngine;
public class OrinMoveAndSpawn : EnemyAbility
{
[SerializeField] private Enemy ghostFairy;
[SerializeField] private int fairiesToSpawn;
private int currentFairiesLeft;
[SerializeField] private int variance;
[SerializeField] private Enemy thisEnemy;
[SerializeField] private float moveSpeed;
protected override void AbilityEffects()
{
base.AbilityEffects();
currentFairiesLeft = fairiesToSpawn + Random.Range(-variance, variance);
thisEnemy.preventWobble = true;
thisEnemy.isStalled = true;
StartCoroutine(MoveToPosition(transform.position, WaveManager.instance.GetRandomEnemyPoint(), moveSpeed));
}
private IEnumerator MoveToPosition(Vector3 enemyOrigin, Vector3 moveDirection, float lerpSpeed)
{
float currentMovement = 0;
while (currentMovement < 1)
{
currentMovement += Time.deltaTime * lerpSpeed;
if (currentMovement >= 1)
{
SpawnGhostFairy();
}
thisEnemy.transform.position = Vector3.Lerp(enemyOrigin, moveDirection, currentMovement);
yield return null;
}
}
private void SpawnGhostFairy()
{
Enemy newEnemy = Instantiate(ghostFairy, WaveManager.instance.enemyFolder);
newEnemy.originalPosition = transform.position;
WaveManager.instance.enemiesInPlay.Add(newEnemy);
if (currentFairiesLeft > 0)
{
currentFairiesLeft--;
StartCoroutine(MoveToPosition(transform.position, WaveManager.instance.GetRandomEnemyPoint(), moveSpeed));
}
else
{
thisEnemy.preventWobble = false;
thisEnemy.isStalled = false;
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 49a49f9644919e6ebb5aa8f30adbd9e4