56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using System;
|
|
using Core.Extensions;
|
|
using UnityEngine;
|
|
|
|
public class ChargedShot : Ability
|
|
{
|
|
[Header("Projectile Stats")]
|
|
[SerializeField] private Projectile projectile;
|
|
[SerializeField] private float projectileSpeed;
|
|
[SerializeField] private float projectileLifetime;
|
|
[SerializeField] private int pierceAmount;
|
|
[Header("Charge")]
|
|
private bool isCharging;
|
|
private float currentChargeDuration;
|
|
[SerializeField] private float maxChargeDuration;
|
|
public float chargeModifier;
|
|
|
|
protected override void AbilityEffects()
|
|
{
|
|
base.AbilityEffects();
|
|
isCharging = true;
|
|
thisEntity.abilitiesDisabled = true;
|
|
}
|
|
|
|
protected override void Update()
|
|
{
|
|
base.Update();
|
|
if (isCharging)
|
|
{
|
|
if (Input.GetMouseButton(1))
|
|
{
|
|
currentChargeDuration += Time.deltaTime;
|
|
}
|
|
else if (Input.GetMouseButtonUp(1))
|
|
{
|
|
currentChargeDuration = Math.Clamp(currentChargeDuration, 0f, maxChargeDuration);
|
|
float calculatedChargeModifier = Map(currentChargeDuration, 0f, maxChargeDuration, 0f, chargeModifier);
|
|
isCharging = false;
|
|
thisEntity.abilitiesDisabled = false;
|
|
Projectile newProjectile = Instantiate(projectile, thisEntity.transform.position, projectile.transform.rotation);
|
|
//newProjectile.owner = thisEntity;
|
|
newProjectile.tag = thisEntity.tag;
|
|
newProjectile.speed = projectileSpeed;
|
|
newProjectile.damage = power * 1f + calculatedChargeModifier;
|
|
newProjectile.lifetime = projectileLifetime;
|
|
newProjectile.pierceAmount = pierceAmount;
|
|
newProjectile.transform.Lookat2D(thisEntity.attackOriginPoint.position); //targetLocation);
|
|
newProjectile.transform.localScale = new Vector3(newProjectile.transform.localScale.x * (1f + calculatedChargeModifier), newProjectile.transform.localScale.y * (1f + calculatedChargeModifier), 1f);
|
|
currentChargeDuration = 0f;
|
|
}
|
|
}
|
|
}
|
|
public static float Map (float value, float from1, float to1, float from2, float to2) {
|
|
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
|
|
}
|
|
}
|