The chargeDmg float doesn’t accumulate while fire-button is held down. I’ve tried editing the IEnumerator different ways and the only way I can get it to work is this way, but am I just returning null instead of the time.Deltatime value to chargeDmg? Is it more efficient in C# to separate methods that must happen simultaneously at run-time into events, members, properties, etc.? I’ve just started coding so I don’t think I"m quite there yet…
using UnityEngine;
using System.Collections;
public class CocoAndGlennAttacksIII : MonoBehaviour {
Animator anim;
public bool isAttacking = false;
public Rigidbody fireball1;
public Rigidbody iceball1;
public Rigidbody fireball2;
public Rigidbody iceball2;
public float speed = 10;
public bool attackVectorEast = false;
public bool attackVectorNorth = false;
public bool attackVectorWest = false;
public bool attackVectorSouth = false;
//public float triggerDownTime = 0;
public float chargeDmg = 0;
public float chargeTime = 2;
public bool isCharging = false;
Rigidbody clone;
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
}
void Update () {
float lastInputX = Input.GetAxis ("Horizontal");
float lastInputZ = Input.GetAxis ("Vertical");
if (lastInputX > 0){ attackVectorEast = true;
attackVectorWest = false; attackVectorNorth = false;attackVectorSouth = false;
}
else if (lastInputX < 0){ attackVectorWest = true;
attackVectorEast = false; attackVectorNorth = false;attackVectorSouth = false;
}
else if (lastInputZ > 0) {attackVectorNorth = true;
attackVectorWest = false; attackVectorEast = false;attackVectorSouth = false;
}
else if (lastInputZ < 0){ attackVectorSouth = true;
attackVectorWest = false; attackVectorNorth = false;attackVectorEast = false;
}
if (Input.GetButtonDown("Fire1")){
AttackCharger();
isAttacking = true;
anim.SetBool ("isAttacking", true);
if(!isCharging){
isCharging = true;
}
}
if (Input.GetButtonUp("Fire1"))
{
if (attackVectorEast == true){
anim.SetBool ("isAttacking", true);
clone = Instantiate (fireball1, new Vector3(transform.position.x + 2.5f, transform.position.y, transform.position.z-0.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.right * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
clone = Instantiate (iceball1, new Vector3(transform.position.x+ 3f, transform.position.y, transform.position.z -0.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.right * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
chargeDmg = 0;
}
if (attackVectorWest == true){
anim.SetBool ("isAttacking", true);
clone = Instantiate (fireball1, new Vector3(transform.position.x - 3f, transform.position.y, transform.position.z-0.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.left * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
clone = Instantiate (iceball1, new Vector3(transform.position.x+ -2.5f, transform.position.y, transform.position.z -0.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.left * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
chargeDmg = 0;
}
if (attackVectorNorth == true){
anim.SetBool ("isAttacking", true);
clone = Instantiate (fireball2, new Vector3(transform.position.x- 0.7f, transform.position.y, transform.position.z +1f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.up * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
clone = Instantiate (iceball2, new Vector3(transform.position.x+ 0.7f, transform.position.y, transform.position.z +1f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.up * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
chargeDmg = 0;
}
if (attackVectorSouth == true){
anim.SetBool ("isAttacking", true);
clone = Instantiate (fireball2, new Vector3(transform.position.x- 0.7f, transform.position.y, transform.position.z -2.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.down * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
clone = Instantiate (iceball2, new Vector3(transform.position.x+ 0.7f, transform.position.y, transform.position.z -2.5f), transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.down * speed);
Physics.IgnoreCollision( clone.collider, transform.root.collider );
Destroy (clone.gameObject, 2);
chargeDmg = 0;
}
isAttacking = false;
anim.SetBool ("isAttacking", false);
isCharging = false;
chargeDmg = 0;
}
}
IEnumerator AttackCharger(){
while(Input.GetButton ("Fire1")){
if (chargeDmg < 10 ) {
chargeDmg += chargeTime*Time.deltaTime;
yield return null;
}
}
}
}