protected override void RunAI() { turn += Time.deltaTime; if (turn > 1f) { turn = 0; if (player.CurrentNode.Position.x < currentNode.Position.x) { if (!currentNode.Up.Occupied) { currentNode.clearOccupied(); currentNode = currentNode.Up; currentNode.Owner = (this); } } else if (player.CurrentNode.Position.x > currentNode.Position.x) { if (!currentNode.Down.Occupied) { currentNode.clearOccupied(); currentNode = currentNode.Down; currentNode.Owner = (this); } } else { Weapons.Hitbox b = Instantiate(bullet).GetComponent <Weapons.Hitbox>(); b.transform.position = currentNode.Left.transform.position; b.CurrentNode = currentNode.Left; } } transform.position = currentNode.transform.position; }
void OnTriggerEnter(Collider col) { Weapons.Hitbox hitbox = col.gameObject.GetComponent <Weapons.Hitbox>(); if (hitbox != null) { TakeDamage(hitbox.Damage); } }
public Card(string name, Weapons.Hitbox hitbox, string element, string type, int range, int damage, string actionType, GameObject prefab, string description, Sprite image) { this.name = name; SetElement(element); SetType(type); SetAction(hitbox, actionType, range, damage, prefab); this.description = description; this.image = image; }
void OnTriggerEnter(Collider col) { Weapons.Hitbox hitbox = col.gameObject.GetComponent <Weapons.Hitbox>(); if (hitbox != null && !invun) { hit = true; damage = hitbox.Damage; } }
private void Tornado() { if (!doOnce) { doOnce = true; Weapons.Hitbox b = Instantiate(bullet).GetComponent <Weapons.Hitbox>(); b.transform.position = currentNode.Left.transform.position; b.CurrentNode = currentNode.Left; } }
public void Attack() { //print("ATTACK"); anim.SetTrigger("FanSwipe"); //GameObject.Instantiate(tornado, new Vector3(currentNode.Left.transform.position.x, currentNode.Left.transform.position.y, currentNode.Left.transform.position.z), Quaternion.identity); Weapons.Hitbox b = Instantiate(tornado).GetComponent <Weapons.Hitbox>(); b.transform.position = currentNode.Left.transform.position; b.CurrentNode = currentNode.Left; //GameObject.Instantiate(meleeEffect, new Vector3(currentNode.Left.transform.position.x, currentNode.Left.transform.position.y + 2, currentNode.Left.transform.position.z), Quaternion.identity); shouldAttack = false; sfx.PlaySong(0); }
protected override void RunAI() { //We change turns each second turn += Time.deltaTime; if (!hit) { if (turn > 1f) { turn = 0; //If player is above us if (player.CurrentNode.Position.x < currentNode.Position.x) { //Check if we can move up. if (currentNode.panelNotDestroyed(Util.Enums.Direction.Up) && !currentNode.Up.Occupied) { mechAnima.SetTrigger("Wait"); currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Up; //Say we're there currentNode.Owner = (this); //Tell the place we own it. } } //If player is above us else if (player.CurrentNode.Position.x > currentNode.Position.x) { //Check if we can move up. if (currentNode.panelNotDestroyed(Util.Enums.Direction.Down) && !currentNode.Down.Occupied) { mechAnima.SetTrigger("Wait"); currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Down; //Say we're there currentNode.Owner = (this); //Tell the place we own it. } } //If they are in front of us, ATTACK!. else { mechAnima.SetTrigger("Fire"); Weapons.Hitbox b = Instantiate(bullet).GetComponent <Weapons.Hitbox>(); b.transform.position = currentNode.Left.transform.position; b.CurrentNode = currentNode.Left; sfx.PlaySong(0); } } } else { mechAnima.SetTrigger("Hurt"); turn = 0; } transform.position = currentNode.transform.position; }
private void Attack() { if (!doOnce) { doOnce = true; transform.position = new Vector3(TeleportPos.x, TeleportPos.y, TeleportPos.z + 2f); Weapons.Hitbox h = Instantiate(meleeHitbox).GetComponent <Weapons.Hitbox>(); h.transform.position = TeleportPos; GameObject g = Instantiate(meleeEffect); g.transform.position = TeleportPos; sfx.PlaySong(0); } }
private void SetAction(string actionType, int range, int damage, Weapons.Hitbox actionHitBox) { try { action = (Actions.Action)Activator.CreateInstance(null, "Assets.Scripts.CardSystem.Actions." + actionType).Unwrap(); action.Range = range; action.Damage = damage; action.HitBox = actionHitBox; } catch (Exception e) { action = new Error(); Debug.LogError(e.Message + ": for " + actionType + ". Setting " + name + "'s action to Error."); } }
public override void useCard(Character actor) { Weapons.Hitbox temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = 3f; if (actor.Direction == Util.Enums.Direction.Left) { temp.transform.position = actor.CurrentNode.Left.transform.position; } if (actor.Direction == Util.Enums.Direction.Right) { temp.transform.position = actor.CurrentNode.Right.transform.position; } }
private void SetAction(Weapons.Hitbox hitbox, string actionType, int range, int damage, GameObject prefab) { try { action = (Actions.Action)Activator.CreateInstance(null, "Assets.Scripts.CardSystem.Actions." + actionType).Unwrap(); action.HitBox = hitbox; action.Range = range; action.Damage = damage; action.Prefab = prefab; action.Element = this.element; } catch (Exception e) { action = new Error(); Debug.LogError(e.Message + ": for " + actionType + ". Setting " + name + "'s action to Error."); } }
public override void useCard(Character actor) { Weapons.Hitbox temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; if (actor.Direction == Util.Enums.Direction.Left) { temp.transform.position = actor.CurrentNode.Left.transform.position; if (range > 1 && actor.CurrentNode.Left.panelExists(Util.Enums.Direction.Down)) { temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; temp.transform.position = actor.CurrentNode.Left.Down.transform.position; } if (range > 2 && actor.CurrentNode.Left.panelExists(Util.Enums.Direction.Up)) { temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; temp.transform.position = actor.CurrentNode.Left.Up.transform.position; } } if (actor.Direction == Util.Enums.Direction.Right) { temp.transform.position = actor.CurrentNode.Right.transform.position; if (range > 1 && actor.CurrentNode.Right.panelExists(Util.Enums.Direction.Down)) { temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; temp.transform.position = actor.CurrentNode.Right.Down.transform.position; } if (range > 2 && actor.CurrentNode.Right.panelExists(Util.Enums.Direction.Up)) { temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; temp.transform.position = actor.CurrentNode.Right.Up.transform.position; } } }
protected void spawnObjectUsingPrefabAsModel(int damage, int distance, float deathTime, bool piercing, Util.Enums.Direction direction, float speed, int timesCanPierce, bool isFlying, Grid.GridNode spawnPosition, Player.Character actor) { Weapons.Hitbox temp = MonoBehaviour.Instantiate(hitbox); GameObject model = MonoBehaviour.Instantiate(prefab); model.transform.parent = temp.transform; temp.Damage = damage; temp.Distance = distance == 0 ? 1 : distance; temp.DeathTime = deathTime; temp.Piercing = piercing; temp.Direction = direction; temp.Speed = speed; temp.TimesCanPierce = timesCanPierce; temp.IsFlying = isFlying; temp.Owner = actor.gameObject; temp.Element = element; Util.AddElement.AddElementByEnum(model, element, true); temp.CurrentNode = spawnPosition; temp.transform.position = spawnPosition.transform.position; }
public override void useCard(Character actor) { //Create a reference to the node we're trying to destroy. Since we do not know the //entire grid map, we will start at the actor origin and work from there. Grid.GridNode targetNode = actor.CurrentNode; //Keep track of the hitbox in case we want to do damage when we destroy a tile. Weapons.Hitbox temp = MonoBehaviour.Instantiate(hitbox); temp.Damage = damage; temp.DeathTime = .2f; temp.transform.position = targetNode.transform.position; if (actor.Direction == Util.Enums.Direction.Left) { for (int i = 0; i < range; i++) { if (actor.CurrentNode.Left.panelExists(Util.Enums.Direction.Left)) { temp.transform.position = targetNode.Left.transform.position; targetNode = targetNode.Left; } } //Destroy the furthest tile within range. targetNode.Type = Assets.Scripts.Util.Enums.FieldType.Destroyed; } if (actor.Direction == Util.Enums.Direction.Right) { for (int i = 0; i < range; i++) { if (actor.CurrentNode.Right.panelExists(Util.Enums.Direction.Right)) { temp.transform.position = targetNode.Right.transform.position; targetNode = targetNode.Right; } } //Destroy the furthest tile within range. targetNode.Type = Assets.Scripts.Util.Enums.FieldType.Destroyed; } }
public virtual void OnTriggerEnter(Collider col) { if (col.tag == "Enemy") { Physics.IgnoreCollision(this.GetComponent <Collider>(), col); } Weapons.Hitbox hitbox = col.gameObject.GetComponent <Weapons.Hitbox>(); if (hitbox != null) { if (invulerability <= 0) { hit = true; TakeDamage(hitbox.Damage, hitbox.Element); invulerability = invulerabilityTime; } } Weapons.Projectiles.Stun s = col.gameObject.GetComponent <Weapons.Projectiles.Stun>(); if (s != null) { Stun = true; } OnTriggerEnterAI(col); }
protected void spawnObjectUsingPrefabAsModel(int damage, int distance, float deathTime, bool piercing, Util.Enums.Direction direction, float speed, int timesCanPierce, bool isFlying, Grid.GridNode spawnPosition, Player.Character actor, bool changeMaterial = false) { Weapons.Hitbox temp = MonoBehaviour.Instantiate(hitbox); GameObject model = MonoBehaviour.Instantiate(prefab); if (actor.Direction == Util.Enums.Direction.Left) { model.transform.localScale = new Vector3(model.transform.localScale.x, -model.transform.localScale.y, model.transform.localScale.z); } model.transform.parent = temp.transform; temp.Damage = damage; temp.Distance = distance == 0 ? 1 : distance; temp.DeathTime = deathTime; temp.Piercing = piercing; temp.Direction = direction; temp.Speed = speed; temp.TimesCanPierce = timesCanPierce; temp.IsFlying = isFlying; temp.Owner = actor.gameObject; temp.Element = element; Util.AddElement.AddElementByEnum(temp.gameObject, element, changeMaterial); temp.CurrentNode = spawnPosition; temp.transform.position = spawnPosition.transform.position; }
public Card(string name, string type, int range, int damage, string actionType, Weapons.Hitbox actionHitBox, string description, Sprite image) { this.name = name; SetType(type); SetAction(actionType, range, damage, actionHitBox); this.description = description; this.image = image; }
void OnTriggerEnter(Collider col) { Weapons.Hitbox hitbox = col.gameObject.GetComponent <Weapons.Hitbox>(); if (hitbox != null && !invun) { if (hitbox.Owner == this.gameObject) { return; } if (hitbox.GetType() == typeof(Weapons.Projectiles.Tornado)) { if (hitbox.Direction == Enums.Direction.Left) { if (currentNode.panelAllowed(Util.Enums.Direction.Left, Type)) { currentNode = currentNode.Left; transform.position = CurrentNode.transform.position; } else { if (currentNode.panelAllowed(Util.Enums.Direction.Up, Type)) { currentNode = currentNode.Up; transform.position = CurrentNode.transform.position; hit = true; damage = hitbox.Damage; damageElement = hitbox.Element; } else if (currentNode.panelAllowed(Util.Enums.Direction.Down, Type)) { currentNode = currentNode.Down; transform.position = CurrentNode.transform.position; hit = true; damage = hitbox.Damage; damageElement = hitbox.Element; } } } else { if (currentNode.panelAllowed(Util.Enums.Direction.Right, Type)) { currentNode = currentNode.Right; transform.position = CurrentNode.transform.position; } else { if (currentNode.panelAllowed(Util.Enums.Direction.Up, Type)) { currentNode = currentNode.Up; transform.position = CurrentNode.transform.position; hit = true; damage = hitbox.Damage; damageElement = hitbox.Element; } else if (currentNode.panelAllowed(Util.Enums.Direction.Down, Type)) { currentNode = currentNode.Down; transform.position = CurrentNode.transform.position; hit = true; damage = hitbox.Damage; damageElement = hitbox.Element; } } } } else { hit = true; damage = hitbox.Damage; damageElement = hitbox.Element; } } Weapons.Projectiles.Stun s = col.gameObject.GetComponent <Weapons.Projectiles.Stun>(); if (s != null) { Stun = true; } }
void Update() { if (Managers.GameManager.State == Enums.GameStates.Battle && !stun) { if (paused) { paused = false; anim.speed = animSpeed; } #region detectMove if (CustomInput.BoolFreshPress(CustomInput.UserInput.Up, playerNumber)) { if (currentNode.panelAllowed(Enums.Direction.Up, Type)) { directionToMove = Enums.Direction.Up; nextNode = currentNode.Up; } } else if (CustomInput.BoolFreshPress(CustomInput.UserInput.Down, playerNumber)) { if (currentNode.panelAllowed(Enums.Direction.Down, Type)) { directionToMove = Enums.Direction.Down; nextNode = currentNode.Down; } } else if (CustomInput.BoolFreshPress(CustomInput.UserInput.Left, playerNumber)) { if (currentNode.panelAllowed(Enums.Direction.Left, Type)) { directionToMove = Enums.Direction.Left; nextNode = currentNode.Left; } } else if (CustomInput.BoolFreshPress(CustomInput.UserInput.Right, playerNumber)) { if (currentNode.panelAllowed(Enums.Direction.Right, Type)) { directionToMove = Enums.Direction.Right; nextNode = currentNode.Right; } } else { directionToMove = Enums.Direction.None; } #endregion //get next state currState = machine.update(hit, animDone, directionToMove, hand.GetCurrentType(), hand.Empty(), playerNumber); //state clean up if (prevState != currState) { doOnce = false; animDone = false; attack = false; basicAttack = false; move = false; hit = false; if (weapon != null) { Destroy(weapon); } anim.SetInteger("state", (int)currState); } if (invunTimer > 0) { if (renderTimer > renderTime) { render = !render; renderTimer = 0; foreach (SkinnedMeshRenderer b in body) { b.enabled = render; } } hit = false; renderTimer += Time.deltaTime; invunTimer -= Time.deltaTime; } else if (!render || invun) { render = true; foreach (SkinnedMeshRenderer b in body) { b.enabled = true; } invun = false; } //run state switch (currState) { case Enums.PlayerState.Idle: Idle(); break; case Enums.PlayerState.MoveBegining: MoveBegining(); break; case Enums.PlayerState.MoveEnding: MoveEnding(); break; case Enums.PlayerState.Hit: Hit(); break; case Enums.PlayerState.Dead: Dead(); break; case Enums.PlayerState.BasicAttack: BasicAttack(); break; case Enums.PlayerState.HoriSwingMid: CardAnim(); break; case Enums.PlayerState.VertiSwingHeavy: CardAnim(); break; case Enums.PlayerState.ThrowLight: CardAnim(); break; case Enums.PlayerState.ThrowMid: CardAnim(); break; case Enums.PlayerState.Shoot: CardAnim(); break; case Enums.PlayerState.ChiAttack: CardAnim(); break; case Enums.PlayerState.ChiStationary: CardAnim(); break; case Enums.PlayerState.TauntGokuStretch: Taunt(); break; case Enums.PlayerState.TauntPointPoint: Taunt(); break; case Enums.PlayerState.TauntThumbsDown: Taunt(); break; case Enums.PlayerState.TauntWrasslemania: Taunt(); break; case Enums.PlayerState.TauntYaMoves: Taunt(); break; } if (move) { move = false; currentNode.clearOccupied(); currentNode = nextNode; currentNode.Owner = (this); transform.position = currentNode.transform.position; } #region useCard if (useCard) { if (!hand.Empty()) { Enums.CardTypes type = hand.GetCurrentType(); if (type == Enums.CardTypes.SwordHori || type == Enums.CardTypes.SwordVert) { weapon = Instantiate(Katana); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } if (type == Enums.CardTypes.WideSword) { weapon = Instantiate(WideSword); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.NaginataHori || type == Enums.CardTypes.NaginataVert) { weapon = Instantiate(Naginata); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.HammerHori || type == Enums.CardTypes.HammerVert) { weapon = Instantiate(Hammer); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.Fan) { weapon = Instantiate(Fan); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.Kanobo) { weapon = Instantiate(Kanobo); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale / .8f; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.Tanto) { weapon = Instantiate(Tanto); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.Wakizashi) { weapon = Instantiate(Wakizashi); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.Tonfa) { weapon = Instantiate(Tonfa); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale / .8f; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } else if (type == Enums.CardTypes.BoStaff) { weapon = Instantiate(BoStaff); weapon.transform.position = weaponPoint.position; weapon.transform.localScale = weaponPoint.localScale / .5f; weapon.transform.parent = weaponPoint; weapon.transform.localEulerAngles = new Vector3(0, 0, 0); } int sfxNumber = 0; switch (type) { case Enums.CardTypes.SwordVert: case Enums.CardTypes.SwordHori: case Enums.CardTypes.WideSword: case Enums.CardTypes.NaginataVert: case Enums.CardTypes.NaginataHori: case Enums.CardTypes.HammerVert: case Enums.CardTypes.HammerHori: case Enums.CardTypes.Fan: case Enums.CardTypes.Kanobo: case Enums.CardTypes.Tanto: case Enums.CardTypes.Wakizashi: case Enums.CardTypes.Tonfa: case Enums.CardTypes.BoStaff: sfxNumber = 0; break; case Enums.CardTypes.ThrowLight: case Enums.CardTypes.ThrowMid: case Enums.CardTypes.Shoot: sfxNumber = 2; break; case Enums.CardTypes.ChiAttack: case Enums.CardTypes.ChiStationary: sfxNumber = 3; break; default: break; } sfx.PlaySong(sfxNumber); useCard = false; hand.UseCurrent(this, deck); CardUIEvent(); } } #endregion if (basicAttack) { basicAttack = false; Weapons.Hitbox b = Instantiate(bullet); AddElement.AddElementByEnum(b.gameObject, element, true); b.Owner = this.gameObject; b.transform.position = Direction == Enums.Direction.Left ? currentNode.Left.transform.position : currentNode.Right.transform.position; b.CurrentNode = Direction == Enums.Direction.Left ? currentNode.Left : currentNode.Right; b.Direction = Direction; if (playerNumber == 2) { Transform model = b.transform.GetChild(0); model.localScale = new Vector3(model.localScale.x, -model.localScale.y, model.localScale.z); } sfx.PlaySong(2); } if (damage > 0 && takeDamage) { takeDamage = false; TakeDamage(damage, damageElement); damage = 0; damageElement = Enums.Element.None; } prevState = currState; } else { if (!paused) { animSpeed = anim.speed; anim.speed = 0; paused = true; } if (stun) { if ((stunTimer += Time.deltaTime) > stunTime) { stunTimer = 0f; stun = false; } } } }
protected override void RunAI() { if (Attacking && mechAnima.GetCurrentAnimatorClipInfo(0).Length > 0 && mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("SamuraiHorizontalSlash")) { Attacking = false; mechAnima.SetBool("Attack", false); } if (Hop && mechAnima.GetCurrentAnimatorClipInfo(0).Length > 0 && (mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("MoveBegin") || (mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("MoveEnd")))) { Hop = false; mechAnima.SetBool("Hop", false); transform.position = currentNode.transform.position; } //We change turns each second turn += Time.deltaTime; if (!hit) { if (turn > 3f) { mechAnima.SetBool("Hurt", false); turn = 0; if (currentNode.Left.Type == Util.Enums.FieldType.Blue) { if (!currentNode.Left.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Left; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } else if (currentNode.Left.Down != null && !currentNode.Left.Down.Occupied && !currentNode.Down.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Down; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } else if (currentNode.Left.Up != null && !currentNode.Left.Up.Occupied && !currentNode.Up.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Up; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } } //If player is above us else if (player.CurrentNode.Position.x < currentNode.Position.x) { //Check if we can move up. if (!currentNode.Up.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Up; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } } //If player is above us else if (player.CurrentNode.Position.x > currentNode.Position.x) { //Check if we can move up. if (!currentNode.Down.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Down; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } } //If they are in front of us, ATTACK!. else { AnimatorClipInfo[] temp = mechAnima.GetCurrentAnimatorClipInfo(0); if (temp.Length > 0 && temp[0].clip.name.Equals("SamuraiWait1")) { Attacking = true; mechAnima.SetBool("Attack", true); sfx.PlaySong(0); Weapons.Hitbox b = Instantiate(bullet).GetComponent <Weapons.Hitbox>(); b.transform.position = currentNode.Left.transform.position; b.CurrentNode = currentNode.Left; } } } } else { mechAnima.SetBool("Hurt", true); turn = 0; } }
protected override void RunAI() { if (Hop && mechAnima.GetCurrentAnimatorClipInfo(0).Length > 0 && (mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("MoveBegin") || (mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("MoveEnd")))) { Hop = false; mechAnima.SetBool("Hop", false); transform.position = currentNode.transform.position; } //We change turns each second turn += Time.deltaTime; if (!hit && (!Attacking && !ResetingPosition)) { if (turn > 1f) { //mechAnima.SetBool("Hop", false); turn = 0; //If player is above us if (player.CurrentNode.Position.x < currentNode.Position.x) { //Check if we can move up. if (!currentNode.Up.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Up; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } } //If player is above us else if (player.CurrentNode.Position.x > currentNode.Position.x) { //Check if we can move up. if (!currentNode.Down.Occupied) { currentNode.clearOccupied(); //Say we aren't here currentNode = currentNode.Down; //Say we're there currentNode.Owner = (this); //Tell the place we own it. mechAnima.SetBool("Hop", true); Hop = true; } } //If they are in front of us, ATTACK!. else if (this.transform.position.z == currentNode.transform.position.z && this.transform.position.x == currentNode.transform.position.x) { AnimatorClipInfo[] temp = mechAnima.GetCurrentAnimatorClipInfo(0); if (temp.Length > 0 && temp[0].clip.name.Equals("SamuraiWait1")) { mechAnima.SetBool("Attack", true); sfx.PlaySong(0); Attacking = true; } } } } else if (Attacking) { if (!mechAnima.GetBool("HoldAttack") && mechAnima.GetCurrentAnimatorClipInfo(0).Length > 0) { if (mechAnima.GetCurrentAnimatorClipInfo(0)[0].clip.name.Equals("SamuraiStabEnter")) { mechAnima.SetBool("HoldAttack", true); mechAnima.SetBool("Attack", false); } } if ((player.transform.position.z + 2f) < this.transform.position.z) { transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - 5f * Time.deltaTime); } else { ResetingPosition = true; mechAnima.SetBool("Attack", false); mechAnima.SetBool("HoldAttack", false); mechAnima.SetBool("WithdrawAttack", true); Attacking = false; Grid.GridNode t = currentNode; while (t.transform.position.z >= this.transform.position.z && t.Left != null) { t = t.Left; } Weapons.Hitbox b = Instantiate(bullet).GetComponent <Weapons.Hitbox>(); b.transform.position = t.transform.position; b.CurrentNode = t; } } else if (ResetingPosition) { AnimatorClipInfo[] temp = mechAnima.GetCurrentAnimatorClipInfo(0); if (currentNode.transform.position.z > this.transform.position.z) { transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + 6f * Time.deltaTime); } else if (temp.Length > 0 && (temp[0].clip.name.Equals("SamuraiStabExit") || temp[0].clip.name.Equals(("SamuraiWait1")))) { mechAnima.SetBool("WithdrawAttack", false); ResetingPosition = false; transform.position = currentNode.transform.position; } } else { mechAnima.SetBool("Hurt", true); turn = 0; } }